函数的嵌套使用:

def f1():
    def f2():
        def f3():
            print('hello')
        f3()
    f2()

f1()

# 定义一个函数,传入两个数字比较大小
def max(x,y):
    return x if x<y else y

# 调用定义好的函数进行比较
def compare_size(a,b):
    res = max(a,b)
    return res

名称空间

# 局部名称空间,全局名称空间和内置名称空间

#1、python解释器先启动,因而首先加载的是:内置名称空间
#2、执行test.py文件,然后以文件为基础,加载全局名称空间
#3、在执行文件的过程中如果调用函数,则临时产生局部名称空间

# 局部名称空间:
    a=1
    def func():
        b = 2
# 上面的这个a就是属于全局名称空间内,在全局的任意处都可以调用,但是b是写在函数内部的,属于局部名称空间,只能在函数内使用,全局用不了。

# 注意: 全局定义的可以在局部使用,局部定义的不能在全局使用。

作用域

全局范围(内置名称空间与全局名称空间属于该范围):全局存活,全局有效
局部范围(局部名称空间属于该范围):临时存活,局部有效

global与nonlocal关键字

# global 将局部变量升级成全局变量
def func():
    global a
    a = 1

func()
print(a)
# 打印a等于1


# 了解即可
# nonlocal 非局部声明变量指代的已有标识符是最近外面函数的已声明变量
count = 1
def a():
    count = 'a函数里面'
    def b():
        nonlocal count
        print(count)
        count = 2
    b()
    print(count)

    a()
    print(count)
# 打印: a函数里面  2  1