如何确定函数的参数与上次调用是否不同

时间:2019-04-26 01:02:24

标签: python python-2.7

我有一个函数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

2 个答案:

答案 0 :(得分:2)

如果您使用的是Python 2.7,那么我认为使用getattrsetattr是最好的方法:

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)