Python3.X増加キーワードnonlocal

1212 ワード

グローバル変数と別名Pythonには、グローバル役割ドメインとローカル役割ドメインの2つの役割ドメインしかありません.グローバル役割ドメインとは、現在のコードが存在するモジュールの役割ドメインを指し、ローカル役割ドメインとは、現在の関数またはメソッドが存在する役割ドメインを指します.正確にはPython 3.xはnonlocalキーワードを導入し,外部作用ドメインの変数を識別するために使用できる.
ローカル役割ドメインのコードは、グローバル役割ドメインを含む外部役割ドメインの変数を読み取ることができますが、変更することはできません.変更すると、ローカル変数として扱われます.また、変更前に読み取り操作を行った場合は、例外が放出されます.
def f():
  x = '1'
  def g():
    x += '2'
    return x
  return g
print f()()

外部役割ドメインの変数を変更するには、グローバル役割ドメインに挿入しglobalキーワードで変数を導入するのが最も簡単です.
x = ''
def f():
  global x
  x = '1'
  def g():
    global x
    x += '2'
    return x
  return g
print f()()

Python 2.xでは,閉パケットは外部関数の変数しか読めず,書き換えることはできない.
def a():
  x = 0
  def b():
    print locals()
    y = x + 1
    print locals()
    print x, y
  return b

a()()
xに値を割り当てる操作を行う場合、
Python 2.xでこの問題を解決するには、グローバル変数:globalしか使用できません.
この問題を解決するために、Python 3.xはnonlocalキーワードを導入した(詳細はThe nonlocal statementを参照).閉パッケージ内でnonlocalで変数を宣言すれば、解釈器に外層関数で変数名を検索させることができます.
def a():
  x = 0
  def b():
    nonlocal x
    x += 1
    print x
  return b

a()()