次のコード例を検討してください。
def testClosure():
count = 0
def increment():
count += 1
for i in range(10):
increment()
print(count)
これを呼び出すと、次のようになります。
Traceback (most recent call last):
File "/Users/cls/workspace/PLPcython/src/sandbox.py", line 23, in <module>
testClosure()
File "/Users/cls/workspace/PLPcython/src/sandbox.py", line 18, in testClosure
increment()
File "/Users/cls/workspace/PLPcython/src/sandbox.py", line 15, in increment
count += 1
UnboundLocalError: local variable 'count' referenced before assignment
私はC ++で動作するこのようなコードに慣れています:
void testClosure() {
int count = 0
auto increment = [&](){
count += 1;
};
for (int i = 0; i < 10; ++i) {
increment();
}
}
私は何が間違っているのですか?内部関数から外部関数のローカル変数を変更することはできませんか?これらの異なるタイプのクロージャ(PythonとC ++)はありますか?
あなたがこれをすれば私はそれを動かしました:
def testClosure():
count = 0
def increment():
nonlocal count
count += 1
for i in range(10):
increment()
print(count)
testClosure()
これはPython3.xでのみ機能することに注意してください。ただし、明らかに使用しているため、問題はありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加