Python 为什么;“未定义功能”;递归情况下的错误?
我想解决一个相反的问题 这是我的递归函数,为什么Python3抱怨我的函数没有定义?有什么想法吗Python 为什么;“未定义功能”;递归情况下的错误?,python,python-3.x,function,recursion,reverse,Python,Python 3.x,Function,Recursion,Reverse,我想解决一个相反的问题 这是我的递归函数,为什么Python3抱怨我的函数没有定义?有什么想法吗 class Solution: def reverse(self, x: int) -> int: if x < 0: return -1 * reverse(self, x) if x // 10 == 0: return x if x % 10 == 0:
class Solution:
def reverse(self, x: int) -> int:
if x < 0:
return -1 * reverse(self, x)
if x // 10 == 0:
return x
if x % 10 == 0:
return reverse(self, x // 10)
else:
return (x % 10) * 10 ** (len(str(x//10))) + reverse(self, x // 10)
类解决方案:
def反转(自身,x:int)->int:
如果x<0:
返回-1*反向(自身,x)
如果x//10==0:
返回x
如果x%10==0:
反向返回(自,x//10)
其他:
返回(x%10)*10**(len(str(x//10))+反向(self,x//10)
我只是遵循传统的递归函数。方法需要通过
self
递归调用;类/实例的作用域只能通过self
(或类名本身)显式访问,不能通过嵌套作用域隐式访问。将reverse(self,…)
的所有用法更改为self.reverse(…)
即可使用
您可以执行Solution.reverse(self,…)
,但这是不必要的反复重复类名,而且无论如何都比直接调用self.reverse
要慢。您的reverse()
是类中的一个方法,因此在代码中简单地说reverse
是无法访问的。在调用方法时,也不需要将self提供给该方法
暗影游侠的回答给出了如何修复它的说明
这个答案应该让您更仔细地了解未绑定方法和绑定方法之间的区别:
我还建议您阅读一些python类的基本教程。您的函数应该如下所示:
类解决方案:
def反转(自身,x:int)->int:
如果x<0:
返回-1*自反转(x)
如果x//10==0:
返回x
如果x%10==0:
返回自反转(x//10)
其他:
返回(x%10)*10**(len(str(x//10))+self.reverse(x//10)
您应该使用self调用reverse方法。还有一个错误是,你把自我也当作论点来传递,这是不需要的。因此,代码的正确版本如下所示:
class Solution:
def reverse(self, x: int) -> int:
if x < 0:
return -1 * self.reverse(x)
if x // 10 == 0:
return x
if x % 10 == 0:
return self.reverse(x // 10)
else:
return (x % 10) * 10 ** (len(str(x//10))) + self.reverse(x // 10)
class Solution:
def reverse(self, x: int) -> int:
x = str(x)
x = x[::-1]
x = int(x)
return x