博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python嵌套函数调用上层函数的局部变量, nonlocal 关键字
阅读量:3939 次
发布时间:2019-05-23

本文共 1214 字,大约阅读时间需要 4 分钟。

在做leetcode的时候,遇到一个小细节:

我想在 fun 中定义一个fun,然后再递归调用:

例如,一个binary search 的例子:

def searchRange(self, nums: List[int], target: int) -> List[int]:        lb, rb = -1, -1        left, right = 0, len(nums)-1        def find(left,right,target):            nonlocal lb, rb #             if left > right : return            else:                mid = int(left + (right - left) / 2)                if nums[mid] > target:                    find(left,mid-1,target)                if nums[mid] < target:                    find(mid+1,right,target)                if nums[mid] == target:                    if lb == -1 or rb == -1:                        lb = rb = mid                    else:                        if mid < lb:                            lb = mid                        if mid > rb:                            rb = mid                    find(left,mid-1,target)                    find(mid+1,right,target)        find(left,right,target)        return list((lb,rb))

如果我想在find 函数中,用到searchRange 函数中的变量 lb,rb的时候,我需要在 find函数中对这两个变量 lb , rb 进行操作, 给定关键字 nonlocal

在我后续的学习过程中,我知道原来python解释器在处理变量的时候,如果没有出现会去上下文中寻找,如果不需要对这个变量赋值的话,这个变量就利用闭包的特性可以直接使用,如果需要赋值,那么变量会被解释器视作 局部变量,就没有与上文的变量绑定了。使用nonlocal 其实就是告诉编译器,我需要使用上文中的那个变量。

转载地址:http://dnywi.baihongyu.com/

你可能感兴趣的文章
linux的多桌面环境Xephyr
查看>>
初探debian桌面的管理启动
查看>>
七层协议图
查看>>
华为交换机作为AC的条件
查看>>
禁用Ubuntu 15.04登录界面显示客人会话(简单-实用)
查看>>
linux X下安装的软件
查看>>
Linux监测某一时刻对外的IP连接情况
查看>>
CentOS7 最小环境安装Jumpserver 1.0版脚本
查看>>
X-Security X的安全控制
查看>>
openVAS的安装
查看>>
Centos 6.5 初始安装无网卡驱动解决方法
查看>>
linux中的网桥bridge
查看>>
linux中的teaming与bonding
查看>>
LVM
查看>>
用shell切分文件--split
查看>>
python中判断字符是否为中文
查看>>
Python - 利用zip函数将两个列表(list)组成字典(dict)
查看>>
python-全角转半角
查看>>
Python pass语句作用与用法
查看>>
Java double,float设置小数点位数
查看>>