假设我有一个方法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
#...
答案 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)
如果您知道x
和y
的变化方式(例如,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()
如果x
和y
的值取决于m2()
的结果,则可以实现具有某种停止条件的while
循环并更新值每次循环迭代结束时x
和y
的值