python nonlocal 关键字

1.引子

刷题遇到了这个回文链表的题目,其中解答需要用到nonlocal这个关键字,不然在inner function中会显示没有left这个变量
在这里插入图片描述

class Solution:
    def isPalindrome(self, head: ListNode) -> bool:
        left = head
        def traverse(right):
            if not right:
                return True
            nonlocal left
            res = traverse(right.next)
            res = res and right.val == left.val
            left = left.next
            return res
        return traverse(head)

2.nonlocal的作用

对比两段函数

def myfunc1():
  x = "John"
  def myfunc2():
    x = "hello"
  myfunc2() 
  return x
print(myfunc1())

上面这段没有nonlocal, x 在func2中是 local variable, 所以不会改变func1中的x所以输出的是John

def myfunc1():
  x = "John"
  def myfunc2():
    nonlocal x
    x = "hello"
  myfunc2() 
  return x

print(myfunc1())

而这段函数在inner function中有 nonlocal 关键字修饰x,这时在func2中修改x是会使x发生变化的, 所以输出的是hello.

上面引子的例子里, 随着right 的左移, left也要跟着右移, 如果没有nonlocal修饰, 首先会报错找不到left.val, 其次left = left.next也不会改变函数外的left

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值