函数作用域与名称空间
1.函数对象:
函数是一个高级的数据容器,就是一个特殊的变量。
特性:
1.函数可以进行赋值
2.函数可以作为一个数据元素,可以放到列表、字典、集合里面。
3.可以作为一个参数,传到另一个函数里面。
例子:
a=print
a("hello world")
#函数可以作为一个函数。
例如:
def a():
print("a")
return 0
b=[1,2,3,a()]
print(b)
def a():
print("a")
b=[1,2,3,a()]
print(b)
———————————————————————————————————————————
2.名称空间:
定义:就是储存名字的地方。
名称空间——>储存变量名的地方。
内部数据——>赋值后的数值。
名称空间结构:
2.1.内建名称空间(储存内置函数和关键字)
生命周期:当python程序启动,就会直接自动保存。
关闭python程序的时候就会自动回收,清除数据。
加载顺序:会最先加载出来。
存放对象:内置函数。
2.2.全局名称空间(全局变量名)
生命周期:当python程序启动,就会直接自动保存,结束调用时直接销毁。
加载顺序:在被调用时才加载出来。
存放的对象:python外层写的代码,定义函数名,变量名。
———————————————————————————————————————————
3.局部命名空间:
生命周期:当python的函数调用的时候,就保存。当函数运行return的时候,直接销毁。
加载顺序:在调用时才会被加载。
存放对象:函数里面的变量名,参数。
例如:全局变量。
A="全局变量"
def info():
B="局部变量"
print(A,B)
info()
4.作用域:使用的范围,一个数据的使用范围。
如,WiFi:一个WiFi的使用范围。
4.1全局作用域:
作用范围:整个程序可以使用。
作用对象:内置名称空间。
类比:公共WiFi(不用输入密码)
4.2局部作用域:
作用范围:只有在函数内部才能使用。
作用对象:局部命名空间。
例如:
A="校园网WiFi"
def info():
B="手机热点"
print(A,B)
def info1():
print(f"我要用{A}")
print(f"我要用{B}")
info 1()
所以啊,别人没给你热点密码,是连不了的,所以也输出不了的。
5.global(全局变量)
其实:我们的局部作用和全局作用是可以转换的。
类比:你把密码删除,变成共享WiFi给人使用。
格式:def 函数名():
global 变量名
操作变量名
A="校园网WiFi"
def info():
global B
B="手机热点"
print(f"我要用{A}")
print(f"我要用{B}")
info()
print(A,B)
看,别人的热点WiFi连接上了,嘿嘿,尽情使用吧。
6.nonlocal(局部变量)
nonlocal——>声明的变量,不是全局变量,也不是局部变量。外部嵌套函数内部的变量。
类似:把共享WiFi偷偷加上密码,只有有密码的人才能使用。
格式:def 函数名():
nonlocal 变量名
操作变量名
函数名()
def main(): #只是一个数字
a=1
def A():
nonlocal a
a=2
print(a)
A()
main()
只能在嵌套函使用:局部变量会在函数运行到return直接销毁
nonlocal—— 在第一层函数的数值如果要然第二层函数进行修改值,
而目其他的第二层函数使用的改变后的数值就需要用到nonlocal
nonlocal ->如果你想用函数内部去进行修改全局变量,就是要用nonloca]进行定义才能修改数值。