我是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
(访问它。