方法调用后更改变量值

时间:2018-11-06 06:10:34

标签: python

假设我有一个方法m1,它具有变量x和y。我多次从m1调用方法m2。每次我调用m2时,都需要更改m1,x和y局部变量的值(例如,递增/递减)。如何避免在方法调用后重复语句?

def m2():
    #action
    pass

def m1():
    x = 0
    y = 0

    #call to m2 followed by changes in local variable
    m2()
    x += 1
    y -= 1

    #next call to m2 followed by changes in local variable
    #is there a way to avoid the repetition?
    m2()
    x += 1
    y -= 1

    #...

3 个答案:

答案 0 :(得分:1)

您可以在m1中定义一个为您完成工作的函数

def m1():
    x = 0
    y = 0

    def _m2():
        m2()
        nonlocal x
        nonlocal y
        x += 1
        y -= 1

    _m2()
    _m2()

    # the value of x and y are 2 and -2 now

答案 1 :(得分:0)

我建议您创建一个新的类似函数的包装器:

def call_m2(x,y):
    m2()
    return x+1, y-1

,然后将函数调用设置为:

x, y = call_m2(x, y)

答案 2 :(得分:0)

如果您知道xy的变化方式(例如,x取1到10的所有值,而y等于2x+4),则考虑使用列表。这样的好处还在于,您省去了手动键入对m2()

的所有呼叫的工作。
xlist = ['list', 'of', 'all', 'x-values']
ylist = ['list', 'of', 'all', 'y-values']
for x, y in zip(xlist, ylist):
    m2()

如果xy的值取决于m2()的结果,则可以实现具有某种停止条件的while循环并更新值每次循环迭代结束时xy的值