2016/11/20
详情见代码
Python 作为高级语言, 抽象层次很高, 然一个程序员一般都会好几门语言, 有时候会在语言的细节处, 发生概念性的混淆
有点害怕, 是不是一直误解了 Python 的作用域原理?
正确的作用域原理是什么?
答案: LEGB法则
初学 Python 语法的时候, 由于觉得这东西太复杂, 就快速跳过了, 没想到是个坑( maybe feature ? )
def find(sequence, target):
for index, value in enumerate(sequence):
if value == target:
break
else:
return -1
return index # ?? 这里是否可表示 index 已经逃离 for...in 作用域了?
print find(range(10), 1)
for iii in range(10):
iii += 1
print iii
一直以为是这样的
for (int i=0; i<10; ++i)
do something # i的作用域在 for 中
拷贝代码, 运行
搜索了 Python 作用域的相关介绍
https://www.zhihu.com/questio...
伊谢尔伦2017-04-18 09:59:28
これは、JavaScript の var
、js
の
js で var
で定義された変数のスコープは関数全体であるため、let
で定義された変数は let
の場合、ES6 構文に追加されます。
です。後でログインすると、for(let i = 0; i < 100; i++)
undefined
になります。
リーリー
あなたのコードは Java に似ています怪我咯2017-04-18 09:59:28
これをこれに変更し、locals() 関数を出力します
リーリー出力が見つかります
リーリー出力から、インデックス、値、ターゲット、シーケンスが同じ名前空間にあることがわかります。なぜなら、それらは両方とも同じ機能にあるからです。これでインデックスにアクセスできるようになります。
Python のスコープ
最も内側のレベルで検索します。通常は関数 locals()
モジュール内を検索します。つまり、globals()
モジュールの外で検索、つまり __builtin__ 内で検索
PHP中文网2017-04-18 09:59:28
簡単に言うと、Python ではモジュール、クラス、関数のみが新しいスコープを作成するため、for ループ内で定義された変数は、同じスコープ内にある限り、ループの外からもアクセスできます。