考えてみて、この時点で次のプログラムを実行すると何か出力があるでしょうか?処刑は成功するでしょうか?
#块级作用域 if 1 == 1: name = "lzl" print(name) for i in range(10): age = i print(age)
まず実行結果を見てみましょう
C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.py lzl 9
終了コード 0 でプロセスが終了しました
コードは正常に実行され、問題はありません。Java/C# では、上記のコードを実行すると、その名前とプロンプトが表示されます。 age は定義されていませんが、Python では正常に実行できます。これは、コード ブロック内の 変数 を外部から呼び出すことができるため、正常に実行できます。 2. ローカル スコープ
を学習したとき、関数は別のスコープでした。しかし、次のコードを見てください。 #localscope
def func(): name = "lzl" print(name)
このセクションのコードを実行して、出力があるかどうか考えてみませんか?
Traceback (most recent call last): File "C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.py", line 23, in <module> print(name) NameError: name 'name' is not defined
これは誰でも理解できると思いますが、name 変数は func() 関数内でのみ有効なので、上記のコードを簡単に調整して結果を確認してください。
前のコードにコードを追加しました。変数名が出力される前に、関数が実行されます。この時点で出力は変わりますか?#局部作用域 def func(): name = "lzl" func() #执行函数 print(name)
Traceback (most recent call last): File "C:/Users/L/PycharmProjects/s14/preview/Day8/作用域/main.py", line 23, in <module> print(name) NameError: name 'name' is not defined
#作用域链 name = "lzl" def f1(): name = "Eric" def f2(): name = "Snor" print(name) f2() f1()
#终极版作用域 name = "lzl" def f1(): print(name) def f2(): name = "eric" f1() f2()
#终极版作用域 name = "lzl" def f1(): print(name) def f2(): name = "eric" return f1 ret = f2() ret() #输出:lzl
#终极版作用域 name = "lzl" def f1(): print(name) def f2(): name = "eric" f1() f2() # 输出:lzl
li = [lambda :x for x in range(10)]
print(type(li)) print(type(li[0])) # <class 'list'> # <class 'function'>
関数の戻り値
は 0 ではなく 9 です。覚えておいてください: 関数が実行される前に内部コードは実行されません。ブログ内のコードを自分で練習して、印象を深めてください。以上がPython の 5 つのポイントを使用してスコープ メソッドを取得するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。