検索

ホームページ  >  に質問  >  本文

python嵌套函数作用域怎么解释

直接上代码

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

阿神阿神2781日前588

全員に返信(3)返信します

  • PHP中文网

    PHP中文网2017-04-18 10:25:18

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

    走る

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

    プロンプトエラー

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

    返事
    0
  • 迷茫

    迷茫2017-04-18 10:25:18

    元のコード:

    リーリー

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

    リーリー

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

    リーリー

    最後の 2 つのポイント:

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

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

    返事
    0
  • PHP中文网

    PHP中文网2017-04-18 10:25:18

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

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

    リーリー

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

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

    `

    リーリー リーリー リーリー リーリー リーリー

    返事
    0
  • キャンセル返事