论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Python 函数和变量作用域
Python 函数和变量作用域
不到断气不罢休
金牌会员
|
2024-5-18 03:55:27
|
显示全部楼层
|
阅读模式
楼主
主题
878
|
帖子
878
|
积分
2634
变量引用次序
Python 引用变量的次序:当前作用域局部变量->外层作用域变量->当前模块中的全局变量->
ython内置变量。
1、 global
global 关键字用来在函数或其他局部作用域中使用全局变量,如果不对全局变量进行修改,那么可以不使用global关键字;如果想要在函数或局部作用域中对全局变量进行修改操作,那么必须在函数或局部作用域中使用global关键字进行声明,否则报错:UnboundLocalError
count = 1
def foo():
global count #如果不加这个那么就会报错
count += 1
print(count)
foo()
复制代码
2、 nonlocal
使用情况:闭包,嵌套函数中
如果内部函数想要对外部函数的局部变量进行修改时,需要在内部函数中声明:
nonlocal <变量名>
复制代码
nonlocal语句会搜刮当前调用栈中的下一层函数的定义。
def a(): count = 1 def b(): nonlocal <变量名>count count += 1 print(count) return ba()()
复制代码
3、 装饰器
介绍:装饰器的作用是将被修饰的函数当作参数传递给与装饰器对应的函数,并返回包装后的被装饰的函数。装饰器实在是闭包的一种特别情况
def a(func):
return func
@a
def b():
pass
b()
复制代码
执行示意图:
解析过程:
发现@a,那么就将会执行a(b),返回b
b(),这一步调用的实在是a返回的同一名的b函数,而且开始执行b函数中的操作
4、 闭包
闭包概念:在盘算机科学中,闭包(Closure)是词法闭包的简称,是引用了自由变量的函数,这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不破例。
简朴介绍:可以理解为一个封闭的包裹,这个包裹就是一个函数和函数内部对应的逻辑,包裹里面的东西就是自由变量,自由变量可以随着包裹到处游荡,比如:装饰器是一个闭包,随着装饰器进行传递的函数名就是自由变量(函数),装饰器和内部逻辑结构就是闭包中的函数和内部逻辑。
def func(name):
def inner_func(age):
print(‘name:’+name+’ age:’+age)
return inner_func
a = func(‘liyang’)
a(20) #>>> name:liyang age:20
复制代码
上面的例子中:调用func函数时就产生了闭包inner_func,该闭包所持有的自由变量是name。
当函数func的生命周期结束之后,name这个变量依然存在,因为它被闭包引用了,所以不会被回收。
5、 延迟绑定
Python函数的作用域是由代码决定的,也就是静态的,但是使用是动态的,是在执行时确定的
闭包中遇到的问题
fs = [lambda x: x*I for i in range(4)]
print(fs[0](1)) #>>> 3
复制代码
期望输出结果是:0,但是结果却是:3
这是因为只有在函数foo被执行的时候才会搜刮变量i的值,由于循环已结束,i指向终极值3,所以终极会发现结果都是一样。
使用下面的闭包方式,就会得到期望的结果:
def foo(i):
return lambad x: x*i
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:153708845
fs = [foo(i) for i in range(4)]
print(fs[0](1))
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
不到断气不罢休
金牌会员
这个人很懒什么都没写!
楼主热帖
Spark的一些重要概念
从SAP ECC升级到SAP S4HANA, 几个Key P ...
手绘地图深度解析:类型、风格、功能、 ...
数据库设计员工管理系统
【Redis高手修炼之路】初学Redis——概 ...
MySQL触发器
物联网无线数传通信模块设备常见的几种 ...
从API到Agent:万字长文洞悉LangChain ...
【高效学数据库】第一范式、第二范式、 ...
什么是计算机网络
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表