我想计算f
内函数inc
的调用次数。我应该如何修改函数main
来执行此操作?
我有这段代码:
def inc(f):
f()
f()
def main():
a = 0
def f():
a += 1
inc(f)
print(a) # should print 2
main()
但它会导致错误:
Traceback (most recent call last):
File "main.py", line 11, in <module>
main()
File "main.py", line 9, in main
inc(f)
File "main.py", line 2, in inc
f()
File "main.py", line 8, in f
a += 1
UnboundLocalError: local variable 'a' referenced before assignment
答案 0 :(得分:6)
通常的方法是为您的函数func.invocations
创建一个属性func
,例如
def func(a):
func.invocations += 1
return a + 1
func.invocations = 0
并像
一样使用它func(1) # 2
func(10) # 11
func.invocations # 2
为了使整个事物更具可重用性和可读性,您还可以创建一个装饰器counter
,它允许您计算您喜欢的任何函数的调用次数:
import functools
def counter(fn):
@functools.wraps(fn)
def helper(*args, **kargs):
helper.invocations += 1
return fn(*args, **kargs)
helper.invocations = 0
return helper
然后像
一样使用它@counter
def func(a):
return a + 1
func(1) # 2
func(10) # 11
func.invocations # 2
答案 1 :(得分:1)
def inc(f):
f()
f()
def main():
a = 0
def f():
nonlocal a
a += 1
inc(f)
print(a) # should print 2
main()
在f()
中设置 a 非本地答案 2 :(得分:0)
如果您正在寻找一个简单的解决方案,全局变量就可以解决问题。
reps = 0
def f():
global reps
reps += 1
# do your func stuff here
f()
f()
f()
f() # called f() 4 times
print(reps) # -> 4
答案 3 :(得分:0)
你试试这个:
def inc(f):
f()
f()
def main():
a = 0
def f():
f.counter += 1
f.counter =0
inc(f)
print(f.counter)
main()
如何在python中使用函数,你可以创建一个属性来计算对该函数的调用次数