我是 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
我必須在之前添加一個self.才能reverseList()使其作業。我很好奇為什么 Python 會這樣?Java 和 C 都可以在沒有this指標的情況下使用遞回。這有點奇怪,因為如果我在一個類之外宣告我的函式,它不需要一個self指標來進行遞回。
uj5u.com熱心網友回復:
這實際上與遞回本身沒有任何關系,而是與reverseList定義名稱的位置有關。
在函式內部,自由變數(即未定義函式本身的變數)在最近的封閉范圍內查找。但是,該class陳述句沒有定義新的范圍,因此reverseList如果要使用,必須在全域范圍中定義。但是你不想要全域范圍內的任何東西;你想呼叫實體方法。為此,您必須從進行頂級呼叫的同一實體訪問它,即self.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/512794.html
