我有一个函数x
,它带有一个参数y
。在x
内部,我想确定y
与先前对x
的调用是相同还是不同(实际上,它只是我关心的y
的一部分,但是分割细节无关紧要。
当前,我使用初始化为不可能的last_y
值的全局y
并检查y
!= last_y
。
我很好奇是否有任何干净的(非全局)方法可以做到这一点?我希望使用nonlocal
可以工作,但是我的目标之一是Python 2.7。
是否有适用于所有Python版本的非global
解决方案?
last_y="" # only used by x
def x(y):
if y != last_y:
#<do something>
last_y = y
答案 0 :(得分:2)
如果您使用的是Python 2.7,那么我认为使用getattr
和setattr
是最好的方法:
def f(y):
if getattr(f, 'old_y', None) != y:
print('New y is not equal to old y!')
else:
print('New y is equal to old y!')
setattr(f, 'old_y', y)
f('same')
f('same')
f('different')
输出:
New y is not equal to old y!
New y is equal to old y!
New y is not equal to old y!
答案 1 :(得分:0)
您必须复制旧变量。使用复制模块并尝试类似的操作
def x(y):
last_y=""
if y != last_y:
last_y = copy.deepcopy(y)