我怎么能在python中做到这一点?
a = 0
func(a+=1) # a = 1
func(a+=1) # a = 2
现在我必须像这样解决它:
a = 0
a+=1
func(a)
a+=1
func(a)
...
并且必须有更好的方法,对吗?
编辑: 实际上我也希望能够将它传递给不同的函数:
a = 0
a+=1
func1(a)
a+=1
func2(a)
a+=1
func1(a)
...
答案 0 :(得分:3)
您的解决方案没问题,但如果您想要计算副作用,请使用itertools.count
对象:
import itertools
def f(x):
print(x)
c = itertools.count()
f(next(c))
f(next(c))
或变体,在函数本身中执行next
调用(itertools.counter
是可变的,因此您可以在函数内修改它):
import itertools
def f(c):
x = next(c)
print(x)
c = itertools.count()
f(c)
f(c)
您可以将其初始化为非零值:c = itertools.count(3)
答案 1 :(得分:1)
像这样简单:
a = 0
a+=1;func1(a)
a+=1;func2(a)
每行只比原始请求长2个字符。
答案 2 :(得分:0)
从某种意义上说,在Python中,赋值是指令,而不是操作返回值的运算符。
您必须定义一项功能,并将global
关键字与a
一起使用,或将a
转换为可变项。您也可以使用装饰器来完成您的功能。
a = [0]
#a = 0 # alternative version
def inc(x):
x[0] += 1
return x[0]
# global a # alternative version
# a += 1
# return a
def f1(x):
return x + 1
def f2(x):
return x + 2
# or (inspired by @jpp comment) decorate your functions
def inc1(x):
def inner(x):
x[0] += 1
return x[0]
return inner
@inc1
def f3(x):
return x
for i in range(10):
print(inc(a))
print()
print(f1(inc(a)))
print(f2(inc(a)))
print()
a = [0]
print(f3(a))
print(f3(a))
答案 3 :(得分:0)
你可以有一个包裹函数调用你的函数f
并同时增加j的值!
>>> def f(a):print("Value of a is: %d"%a)
...
>>> c=lambda i:(i+1,f(i+1))
>>> j=0
>>> j,_=c(j)
Value of a is: 1
>>> j
1
>>> j,_=c(j)
Value of a is: 2
>>> j
2