Python公式チュートリアルを頑張って読んでいる ラムダ・キーワード引数
これです。
言語はPythonが初めてです。
すごいひと「プログラミングは公式ドキュメント読めば分かるよ」
僕「わかりました!」
...
僕「メソッド?クラス?分からんやめよ」
僕「リストとかのこういうの(['kiwi', 'apple', 'banana'])入力するの面倒だからやめよ」
公式ドキュメント「1.やる気を高めよう」
僕「」
めちゃくちゃゆっくりなペースですが読んでます。
分かるひとには何を当たり前な事を...って感じですけど自分用の記録として。
4.7.5. ラムダ式
lambdaで名前の無い関数を作れる。
defでmake_incrementorって関数作って、その中にlambdaで関数作ってる↓
nは仮の引数?
>>> def make_incrementor(n):
... return lambda x: x + n
...
make_incrementorをfに代入してる。呼び出す時楽だからかな?↓
>>> f = make_incrementor(42)
>>> f(0)
42
>>> f(1)
43
最初見たとき何で4,1,3,2の順番なのか5分ぐらい分からなかったw
>>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
>>> pairs.sort(key=lambda pair: pair[1])
>>> pairs
[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
これは辞書の二つ目の要素でソート「pair: pair[1]」してるのでアルファベットでソートされてる。
辞書の1つ目の要素でソート「pair: pair[0]」すれば数字でソートできる。
>>> pairs = [(1, "one"), (2, "two"), (3, "three"), (4, "four")]
>>> pairs.sort(key=lambda pair: pair[0])
>>> pairs
[('one', 1), ('two', 2), ('three', 3), ('four', 4)]
それか辞書の要素の順番を入れ替えるかすれば数字でソート出来る(これは無いか)
>>> pairs = [("one", 1), ("two", 2), ("three", 3), ("four", 4)]
>>> pairs.sort(key=lambda pair: pair[1])
>>> pairs
[('one', 1), ('two', 2), ('three', 3), ('four', 4)]
4.7.2. キーワード引数
関数には必須引数とオプション引数を指定出来る。
↓のvoltageが必須引数、state,action,typeがオプション引数。
def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
print("-- This parrot wouldn't", action, end=' ')
print("if you put", voltage, "volts through it.")
print("-- Lovely plumage, the", type)
print("-- It's", state, "!")
parrot関数を呼び出す時、必須引数(ここだとvoltage)は入れないとだめ。
オプション引数は何も入れなければ、関数で指定されてる値が勝手に入る。
関数を呼び出す際に一緒に入れる引数は、カンマで区切られた順に割り当てられる?
parrot('a million', 'bereft of life', 'jump')なら、
voltage引数にはa millionが、
state引数にはbereft of lifeが、
action引数にはjumpが入る。
type引数は指定してないのでNorwegian Blueが入る。
引数を指定する事も出来る。
parrot(action='VOOOOOM', voltage=1000000)
これはだめらしい。
✖︎ parrot(voltage=5.0, 'dead')
多分これ↓ならok、引数を指定する場合は、指定してない引数よりも後ろにしなきゃいけないみたい。
◎ parrot('dead', voltage=5.0)
あとこれ。初見で全く意味が分からなくて理解するのに時間かかった。
↓関数作る
def cheeseshop(kind, *arguments, **keywords):
print("-- Do you have any", kind, "?")
print("-- I'm sorry, we're all out of", kind)
for arg in arguments:
print(arg)
print("-" * 40)
for kw in keywords:
print(kw, ":", keywords[kw])
↓関数呼び出す
cheeseshop("Limburger", "It's very runny, sir.",
"It's really very, VERY runny, sir.",
shopkeeper="Michael Palin",
client="John Cleese",
sketch="Cheese Shop Sketch")
↓出力
-- Do you have any Limburger ?
-- I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
shopkeeper : Michael Palin
client : John Cleese
sketch : Cheese Shop Sketch
def cheeseshop(kind, *arguments, **keywords):
↑の*argumentsで引数をカンマで区切ってたくさん指定出来るって意味らしい。
↑の例だと、⑴"It's very runny, sir.","It's really very, ⑵VERY runny, sir."で二つの引数を指定してる。forで回してる。
で、どっからが**keywords何だ?カンマでずっと区切ってるじゃん、ずっと*argumentsの範囲やろ。って思ってたけど、a=bみたいになってるやつを辞書として受け取ってるみたい。**keywordsが受け取ってるのはこいつら↓
shopkeeper="Michael Palin",
client="John Cleese",
sketch="Cheese Shop Sketch"
こちらの解説が分かりやすかった。
使いこなせるまでまだまだ先は長い...というかいつ使うんだろ...