La declaración nonlocal en Python

Hay casos en los que en una función externa hay una variable a la que se necesita acceder desde la función interna. Declaremos en la función outer la variable i. En relación a la función interna, esta variable será externa (las variables globales son solo las declaradas en el código externo). Y a la función inner asignémosle la suma de i más uno:

pythondef outer():
  i = 0

  def inner():
    i += 1  # dará error

  inner()

  return i

Sin embargo, para inner la variable i es local, Python la considera no declarada y muestra el error correspondiente. Antes, este tipo de error se solucionaba usando la declaración global. Sin embargo, aquí i es una variable externa, por lo tanto se debe usar la declaración nonlocal. Esta toma los nombres de variables listados en el ámbito de visibilidad más cercano, excluyendo el global, es decir, i dentro de inner se tomará de la variable declarada arriba de esta función:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # mostrará 1
Задание 1

En el siguiente código, algún programador cometió un error:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

¿Qué está mal con este código? Encuentre y corrija el error del autor del código.

Задание 2

En el siguiente código, algún programador cometió un error:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

¿Qué está mal con este código? Encuentre y corrija el error del autor del código.