В очередной раз столкнулся с "новички не умеют пользоваться global", поэтому для них написал 8 примеров для проверки понимания global, ну и mutable/immutable заодно.
# ok foo = 1 def bar(): print('in bar', foo) bar() print('out bar', foo) # ok foo = 1 def bar(): foo = 2 print('in bar', foo) bar() print('out bar', foo) # UnboundLocalError foo = 1 def bar(): print('1, in bar', foo) foo = 2 print('2, in bar', foo) bar() print('out bar', foo) # ok foo = 1 def bar(): global foo print('1, in bar', foo) foo = 2 print('in bar', foo) bar() print('out bar', foo) # UnboundLocalError foo = [1] def bar(): print('1, in bar', foo) foo = [2] print('2, in bar', foo) bar() print('out bar', foo) # ok foo = [1] def bar(): global foo print('1, in bar', foo) foo = [2] print('2, in bar', foo) bar() print('out bar', foo) # ok ;) foo = [1] def bar(): print('1, in bar', foo) foo.append(2) print('2, in bar', foo) bar() print('out bar', foo) # ok ;) foo = [1] def bar(): print('1, in bar', foo) foo[:] = [2] print('2, in bar', foo) bar() print('out bar', foo)
