SyntaxError:没有找到非本地“i”的绑定
Posted
技术标签:
【中文标题】SyntaxError:没有找到非本地“i”的绑定【英文标题】:SyntaxError: no binding for nonlocal 'i' found 【发布时间】:2021-09-28 22:52:58 【问题描述】:我想定义一个静态变量 i(通过对该函数的所有递归调用,我只想要一个 i 的副本)。为此,我在类下方但在函数之外声明了“i”。要使用声明的“i”,我在函数定义中使用了关键字“nonlocal i”。(请参阅下面的代码)即使这样,我也会收到错误
SyntaxError: no binding for nonlocal 'i' found
^
nonlocal i
Line 9 (Solution.py)
参考下面的代码,我正在尝试解决一个leetcode问题
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
i = 0
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
nonlocal i
if(head is None or head.next is None):
i+=1
return head
else:
p = self.removeNthFromEnd(head.next,n)
if(i>n):
i=i+1
return head
if(i == n):
head.next = p.next
p.next = None
i=i+1
return head
else:
i = i+1
return head
【问题讨论】:
将i
定义为实例属性并引用为self.i
可能会更容易。 nonlocal
只为嵌套函数定义,而不是类属性。
您可能还想将标签更改为 python
以吸引更广泛的受众。
【参考方案1】:
在类中的函数外部定义i
意味着它的引用是self.i
,而不是i
。改用类方法:
class Solution:
i = 0
@classmethod
def removeNthFromEnd(cls):
cls.i += 1
return cls.i
sol = Solution()
sol.removeNthFromEnd()
sol.removeNthFromEnd()
sol_two = Solution()
sol_two.removeNthFromEnd()
>> 3
【讨论】:
以上是关于SyntaxError:没有找到非本地“i”的绑定的主要内容,如果未能解决你的问题,请参考以下文章
SyntaxError: 非 ASCII 字符 '\xd1'