直接上代码
def l(list):
def d():
return list
return d
#运行
l = l([1,2,3,4])
print l()
这个情况是正常的。
问题在于d函数为什么不能传入list,然后我现在尝试了一下这个代码:
def l(list):
def d(list):
return list
return d
#运行
l = l([1,2,3,4])
#提示错误
print l()
#正常
print l([1,3,5,7,9])
请问这个怎么解释呢?
我个人理解的是,类似于“继承”的情况,当d函数没有参数传入的情况上,基于父函数的参数,当他需要传参了,就覆盖了???
LEGB の原則を見れば、何が起こっているか理解できるでしょう。
https://zhuanlan.zhihu.com/p/...
走る
l = l([1,2,3,4])
プロンプトエラー
print l() このエラーは、パラメーターが渡されていないことを意味します。
元のコード:
リーリー以下は説明するために使用されます: 元のコードの l は別のポイントを指します:
リーリーコードが次のように書かれていると理解できるかもしれません:
リーリー最後の 2 つのポイント:
list
のようなキーワードを変数名として使用しないでください(本当に必要な場合を除いて) 変数名を上書きしないでください
投稿者が理解する必要があるのは: 範囲
ケース 1: 関数 l は関数 d のアドレスを返します。これは戻り値としてのみ使用され、実行のために呼び出されません。
リーリーパラメータリストはlに渡され、スコープは関数l内にあり、dからアクセスできます(パラメータはdではなくlに渡されることに注意してください)。
リーリー リーリー リーリー リーリー リーリーリストにアクセスしたい場合は、次のように呼び出してください:
`