python嵌套函数作用域怎么解释
阿神
阿神 2017-04-18 10:23:18
0
3
585

直接上代码

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函数没有参数传入的情况上,基于父函数的参数,当他需要传参了,就覆盖了???

阿神
阿神

闭关修行中......

全員に返信(3)
洪涛

LEGB の原則を見れば、何が起こっているか理解できるでしょう。
https://zhuanlan.zhihu.com/p/...

走る

l = l([1,2,3,4])

プロンプトエラー

print l() このエラーは、パラメーターが渡されていないことを意味します。

いいねを押す +0
迷茫

元のコード:

リーリー

以下は説明するために使用されます: 元のコードの l は別のポイントを指します:

リーリー

コードが次のように書かれていると理解できるかもしれません:

リーリー

最後の 2 つのポイント:

  1. listのようなキーワードを変数名として使用しないでください

  2. (本当に必要な場合を除いて) 変数名を上書きしないでください

いいねを押す +0
Ty80

投稿者が理解する必要があるのは: 範囲

ケース 1: 関数 l は関数 d のアドレスを返します。これは戻り値としてのみ使用され、実行のために呼び出されません。

リーリー

パラメータリストはlに渡され、スコープは関数l内にあり、dからアクセスできます(パラメータはdではなくlに渡されることに注意してください)。

リストにアクセスしたい場合は、次のように呼び出してください:

`

リーリー リーリー リーリー リーリー リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート