函数---名称空间和作用域

Posted lgw1171435560

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数---名称空间和作用域相关的知识,希望对你有一定的参考价值。

今日新名词:

1)globals()查看全局作用域的内容;

2)locals()查看局部作用域的内容;

3)global() 调用修改全局作用域变量的权限;

4)nonlocal()调用修改局部作用域变量的权限.

=====================================================================

1)查看全局作用域中的内容:包括名字和对应的值

print(globals())  #查看全局作用域的内容  包括(内置名称空间+全局名称空间)

 

2)查看局部作用域中的内容:

 

print(locals())  #查看当前作用域中的内容

#全局不允许查看调用局部的内容;但局部允许查看调用全局的内容

===============================================================

3)修改全局变量的方法

修改方法: global()    # 注意跟查看全局作用域的方法globals()就查一个字母s,修改后的变量后面其他人调用全局的它都是这个值

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)函数的嵌套:

函数里查找并使用变量的顺序:自己,上一层,上一层,上一层,直到内置作用域,没有就报错

6)函数的调用

就记住一点就行,def name() 只是创建了个函数,没有被调用就是空,摆设;只有name()才是调用函数,这个函数才会启动起来  

 


以上是关于函数---名称空间和作用域的主要内容,如果未能解决你的问题,请参考以下文章

013.Python之函数嵌套名称空间与作用域闭包函数

函数的作用域和名称空间

函数作用域与名称空间

python 函数的名称空间及作用域

作用域和名称空间

函数---名称空间和作用域