传递一个随着调用而增加的变量?

时间:2018-04-12 16:34:28

标签: python

我怎么能在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)
...

4 个答案:

答案 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