python进阶练习题:@memoize【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

python进阶练习题:@memoize【难度:2级】:

实施"memoize的"装饰,增加了记忆化能力的功能,以使其更有效率.总之,记忆化装置存储计算的值,而不是重新计算每一次.在下面的例子中,这意味着您只需为每n计算FIB(N)一次.

装饰功能必须为相同的输入之前返回相同的数值.你装饰必须乖巧,即返回的函数必须具有相同的名称和文档字符串作为原始.

Your装饰器将仅在具有单个参数的函数进行测试.

例如:

@count_calls
DEF FIB(N):
  """计算的第n个编号在Fibonacci序列"""
返回FIB(N  -  2)+ FIB(N  -  1)如果n> 1,否则[0,1] [n]的

FIB(10)
fib.call_count == 177# 真
FIB(10)
fib.call_count == 344# 真

FIB = count_calls(memoize的(FIB))
FIB(10)
fib.call_count == 19# 真
FIB(10)
fib.call_count == 20# 真

在* count_calls * 如果你想使用它,装饰预装了你.不要重新绑定count_calls,因为这可能会导致测试失败.

Note:你是不是允许使用lru_cache装饰从functools模块完成这个任务.

编程目标:

def memoize(func):
    return None


测试样例:

test.describe('Solution does not use lru_cache')
with open('/home/codewarrior/solution.txt', 'r') as solution:
    test.expect("lru_cache" not in solution.read(), 'You are not allowed to use a pre-defined solution!')
@count_calls
@memoize
def fib(n):
    """Computes the nth number in the Fibonacci sequence"""
    return fib(n - 2) + fib(n - 1) if n > 1 else [0, 1][n]
fib(10)
test.assert_equals(fib.call_count <= 19, True)
fib(10)
test.assert_equals(fib.call_count <= 20, True)
test.describe("Decorated function has same name as before")
test.assert_equals(fib.__name__, "fib")


最佳答案(多种解法):

点击查看答案

更多关联题目:

python基础练习题:我是谁?【难度:1级】–景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

交流讨论:

Python基础训练营景越Python基础训练营QQ群
在这里插入图片描述
欢迎各位同学加群讨论,一起学习,共同成长!

免责申明:

本博客所有编程题目及答案均收集自互联网,主要用于供网友学习参考,如有侵犯你的权益请联系管理员及时删除,谢谢
题目收集至https://www.codewars.com/
https://www.codewars.com/kata/at-memoize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值