QIITAの解説は変数のネーミングが紛らわしくて余計混乱する。aとかbで良いし、スコープが違っても違う変数名を使ってほしい。頭使えないのですごく時間使う(ToT)
関数の()は飾りやおまけじゃない(と思う)
関数は f() とカッコが付けば実行される
関数が引数になるときは g(f) と引数部分では()が付かない「アドレス渡し」が多い。
アドレスを渡して準備をしてその時を待つのだ、t= threading.Thread(target=f)なんかそうですね。
ところが 引数の場合、g( f() ) とカッコをつけて実行保証渡しにしても良いようだ。
()を付けたときと付けない時を試してみた
def fa(f):
print('fa')
return f
def fb():
print('fb')
c = fa(fb) #関数の引数に関数のアドレスを渡してスタンバイする
c #実行
print('---------') #見やすいように区切り
d = fa(fb()) #関数の引数に実行形式の関数を渡してスタンバイ
d #実行
結果は
fa
---------
fb
fa
想像解説
c 実行形式の関数が代入されたので実行
fa実行(引数はfbのアドレス) print('fa')
return fb アドレスをそのまま帰す
fbのアドレス
print('---------')
d 実行形式の関数が代入されたので実行
fa実行(引数はfb()の実行命令) print('fa')
return fb() 実行命令をそのまま返す
fb()実行 print('fb')
いや、やっぱり解らん
def fa(f):
print('fa')
return f
def fb():
print('fb')
fa(fb)()
print('---------')
fa(fb())
fa
fb
---------
fb
fa
higher-order function 高階関数にする
高位関数でいいんじゃね?
def fa(f):
def fi():
print('fa')
f()
return fi
def fb():
print('fb')
fa(fb)
print('---------')
fa(fb)()
---------
fa
fb
fa(fb)()
美しくないのに動いてしまう!
正直解らん
因数分解が出来ないからか?
決め事を知らないだけか?
助けてくれ
def fa(f):
def fi():
print('fa')
f()
return fi
@fa
def fb():
print('fb')
fb()
fa
fb
デコレータ出来ましたけど意味がわかってない。
挫折しそうな焦燥感、余計なことやるからか?
(-_-;)
コメント