python - 您如何计算函数返回特定值的次数?
问题描述
我有一个函数 def recFib 它返回一堆不同的数字,但我希望能够计算它返回“计算 fib(3)”的次数。我试图实现一个计数器,但它只返回 0。有人知道我会怎么做吗?
代码:
# fib.py
def loopFib(n):
# pre: n > 0
# returns the nth Fibonacci number
curr = 1
prev = 1
for i in range(n-2):
curr, prev = curr+prev, curr
return curr
def recFib(n):
print("Computing fib" "(",n,")" )
if n<3:
print("Leaving fib" "(",n,")" "returning",1)
return 1
else:
x=recFib(n-1)
y=recFib(n-2)
print("Leaving fib" "(",n,")" "returning",x+y)
return x+y
n = 10
#print(recFib(n))
counter = []
if (recFib(n) == "Computing fib( 3 )"):
counter.append('Three')
count3s = counter.count('Three')
print("Threes", count3s )
#Should return 21 instances of "Computing fib(3)"
输出:(输出的示例)
Computing fib( 10 )
Computing fib( 9 )
Computing fib( 8 )
Computing fib( 7 )
Computing fib( 6 )
Computing fib( 5 )
Computing fib( 4 )
Computing fib( 3 )
Computing fib( 2 )
Leaving fib( 2 )returning 1
Computing fib( 1 )
Leaving fib( 1 )returning 1
Leaving fib( 3 )returning 2
Computing fib( 2 )
Leaving fib( 2 )returning 1
Leaving fib( 4 )returning 3
Computing fib( 3 )
解决方案
使用呼叫计数器装饰器
装饰者
def call_counter(func):
def helper(x):
if x == 3:
# Counts calls when argument is 3
helper.calls += 1
return func(x)
helper.calls = 0
return helper
只需在原始代码中添加装饰器
@call_counter # Add decorator
def recFib(n):
print("Computing fib" "(",n,")" )
if n<3:
print("Leaving fib" "(",n,")" "returning",1)
return 1
else:
x=recFib(n-1)
y=recFib(n-2)
print("Leaving fib" "(",n,")" "returning",x+y)
return x+y
用法
print(recFib(10))
print(f'Instances of computing fib 3 is {recFib.calls}')
输出
Instances of computing fib 3 is 21
推荐阅读
- visual-studio-code - VS Code ESLint 检查快速修复...不工作
- kotlin - 如何在 Kotlin 中创建静态函数而不创建对象
- node.js - Mongoose 因 $in 失败:[数字数组]
- nginx - 在 NGINX 中解析 HTTP 基本授权标头
- python - 在 Python 上使用 BeautifulSoup 的 Webscraper
- python - 转换一个
反对一个字符串? - kubernetes - 在 Kubernetes 入口中具有基于路径的路由的多路径应用程序
- animation - three.js 中的 GLB 动画太快了
- vega - 如何在 Vega 中访问图像尺寸
- javascript - 更改页面语言时如何保留设计?