Pythonのnonlocal文

外部関数内に変数があり、内部関数からアクセスする必要がある場合があります。 関数outer内に変数iを宣言しましょう。 内部関数に対するこの変数は外部変数となります(グローバル変数とは外部のコードでのみ宣言された変数です)。 そして関数innerにiへの1の加算を設定します:

pythondef outer():
  i = 0

  def inner():
    i += 1  # [4, 9, 25]を出力します

  inner()

  return i

しかし、innerにとって変数iはローカル変数であり、Pythonはそれを未宣言と見なして対応するエラーを出力します。 以前は、このようなエラーはglobal文で修正されていました。 しかし、ここではiは外部変数なので、nonlocal文を使用すべきです。 これは、リストされた変数名をグローバルを除く最も近いスコープから取得します。つまり、inner内部のiはこの関数の上位で宣言された変数から取得されます:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # 1を出力します
Задание 1

次のコードで、あるプログラマーが誤りを犯しました:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

このコードのどこが間違っていますか?コード作者の誤りを見つけて修正してください。

Задание 2

次のコードで、あるプログラマーが誤りを犯しました:

pythonnum = 3
def outer():
  num += 1
  tst = num

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

このコードのどこが間違っていますか?コード作者の誤りを見つけて修正してください。