インターネット上には Python の範囲についての紹介がたくさんあります。そのため、今日私が皆さんに共有する記事は、Python の範囲を簡単に理解するためにこれらの 5 つの知識ポイントを学習できるようにするものです。
">
1. ブロックレベルスコープ
考えてみて、この時に次のプログラムを実行したら出力はあるでしょうか?実行は成功しますか?
#ブロックレベルスコープ
if 1 == 1:
name = "lzl"
print(name)
for i in range(10):
age = i
print(age)
まずは実行結果を見てみましょう
C:/Users/L/PycharmProjects/ s14/preview/Day8/scope/main.py
lzl
9
プロセスは終了コード 0 で終了しました
コードは Java/C# で問題なく実行され、上記のコードは name を要求しますが、age は定義されていません。ただし、Python では正常に実行できます。これは、コード ブロック内の変数を外部から呼び出すことができるためです。
2. ローカル スコープ
関数について学んだとき、関数は別のスコープでした。しかし、次のコードを見てください。ローカル スコープがあります。 #localscope
def func():
name = "lzl"
print(name)
このコードを実行して、何か出力があるかどうか疑問に思いますか?
Traceback (most last call last):
File "C :/Users/L/PycharmProjects/s14/review/Day8/scope/main.py"、 print(name)
NameError: name 'name' が定義されていません
実行エラー、私誰もがこれを理解できると信じて、変数に名前を付けます。これは func() 関数内でのみ有効なので、上記のコードを簡単に調整して結果を確認することはできません。
#ローカル スコープ
def func ():
name = "lzl"
func() #関数の実行
print(name)
変数名を出力する前に、この時点で関数が実行されます。
トレースバック? (最後の呼び出し):
ファイル "C:/Users/L/PycharmProjects/s14/preview/Day8/scope/main.py"、 の 23 行目 print(name) )
NameError: name 'name' が定義されていません
実行してもエラーが報告されます。先ほどの文に戻りましょう: 関数が実行されたとしても、name のスコープは関数内のみであり、まだ実行できません外部から呼び出される; 最初の 2 つの知識ポイントを覚えておいてください。次に、トリック
3 の拡張を開始します。関数を調整して、次のコードの実行結果を確認します。
#スコープチェーン
name = "lzl"
def f1(): name = "Eric"
def f2():
name = "Snor"
print(name)
f2()
f1()
関数を勉強したことがある人なら、f1() が実行された後に Snor が出力されることを知っているはずです。まず、Python にはスコープチェーンがあり、変数は内側から外側に向かって検索されます。持っていない場合は、エラーが見つからなくなるまで上司に行って探してください
4. Ultimate Edition のスコープ
さて、準備は十分です。 、究極版はこちらです~~
#ULTIMATE Edition スコープ
name = "lzl"
def f1():
print(name)
def f2():
name = "eric"
f1()
f2()
f2() が "lzl" を出力する最終的な実行結果を考えてみましょう。それとも "eric" を出力しますか?今は答えを投稿しないでください:
#ULTIMATE SCOPE
name = "lzl"
def f1():
print(name)
def f2() :
name = "eric"
return f1
ret = f2()
ret()
#Output: lzl
実行結果は "lzl" で、上記のコードを分析して、f2() を実行すると、結果は関数 f1 のメモリアドレス、つまり ret=f1; ret() を実行することは、f1() を実行することと同じであり、f2() と f1() は関係ありません。チェーンが同じスコープ内にある場合、関数内に変数がない場合は外側を参照するため、このときの変数名の値は「lzl」になります。これを理解すれば、最終的なコードの答えもわかります。今答えを与えていないことを
#ULTIMATE SCOPE
def f1():
print(name)
def f2():
name = "eric"
f1( )
f2()
# 出力: lzl
はい、出力は「lzl」です。関数が実行される前にスコープが形成され、スコープチェーンも生成されていることを覚えておいてください
5. Sina のインタビューの質問
li = [lambda :x for x in range (10)】
李のタイプを決定しますか? li の要素はどのような型ですか?
print(type(li))
print(type(li[0]))
#
#
li がlist 型の場合、リスト内の要素は関数であり、リスト内の最初の要素の戻り値を出力します。このときの戻り値は何ですか?
#lambada面接の質問
li = [lambda :x for x in range(10)]
res = li[0]()
print(res)
#Output: 9
liFirst関数の戻り値of 9 は 0 ではありません。覚えておいてください: 関数が実行される前に内部コードは実行されません。ブログ内のコードを自分で練習して、印象を深めることができます
概要
上記がこの記事の全内容です。皆さんの勉強や仕事に役立つかどうかはわかりませんが、ご質問がございましたら、メッセージを残してください。
以上がPythonの範囲をわかりやすく理解するための5つの知識を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。