gpt4 book ai didi

python - 递归中使用的函数属性 - 是否存在全局函数属性?

转载 作者:行者123 更新时间:2023-12-02 16:00:53 25 4
gpt4 key购买 nike

我有一个函数:

def fib(n, fib_d = {}):

if n < 2:
return 1

if n not in fib_d:
fib_d[n] = fib(n-2) + fib(n-1)


return fib_d[n]

fib(1000)
# a big number returned in an instance

然后我尝试创建 fib_d 作为我可以访问的数据的函数的属性:

def fib(n):
fib.fib_d = {}

if n < 2:
return 1

if n not in fib.fib_d:
fib.fib_d[n] = fib(n-2) + fib(n-1)


return fib.fib_d[n]
fib(10)
# returns 89 in an instance
fib(100)
# runs till I stop it

所以我猜测 fib_d 每次都被创建为一个空参数,因此计算速度很慢

我想知道我是否可以拥有一个 global 函数属性,以便我可以访问它的内容,例如:

fib.fib_d
# {2: 2, 3: 3, 4: 5, 5: 8, 6: 13, 7: 21, 8: 34, 9: 55, 10: 89, ..., n: m}

我试过:

def fib(n, fib.fib_d):
...

但这是无效的,我知道函数属性可能应该只绑定(bind)到该函数,但我很好奇是否存在全局函数属性或至少可以在递归中使用的属性。

最佳答案

我只会使用缓存或 lru_cache。

但是要按照您的要求进行操作,最简单的方法是在闭包中定义您的函数:

def make_fib():

def fib(n):

if n < 2:
return 1

if n not in fib.fib_d:
fib.fib_d[n] = fib(n-2) + fib(n-1)
return fib.fib_d[n]
fib.fib_d = {}
return fib

f= make_fib()
f(2000)

这样,我们就有了一个正确作用域的函数属性。

关于python - 递归中使用的函数属性 - 是否存在全局函数属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70742944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com