[ホセ】-こんにちは､ お帰りなさい｡
このビデオでは､ マップ機能について説明しています｡
前回のビデオでは､ どのような場合にフィルタを使うのか､
あるいはどのような場合にジェネレータ内包を使うのかを簡単に説明しました｡
そこで､ 「Pythonでプログラミングを始めて日が浅い人と一緒にプログラミングをするときに､
フィルタを使うことになる」ということを簡単にお伝えしておきたいと思います｡
「例えば､
他のプログラミング言語から来たプログラマーや､
複数のプログラミング言語が含まれるプロジェクトの場合などです｡
Pythonは､ このような構文を持つ数少ないプログラミング言語の一つです｡
ですから､ もし多くのプログラミング言語を使うのであれば､
フィルター機能を使うのが理にかなっていると思いますし､
そうすることで､ すべてを一貫して保つことができます｡
使用するすべての言語を通して､
フィルター機能を使用します｡
また､ すでに関数が定義されている場合はフィルター関数を使用することになり､
関数を作成する必要はない｡
そうすれば､ もう少し速くなります｡
最後に､ この理解で作っているこの変数にも言いたいことがあります｡
この変数はかなり無意味なので､ ここでこの変数を作らないというのもありだと思います｡
どちらを選ぶかはあなた次第ですが､
主な判断材料としては､ 内包ではなくフィルタ関数が好きな人と一緒にプログラミングをしているかどうかということでしょう｡
もしあなたがPythonの開発者だけでプログラミングをしているのなら､
内包を使いましょう｡
さて､ もうこの辺で｡
マップ機能について説明します｡
map関数は､ 反復処理可能な要素を受け取り､
各要素が何らかの関数に従って変更された新しい反復処理可能な要素を出力するために使用されます｡
例えば､ この地図を見てみましょう｡
Friends_lowerはmap(lambda x: x)になる｡ 下､ 友人の）｡
ここでも､ フィルター機能と非常によく似ています｡
また､ 何かを返すスタートの関数を受け取り､
バロメーターとして何かを受け取ります｡
そして､ 受け取るのは､ ここにある反復可能の各要素です｡
だから､ 最初はRolphで､ Rolphをすべて小文字で返します｡
そして､ Joseを取り､ すべて小文字で返すなどしています｡
でも､ 発電機が出るんですよ｡
だから､ 最初に「next」を呼ぶと､ すべて小文字の「Rolph」が出てくる｡
そうしよう｡
そして､ ご覧のように､ そこにはすべて小文字でRolphと書かれています｡
これは､ こちらのリストの理解度と非常に同じです｡
friendsの中のfriendをfriend
lowerと呼びますが､ もちろんこのfriends_lowerというジェネレータの内包と同じものです､ こんな感じです｡
どちらを使うべきでしょうか？
これは､ ジェネレータの理解ですが､ 全部をリストにする必要がなければ､
このリスト理解をすればいいのです｡
mapはどのような時に使うのですか？
先ほども言ったように､ チームのメンバーや一緒に仕事をしている人が､
他のプログラミング言語でよく使われているmapに慣れている場合､
あるいは他のプログラミング言語を同時に使っていて､
すべてを統一したい場合､ あるいは先に定義した関数を新しいラムダ関数を作らなくても使えるので読みやすくなる場合などです｡
そこで､ もう一つのポイントとして､ filterの代わりにmapを使用する場合の例を紹介します｡
例えば､ User:というクラスがあり､ initメソッドを定義し､
ユーザー名とパスワードを含むとします｡
そして､ _dictからのclassmethodを持っています｡
つまり､ データの辞書が与えられれば､ ユーザー・オブジェクトを返すことになるわけです｡
つまり､ 例えばユーザー名とパスワードのデータを返すということです｡
なるほど｡
このようにユーザークラスで定義されています｡
このようなユーザーのリストがあるので､ 退屈しないように私のノートからコピーして入力します｡
Rolfとtecladoisawesomeがあり､ youaretooがパスワードなんですね｡
このfrom_dict関数があるとして､
これらの辞書からユーザーオブジェクトのリストを作成したい場合､ 次のようにします｡
そして､ それがユーザーです｡ from_dict(user) for, すみませんこれはユーザーリストとすべきですね､
ちなみに失礼しました､ for user in users,
で大丈夫です｡
でも実は､ 地図はもっと読みやすくてもいいような気がするんです｡
また､ 少し短くなっていますが､ それはさておき｡
ただ､ この方が､ ここから呼び出していることがわかるので､
読みやすいと思うんです｡ イテレート可能な各要素に対応するディクティブル関数です｡
一方､ リスト内包では､
それを読み取る必要があり､
反復処理にのみ使用される新しい変数を作成しなければならず､
実際にはここでこの関数を呼び出しています｡
だから､ もしあなたもそう感じるなら､ リスト理解よりマップの方がいい場合もあるということを､
心に留めておいてください｡
これはあくまで一例です｡
このビデオは以上です｡
マップ機能について何か知っていただけたでしょうか？