6

Python言語リファレンス(v 3.1、ここを参照-http: //docs.python.org/py3k/reference/executionmodel.html#naming-and-binding)から:

囲んでいるスコープによって参照されている名前のバインドを解除することは違法です。コンパイラはSyntaxErrorを報告します。

しかし、次のコードを実行すると:

a = 3

def x():
  global a
  del(a)

print(a)
x()

正常に動作します。呼び出しの順序を変更すると、次のようになります。

x()
print(a)

SyntaxErrorではなくNameErrorが発生します。どうやら、私はルールを正しく理解していません。誰かがそれを説明できますか?ありがとう。

4

2 に答える 2

4

そのルールがグローバルスコープには適用されないと思います。グローバル スコープは常に完全にアクセス可能です。

次に例を示します。

>>> def outer():
...     a=5
...     def inner():
...         nonlocal a
...         print(a)
...         del a
...
SyntaxError: can not delete variable 'a' referenced in nested scope
于 2011-02-20T09:34:15.173 に答える
3

私は python-devel リストの人々に連絡し、ここに私が得たものがあります:

実際、3.2以降でそれを行うことができます。今、その文を削除しました。

つまり、実際にはドキュメントのエラーのようなものでした。

于 2011-03-01T19:16:01.403 に答える