Как да накарам този код да работи?
def f1():
def f2():
print g
g = 1
print g
g = 0
print g
f2()
print g
f1()
Очакваният резултат, разбира се, е 0, 0, 1, 1, отпечатани ред по ред
Как да накарам този код да работи?
def f1():
def f2():
print g
g = 1
print g
g = 0
print g
f2()
print g
f1()
Очакваният резултат, разбира се, е 0, 0, 1, 1, отпечатани ред по ред
Ако не искате да използвате глобални:
def f1():
def f2():
print g[0]
g[0] = 1
print g[0]
g =[0]
print g[0]
f2()
print g[0]
f1()
Това е за да се преодолее проблемът с невъзможността да се преназначи променлива, принадлежаща към външния обхват. Когато го присвоите отново, вие основно създавате нова променлива в рамките на вложената функция. За да заобиколите това, обгръщате стойността си в списък и вместо това преназначавате елемента на списъка.
Това е проблем в Python 2. Python 3 го коригира чрез използването на нелокалния оператор:
http://technotroph.wordpress.com/2012/10/01/python-closures-and-the-python-2-7-nonlocal-solution/
Какво за това :
def f1():
def f2():
global g
print g
g = 1
print g
global g
g = 0
print g
f2()
print g
f1()
Изход:
0
0
1
1
print
изрази използвате Python 2. В Python 3 можете да използвате ключовата думаnonlocal
, за да получите това, което искате. В Python 2 почти нямате късмет AFAIK. - person Wooble   schedule 13.11.2013g
като член на класа, който да използвате навсякъде, където пожелаете. - person Inbar Rose   schedule 13.11.2013