python基础之名称空间和作用域、函数嵌套

一、名称空间

1、定义:存放名字与值的绑定关系

2、名称空间分为:内置名称空间、全局名称空间、局部名称空间

内置名称空间:python解释器自带的名字,python解释器启动就会生成

全局名称空间:文件级别定义的名字都会存放与全局名称空间,执行python文件时会产生

局部名称空间:定义在函数内部的名字,局部名称空间只有在调用函数时才会生效,函数调用结束则失效

3、加载的顺序:三者的加载顺序:内置名称空间->全局名称空间->局部名称空间

4、取值的顺序:局部名称空间->全局名称空间->内置名称空间7

# # max=10
# def func(): #x=1
#     # max=20
#     print(max)
#
#
# func()



# max=10
#
# def func(): #x=1
#     max=20
#     # print(max)
# func()
#
#
# print(max)
#


# # x=0
# def f1():
#     # x=1
#     def f2():
#         # x=2
#         def f3():
#             # x=3
#             print(x)
#         f3()
#     f2()
#
# f1()

二、作用域

1、范围:

全局作用域:内置名称空间与全局名称空间的名字属于全局范围,在整个文件的任意位置都能被引用,全局有效

局部作用域:局部名称空间的名字属于局部范围,只在函数内部可以被引用,局部有效

# x=1
# def foo():
#     def f2():
#         print(x)
#     f2()
# def bar():
#     print(x)
#
# foo()
# bar()


# def f1():
#     x=1
#     def f2(): #f2=value
#         # x=2
#         print(x)
#     f2()
# f1()


x=1
def func():
    x=2
    def f1():pass
    # print(dir(globals()['__builtins__'])) #全局作用域name
    # print(locals()) #局部作用域name

func()

print(globals() is locals())

2、作用顺序是:局部作用域》》》》》》全局作用域

三、函数嵌套

1、函数的嵌套定义

def f1():
    def f2():
        def f3():
            print('from f3')
        print('from f2')
        f3()
    print('from f1')
    f2()
# print(f1)
f1()

2、函数的嵌套调用

def max2(x,y):
     if x > y:
        return x
     else:
        return y

def max4(a,b,c,d):
    res1=max2(a,b) #23
    res2=max2(res1,c) #23
    res3=max2(res2,d) #31
    return res3
print(max4(11,23,-7,31))
原文地址:https://www.cnblogs.com/fenglinglf/p/7003115.html