前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python复习-全局变量、局部变量、闭包

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

作者头像
y191024
发布2022-09-20 19:02:58
3350
发布2022-09-20 19:02:58
举报
文章被收录于专栏:睡不着所以学编程

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

代码语言: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:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 睡不着所以学编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档