Есть такая конструкция:
def foo(x):
a = b = 0
def bar(i):
...
for i in x:
bar(i)
print a, b
Внутри bar нужно изменять a и b, но это не возможно.
Решил попробовать использовать атрибуты. Пример:
In [1]: def testatr(x):
...: testatr.a += x
...:
...:
In [2]: testatr.a = 10
In [3]: testatr(10)
In [4]: testatr.a
Out[4]: 20
Тут есть проблема:
In [5]: tatr = testatr
In [6]: testatr = 0
In [7]: tatr(10)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/home/glitch/<ipython console> in <module>()
/home/glitch/<ipython console> in testatr(x)
AttributeError: 'int' object has no attribute 'a'
Может есть какой-то способ обратиться к атрибутам этой функции внутри def? Честно говоря, я рассчитывал на что-нибудь типа self, но найти не смог.