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

一.命名空间。

二.作用域

三函数的嵌套。

今日新名词:

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.函数调用变量值的顺序:先查看本域  →→ 父级域 →→ 全局作用域. 

函数---名称空间和作用域(相关练习)

posted @ 2018-12-07 18:14  Tank-Li  阅读(221)  评论(0编辑  收藏  举报