Форум сайта python.su
Здравствуйте.
Прилагаю программу и тест-файлы(запуск python gp.py gpm.SMF gpm.TXT). Компилятор python 2.7 В чем баг: переменная n в течении выполнения первой процедуры равна 76. При вызове следующей- компилятор её обнуляет. Сравнивал с вектором f- там такого нет. Помогите пожалуйста решить эту проблему(мне нужно, чтобы сохранялись все глобальные переменные)
Прикреплённый файлы:
Py.zip (5,1 KБ)
Офлайн
Компилятор ее не обнуляет. Просто у Вас в первой функции стоит присваивание
n=i m=len(b)
global n, m
Офлайн
Если бы у Вас первым обращением к n было чтение данных, типа i=n, то компилятор нашел бы Вашу переменную среди глобальных и далее использовал ее. Это и происходит в Вашей второй функции.Не совсем так:
>>> n = 1
>>> def foo():
... i = n
... n = 2
...
>>> foo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in foo
UnboundLocalError: local variable 'n' referenced before assignment
Офлайн
Не совсем так:
>>> n = 1 >>> def foo(): ... i = n ... print i ... >>> foo() 1 >>>
Офлайн
global не спасло
Офлайн
Должно работать:
Windows PowerShell (C) Корпорация Майкрософт, 2009. Все права защищены. PS C:\Users\Vlad> python Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> n = 1 >>> print n 1 >>> def foo(): ... global n ... n = 10 ... >>> foo() >>> print n 10 >>>
Отредактировано ziro (Авг. 12, 2012 12:21:47)
Офлайн
ziroПросто звучит запутывающее, якобы “i=n” достаточно что-б использовать перемененную (в т.ч. и для записи):
Почему?
Просто у Вас в первой функции стоит присваивание …
Если бы у Вас первым обращением к n было чтение данных, типа i=n, то компилятор нашел бы Вашу переменную среди глобальных и далее использовал ее.
def foo():
i = 1
def bar():
print i
i = 2
bar()
foo()
Офлайн