博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中函数作用域
阅读量:4624 次
发布时间:2019-06-09

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

1、作用域	如果一个变量在def内赋值,他被定位在这个函数内	如果一个变量在一个嵌套的def中赋值,对于嵌套的函数来说,它非本地的	如果在def之外赋值,他就是整个文件2、在交互式模式下,其实是在一个名为__main__的模板内。3、一个函数的内部的任何类型的赋值都会把一个名称划定为本地的。这包括=语句,import中的模板名称,def中的函数名称,函数参数名称等。如果在一个def中以任意方式赋值的名称,他都将对于该函数是本地的。	注意:原处改变对象并不会把变量划分为本地变量。4、变量名解析:LEGB原则	1变量名引用分为三个作用域进行查找:首先是本地,然后是函数内(如果有的话),之后是全局的,最后是内置的	2默认情况下,变量名赋值会创建或者改变本地变量	3全局声明和非本地声明将赋值的变量名映射到模板文件的内部作用域。	4当在函数中使用未认证的变量名时,python搜索4个作用域(本地作用域,之后是上一层次中的def或者lambda的本地作用域,之后是全局,最后是内置的)并且在第一处能找到这个变量的地方停下来,如果变量名在这个过程中没有找到则会报错。5、内置作用域	内置作用域仅仅是一个名为builtins内置模板,要在import builtins才能使用	import builtins	print(dir(builtins))6、全局变量	全局变量是位于模板文件内部的顶层的变量名	全局变量如果在函数内部被赋值的话,必须经过声明	全局变量在函数的内部不经过声明也可以被引用7、工厂函数(闭合函数)	一个能够记住嵌套作用变量的函数	例如:	def maker(N):		def action(X):			return X**N		return action	f = maker(2)	print(f(2))  #输出98、这个例子需要思考:	def f():		a  = []		for i in range(5):			a.append(lambda x ;i**x)		return a	t = f()	print(t[0](2))  #输出16	print(t[1](2),t[2](2))  #输出16,16	解释:因为for循环结束后,i的值是4,记住这个i=4,所以当调用时,x的值才被传进来。	解决办法是使用默认参数:	def f():		a  = []		for i in range(5):			a.append(lambda x,i=i ;i**x)  #这里的i等于这次循环时的i		return a	t = f()	print(t[0](2))  #输出0	print(t[1](2),t[2](2))  #输出2,49、nonlocal使用举例	def tester(start):		state = start		def nested(label):			nonlocal state  #如果没有这个,下面的是state+=1不行的			print(label,state)			state+=1		return nested

  

转载于:https://www.cnblogs.com/hbcb533/p/3674172.html

你可能感兴趣的文章
“模态”对话框和“后退”按钮
查看>>
关于javascript实现的网站页面侧边悬浮框"抖动"问题
查看>>
linux_命令格式和命令提示符
查看>>
Cocos2d-X-3.0之后的版本的环境搭建
查看>>
when case group by 的用法集合
查看>>
洛谷P1908 逆序对
查看>>
转义符
查看>>
poj 1019
查看>>
asp.net mvc上传文件
查看>>
bitmq集群高可用测试
查看>>
主成分分析(PCA)原理详解
查看>>
短信验证接口网址
查看>>
Geohash距离估算
查看>>
Demon_背包系统(实现装备栏,背包栏,可以切换装备)
查看>>
记录:一次数据库被恶意修改配置文件的问题
查看>>
redis 持久化
查看>>
解决Jupyter notebook[import tensorflow as tf]报错
查看>>
Windows平台下使用ffmpeg和segmenter实现m3u8直播点播
查看>>
python网络画图——networkX
查看>>
ubuntu16.04文件形式安装mongodb
查看>>