ホームページ >バックエンド開発 >Python チュートリアル >Python の 5 つのポイントを使用してスコープ メソッドを取得する
考えてみて、この時点で次のプログラムを実行すると何か出力があるでしょうか?処刑は成功するでしょうか?
#块级作用域 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)実行してもエラーが報告されます。先ほどの文に戻りましょう。関数が実行されたとしても、名前のスコープは関数内にのみあり、最初の 2 つの知識ポイントを覚えておいてください。 , そして次のトリックを開始します3. スコープチェーン関数を調整して、次のコードの実行結果を確認してください。
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()実行結果は "lzl" です。 上記のコードの実行結果は、関数 f1 のメモリ アドレスです。つまり、ret=f1; ret() を実行することは、f1() を実行することと同じであり、f2() と f1() は同じスコープチェーン内にあります。関数内に変数がない場合は外部を参照するため、この時点での変数名の値は「lzl」になります。これを理解すれば、与えなかった最終的なコードの答えもわかります。今すぐ答えてください
#终极版作用域 name = "lzl" def f1(): print(name) def f2(): name = "eric" return f1 ret = f2() ret() #输出:lzlはい、出力は「lzl」です、関数が実行される前にスコープが形成され、スコープチェーンも生成されていることを覚えておいてください5. Sinaのインタビューの質問
#终极版作用域 name = "lzl" def f1(): print(name) def f2(): name = "eric" f1() f2() # 输出:lzlタイプを決定する方法李の? li の要素はどのような型ですか?
li = [lambda :x for x in range(10)]
print(type(li)) print(type(li[0])) # <class 'list'> # <class 'function'>li 最初の
関数の戻り値
は 0 ではなく 9 です。覚えておいてください: 関数が実行される前に内部コードは実行されません。ブログ内のコードを自分で練習して、印象を深めてください。以上がPython の 5 つのポイントを使用してスコープ メソッドを取得するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。