为什么Python方法需要一个"self"指针才能使递归工作



我是Python的新手,想把它用于LeetCode。我在做一个递归问题,意识到我必须使用self.指针才能使递归工作。这是我的初始代码:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
if not head or not head.next:
return head

p = reverseList(head.next)
head.next.next = head
head.next = None

return p

然而,这会给我一个错误:

NameError: name 'reverseList' is not defined

我必须在reverseList()之前添加一个self.才能使其工作。我很好奇为什么Python会这样做?Java和C++都可以在没有this指针的情况下进行递归。这有点奇怪,因为如果我在类之外声明我的函数,那么递归就不需要self指针。

这与递归本身没有任何关系,而是与名称reverseList的定义有关。

在函数内部,自由变量(即未由函数本身定义的变量(在最近的封闭范围中查找。但是,class语句没有定义新的作用域,因此如果要使用reverseList,则必须在全局作用域中定义它。但你不想要任何来自全球范围的东西;您想要调用实例方法。为此,您必须从进行顶级调用的同一实例(即self(访问它。

相关内容

  • 没有找到相关文章