Следующий код:
x = 0
print "Initialization: ", x
def f1():
x = 1
print "In f1 before f2:", x
def f2():
global x
x = 2
print "In f2: ", x
f2()
print "In f1 after f2: ", x
f1()
print "Final: ", x
печать:
Initialization: 0
In f1 before f2: 1
In f2: 2
In f1 after f2: 1
Final: 2
Есть ли путь к f2
к доступу f1
переменные?
Вы можете получить доступ к переменным, проблема в присвоении. В Python 2 нет способа перепривязать x
к новому значению. Подробнее об этом смотрите PEP 227 (вложенные диапазоны).
В Python 3 вы можете использовать новое ключевое слово nonlocal
вместо global
. См. PEP 3104.
В Python 3 вы можете определить x как нелокальный в f2.
В Python 2 вы не можете напрямую присвоить x из f1 в f2. Однако вы можете прочитать его значение и получить доступ к его членам. Поэтому это может быть обходным решением:
def f1():
x = [1]
def f2():
x[0] = 2
f2()
print x[0]
f1()
Visual Studio определяет _ DEBUG
при указании параметра /MTd
или /MDd
, NDEBUG
отключает утверждения стандарта C. Используйте их при необходимости, т.е. _ DEBUG
, если вы хотите, чтобы ваш отладочный код соответствовал методам отладки MS CRT и NDEBUG
, если вы хотите быть совместимым с assert ()
.
Если вы определяете собственные отладочные макросы (и не взламываете компилятор или среду выполнения C), избегайте запуска имен с подчеркиванием, поскольку они зарезервированы.
-121--2509259-Возможно, класс ASP.NET Cache (System.Web.Caching.Caching.Cache) поможет достичь желаемого? Он автоматически удаляет объекты, если объем памяти уменьшается:
Вот статья, в которой показано, как использовать класс Cache в приложении форм Windows.
в кавычках из: Эквивалент SoftReference в .net?
-121--2304657- удалить глобальную
инструкцию
>>> x
0
>>> def f1():
x = 1
print(x)
def f2():
print(x)
f2()
print(x)
>>> f1()
1
1
1
, если требуется изменить переменную x
с f1
, то в каждой функции необходимо использовать глобальную
инструкцию.