python local global_python global与nonlocal关键字
函数作用域
a = 1
print("函数outer调用之前全局变量a的内存地址: ", a , id(a))
def outer():
a = 2
print("函数outer调用之时闭包外部的变量a的内存地址: ", a, id(a))
def inner():
a = 3
print("函数inner调用之时闭包内部变量a的内存地址: ", a, id(a))
inner()
print("函数inner调用之后闭包外部的变量a的内存地址: ", a, id(a))
outer()
print("函数outer执行完毕,全局变量a的内存地址: ", a, id(a))
函数outer调用之前全局变量a的内存地址: 1 140704120484688
函数outer调用之时闭包外部的变量a的内存地址: 2 140704120484720
函数inner调用之时闭包内部变量a的内存地址: 3 140704120484752
函数inner调用之后闭包外部的变量a的内存地址: 2 140704120484720
函数outer执行完毕,全局变量a的内存地址: 1 140704120484688
global 关键字
a = 1
print("函数outer调用之前全局变量a的内存地址: ",a , id(a))
def outer():
a = 2
print("函数outer调用之时闭包外部的变量a的内存地址: ", a, id(a))
def inner():
global a #这里更改了!!!
a = 3
print("函数inner调用之时闭包内部变量a的内存地址: ", a, id(a))
inner()
print("函数inner调用之后闭包外部的变量a的内存地址: ", a, id(a))
outer()
print("函数outer执行完毕,全局变量a的内存地址: ", a, id(a))
函数outer调用之前全局变量a的内存地址: 1 140704120484688
函数outer调用之时闭包外部的变量a的内存地址: 2 140704120484720
函数inner调用之时闭包内部变量a的内存地址: 3 140704120484752
函数inner调用之后闭包外部的变量a的内存地址: 2 140704120484720
函数outer执行完毕,全局变量a的内存地址: 3 140704120484752
把inner函数内的a声明为global后,更改的是最外层的a,最外层a原来为1,更改后为3。
nonlocal 关键字
a = 1
print("函数outer调用之前全局变量a的内存地址: ",a , id(a))
def outer():
a = 2
print("函数outer调用之时闭包外部的变量a的内存地址: ", a, id(a))
def inner():
nonlocal a #这里又更改了
a = 3
print("函数inner调用之时闭包内部变量a的内存地址: ", a, id(a))
inner()
print("函数inner调用之后闭包外部的变量a的内存地址: ", a, id(a))
outer()
print("函数outer执行完毕,全局变量a的内存地址: ", a, id(a))
函数outer调用之前全局变量a的内存地址: 1 140704120484688
函数outer调用之时闭包外部的变量a的内存地址: 2 140704120484720
函数inner调用之时闭包内部变量a的内存地址: 3 140704120484752
函数inner调用之后闭包外部的变量a的内存地址: 3 140704120484752
函数outer执行完毕,全局变量a的内存地址: 1 140704120484688
nonlocal 关键字使inner函数中的a变为outer函数中的a,更改的是外边一层的a。
例题
a = 10
def test():
a += 1
print(a)
test()
结果: error
Python的规则是,如果在函数内部要修改一个变量,那么这个变量需要是内部变量,除非你用global声明了它是外部变量。很明显,我们没有在函数内部定义变量a,所以会弹出局部变量在未定义之前就引用的错误。
name ='jack'
def f1():
print(name)
def f2():
name = 'eric'
f1()
f2()
结果: jack
f2中调用f1,我们要从f1的定义处寻找最近的name定义,是外部的jack。
Python函数的作用域取决于其函数代码块在整体代码中的位置,而不是调用时机的位置。
name = 'jack'
def f2():
name = 'eric'
return f1
def f1():
print(name)
ret = f2()
ret()
结果:还是jack!!
python local global_python global与nonlocal关键字相关推荐
- python nonlocal的用法_python中的global和nonlocal关键字怎么使用
global 和 nonlocal关键字 当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了. 以下实例修改全局变量 num: #!/usr/bin/python3 ...
- global 和 nonlocal关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了. def fun(): global num1 num1=2 print("函数内修改后num1=&qu ...
- python local global_Python 关键字global全局变量详解
变量作用域 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量. 全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优 ...
- python global和nonlocal_3.关于作用域知识的额外补充global和nonlocal关键字
本遍文章对global关键字和nonlocal关键字进行补充,这两个关键字在以后做python开发的时候,能不用尽量别用!最好别用!总会出现让你意想不到的后果... 1.先说第一种global,不管在 ...
- 滚雪球学 Python 之作用域下的 global 和 nonlocal 关键字
橡皮擦,一个逗趣的互联网高级网虫,新的系列,让我们一起 Be More Pythonic. 滚雪球学 Python 第二轮 已完成的文章清单 十.global 和 nonlocal 作用域 10.1 ...
- global与nonlocal关键字
在Python中,当引用一个变量的时候,对这个变量的搜索是按找本地作用域(Local).嵌套作用域(Enclosing function locals).全局作用域(Global).内置作用域(bui ...
- nonlocal python3_Python中的global和nonlocal关键字
在进入正题之前先简单说明一下:局部变量:函数或者方法里面定义的变量: 全局变量:本文指module级别的变量(一个python文件就是一个module). global 先看个例子:a = 1 def ...
- Python手记:global 和 nonlocal的区别
文章目录 序 一.Python的定义域 二.global的作用 三.nonlocal的作用 四.闭包 总结 序 学习过程中,我们会遇到两个有趣的关键字,一个是global,一个是nonlocal. 如 ...
- python local global_Python 变量作用域 LEGB (上)—— Local,Global,Builtin
Python 变量作用域的规则是 LEGB LEGB含义解释: L -- Local(function):函数内的名字空间 E -- Enclosing function locals:外部嵌套函数的 ...
最新文章
- JVM---堆(对象分配过程)
- HtmlUnit解析动态网页并采集网页列表到Excel
- 【Alpha 冲刺】 10/12
- android客户端访问服务端,服务端返回json数据
- Windows 11 大更新!可安装超千款 Android 应用
- OpenShift上的Java EE工作流(技术提示#64)
- CSS :root 测试
- web 前端 如何分享到instagram_面对前端的后端化趋势,2020该如何学习web前端?
- c语言变量的值也可以不改变6,C语言学习复盘整理笔记(六)
- centos7下修改/找回mysql的密码,我这里是mysql5.7
- python编程是干嘛的-python编程能做什么开发
- Jenkins+MSbuild+SVN实现快速搭建.net持续集成环境(构建、编辑、部署到服务器)
- 【POCKET 51】用 pocket 51学51单片机 之四:pocket 51功能模块测试
- Android Studio 3.5.2 入门教程(浓缩版)
- 批量缩小图片大小的方法
- oracle表给用户授权
- python--飞机大战(课程设计)
- 个人隐私保护条例_个人资料(隐私)条例
- 代码BUG之曲线救国
- Windows下virtualbox相关软件安装设置全过程