函数---名称空间和作用域
今日新名词: 1)globals()函数 查看全局作用域的内容; 2)locals()函数 查看局部作用域的内容; 3)global 方法 调用全局作用域的变量并获得修改权限; 4)nonlocal 方法 调用局部作用域的变量并获得修改权限.
一.命名空间.
命名空间: 用来存放名字和值的关系的空间叫命名空间,我们的变量存储的时候就是存储再这片空间中
命名空间的分类:
1. 全局名称空间: 我们在py文件中自己写的变量, 函数..... 2. 内置名称空间: 我们python解释器提供好的一些内置内容(print, input....) 3. 局部名称空间: 在我们执行函数的时候.会产生一个局部名称空间. 放的是: 函数内部的内容(变量, 函数,类...)
名称空间可能会有无数个, 局部名称空间而言. 相对是独立的.一般互不干扰
取值顺序:
1.局部命名空间 →→ 2.全局命名空间 →→ 3.内置命名空间
二.作用域.
作用域命名空间:
作用域就是作用的范围.分为两类: 1.全局作用域: 包含内置和全局命名间,在整个文件的任何位置都可以使用(遵循从上到下的顺序) 2.局部作用域: 在函数内部可以使用
就是说,一个变量名如果是全局变量,那么它就是全局作用域;
如果是局部变量名(函数内),它就是局部作用域.
1)查看全局命名空间内容的方法:globals()
print(globals()) #打印全局作用域中的内容 包括(内置名称空间+全局名称空间)
2)查看局部命名空间(变量名和函数信息)的方法:locals()
print(locals()) #打印局部作用域中的内容
全局不允许查看调用局部的内容;但局部允许查看调用全局的内容
3)修改全局变量的方法
修改方法: global() #修改后的变量,其他人再调用就是修改后的值
flag = False def login(): #创建个函数 global flag #获取修改这个变量的权限 uname = input("用户名:") #用户登陆 upwd = input("密码:") if uname == "alex" and upwd == "123": flag = True #如果登陆成功就修改全局的变量 else: flag = False #如果不成功,保持原样
def fatie(): #发帖需求 if flag == True: #只有上面登陆成功了,才会修改全局变量,才可以发帖 print("可以发帖") else: #查看到没有被修改就提示它,去登陆 print("滚去登录") login() fatie() fatie()
4)修改局部变量的方法:
nonlocal() #在局部作用域范围内,调用父级命名空间的变量,并获得修改的权限,从哪调就改哪的.局部找不到就报错
a= 50 def funcl(): a = 10 def funce2(): nonlocal a #永不找全局 a+=20 print("最里面的",a) funce2() funcl()
输出结果为:最里面的 30
三、函数的嵌套
5)函数的嵌套:
就记住一点就行,def name() 只是创建了个函数,没有被调用就是空,摆设;只有name()才是调用函数,这个函数才会启动起来
6)函数的调用
1.如果指定了函数的调用者,那么函数的返回值就会给调用者; 如果没有指定调用者,那么就只会执行函数体里面的内容
2.函数名就相当于一个变量名,只有函数名加(),函数体才会执行.
3.函数调用变量值的顺序:先查看本域 →→ 父级域 →→ 全局作用域.