python复习-全局变量、局部变量、闭包

2022-09-20 19:02:58 浏览数 (1)

完整的复习完了,直接贴代码

代码语言:javascript复制
"""
学习内容
1.局部变量和全局变量(global)
2.闭包
"""

name = "yft"  # 声明在函数外部的变量是全局变量


def func1():
    s = "abcd"  # 函数内部声明的变量,叫做局部变量,仅限在函数内部使用
    print(s)


func1()  # abcd


# print(s) 这里会报错

def func2():
    name = "yueyue"  # 外部函数和内部函数同名,优先打印内部的

    print(name)

"""
def func3():
    print(name)
    # 不能在函数内部中修改全局变量
    name ="会弹吉他"  (会报错)
"""
# 修改后

def func4():
    global name  # 不修改可以不用声明,要修改则需要声明全局变量
    print(name)  # yft
    """不能在函数内部中修改全局变量"""
    name  = "会弹吉他"

func4()
print(name)  # yft会弹吉他

# list是可变类型,不用global也能修改

# 内部函数:
def func():
    # 声明变量
    n = 100  # 局部变量
    list1 = [1, 5, 2, 6]  # 局部变量

    def inner_func():
        nonlocal n
        #  对list1内的数字进行 5的操作
        for index, value in enumerate(list1):
            list1[index]  = 5  # 列表为可变类型
        print(list1)  # [6, 10, 7, 11]
        n  = 50
        """     
        由于n为不可变变量,因此要使用nonlocal/
        nonlocal只能在封装函数中使用
        """
        print(n)  # 150

    inner_func()


func()

a = 100  # 全局变量

print(globals())  # 查看全局变量有哪些

def func5():
    # 声明局部变量
    b = 100

    def inner():
        global a  # 内部函数修改全局变量(不可变)要用global
        nonlocal b  # 内部函数修改外部函数不可变变量时,首先要在外部已经声明条件下使用nonlocal
        # 尝试修改c
        c = 100
        c  = 100  # 内部的变量可以直接修改
        # 尝试修改b
        b  = 100
        # 尝试修改a
        a  = 100
        print(a, b, c)  # 200 200 200
        print(locals())  # 查看当前函数中声明的变量(如b,c)

    inner()
    print(locals())  # 查看当前函数中声明的变量

# 调用
func5()

#  闭包
"""
闭包特点:
1.保存返回闭包时的状态(外层函数变量)
"""

# 闭包例子1
def add(a, b):  #a=5, b=10
    c = 10      #c=0

    def inner_fun():
        s = a   b   c
        print("相加的结果是:{}".format(s))

    return inner_fun

# result接收了inner_fun函数返回的值
result = add(5, 10)

result()

# 闭包例子2

def mi(cifang):
    def jishu(base):
        return base**cifang
    return jishu

square = mi(3)
print(square(5))

分析闭包例1:

0 人点赞