gpt4 book ai didi

python - 在 Python 类中使用对象变量作为递归方法参数

转载 作者:太空宇宙 更新时间:2023-11-03 12:41:52 25 4
gpt4 key购买 nike

我正在尝试在类中编写递归函数,但在使用对象 var 作为方法参数时遇到了一些问题:

class nonsense(object):
def __init__(self, val):
self.val = val
def factorial(self, n=self.val):
if n<=1: return 1
return n*self.factorial(n=n-1)

上面的代码会产生以下错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in nonsense
NameError: name 'self' is not defined

但是如果我不引用 self.val,错误就会消失,尽管必须指定 n 是多余的:

class nonsense(object):
def __init__(self, val):
self.val = val
def factorial(self, n):
if n<=1: return 1
return n*self.factorial(n=n-1)

这样做的正确方法是什么?

最佳答案

在定义方法时评估默认参数。因此,使用 __init__ 中定义的成员值本质上是“太晚了”。您应该做的是将默认值设置为 None 并在函数体中对此进行测试:

class nonsense(object):
def __init__(self, val):
self.val = val
def factorial(self, n=None):
if n is None:
n = self.val
elif n <= 1:
return 1

return n*self.factorial(n-1)

关于python - 在 Python 类中使用对象变量作为递归方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8707155/

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