浅谈Python从全局与局部变量到装饰器的相关知识
浅谈Python从全局与局部变量到装饰器的相关知识
全局变量与局部变量
# num1是全局变量 num1 = 1 # num2是局部变量 def func(): num2 = 2
在函数外(且不在函数里)定义的变量是全局变量;
在函数里定义的变量是局部变量。
在函数外无法引用局部变量,但在函数里面可以引用全局变量,不过需要注意的是,一般函数里不能修改全局变量,如果在函数里修改全局变量,那么python会自动创建一个与之名字相同的变量,使用global关键字可以将局部变量变为全局变量,进而修改。
# 这是全局变量 num1 = 1 # 函数里的num1是局部变量 def func1(): num1 = 2 #调用函数 func1() # 输出num1来验证全局变量是否改变 print(num1) # 输出为1 # 定义局部变量num2 def func2(): num2 = 2 # 尝试在函数外引用局部变量 print(num2) # 输出:NameError: name 'num2' is not defined # 在函数里引用全局变量 def func3(): print(num1) # 调用函数 func3() # 输出:1 # 使用global关键字来修改局部变量 def func4(): global num1 num1 = 2 # 调用函数 func4() # 验证num1是否被修改 print(num1) # 输出为2
内嵌函数
# 在函数内部定义另一个函数,这种函数称为内嵌函数或者内部函数 def func1(): num1 = 1 def func2(): num2 = 2 # num1和num2都是局部变量 # 我们称func2是内部函数,而func1是外部函数 # 内部函数的作用域在整个外部函数里面,且内部函数可以引用外部函数里的局部变量
LEGB原则:
• L-Local:函数内的名字空间。
• E-Enclosing function locals:嵌套函数中外部函数的名字空间。
• G-Global:函数定义所在模块的名字空间。
• B-Builtin:Python内置模块的名字空间。
变量的查找顺序依次是L→E→G→B。
内部函数中,只能对外部函数的局部变量进行访问,但一般不能进行修改。(这一点和全局变量与局部变量一样),使用nonlocal关键字可以进行修改
闭包
Python中的闭包:封闭环境中的函数
定义:如果在一个内部函数里,对在外部作用域但不是在全局作用域的变量进行引用(简言之:就是在嵌套函数的环境下,内部函数引用了外部函数的局部变量),那么内部函数就被认为是闭包
注:因为闭包的概念是由内部函数而来,所以不能在外部函数以外的地方对内部函数进行调用。
def func1(): num1 = 1 def func2(): print(num1) return func2 func3 = func1() func3()
闭包的作用:为了尽可能地避免使用全局变量,闭包允许将函数与其所操作的某些数据(环境)关联起来,这样外部函数就为内部函数构成了一个封闭的环境
装饰器
装饰器:在Python中装饰器(decorator)的功能是将被装饰的函数当作参数传递给与装饰器对应的函数(名称相同的函数),并返回包装后的被装饰的函数。
def func1(func2): def func3(): print("程序开始执行 ") func2() print("程序结束执行") return func3 # **必须返回函数,如果后面加括号,那么内部返回的函数会直接执行** def func4(): print("hello world") func4 = func1(func4) func4() # 输出: '''程序开始执行 hello world 程序结束执行'''
大多数装饰器会定义内部函数,但是为了方便,也可以不在内部定义函数,而是直接让装饰器返回原来的函数。但当我们定义的函数中有参数时,就必须在内部定义一个函数。但建议使用内部函数,因为内部函数内的代码不会在传递过程直接执行
@语法糖
@语法糖可以快速将原函数当成参数传递给外部函数并返回给与原函数名字相同的新函数
def func1(func2): def func3(): print("程序开始执行 ") func2() print("程序结束执行") return func3 # **必须返回函数,如果后面加括号,那么内部返回的函数会直接执行** @func1 def func4(): print("hello world") func4()
对于装饰器,加入内部函数参数[,收集参数],可以实现更多的功能
另外还有参数化装饰器,叠放装饰器,完善装饰器,以及一些内置装饰器可以用来更深度的学习
到此这篇关于浅谈Python从全局与局部变量到装饰器的相关知识的文章就介绍到这了,更多相关Python全局与局部变量到装饰器内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!
推荐阅读
-
华强北耳机和苹果耳机有啥区别(华强北苹果耳机跟正版有什么区别)
-
痛风食谱菜谱大全
痛风食谱菜谱大全男性到中年后,痛风食谱菜谱大全,最大的痛苦莫过于钱包鼓了,身子却垮了。现在都市人不健康的生活方式和过度劳累,让我们...
-
口里总是苦是什么原因(嘴里苦是什么原因)
大家好,今天来为大家解答嘴里苦是什么原因这个问题的一些问题点,包括口里总是苦是什么原因也一样很多人还不知道,因此呢,今天就来为大家...
-
全身美白产品排行榜10强(全身美白的产品)
全身美白的产品美白护肤是一项相对特殊的护肤方式,全身美白的产品,大家目前可以选购的美白功效护肤品,都是有特证认证的产品,也是官方认...
-
黄粱是小米吗(黄粱是小米还是水稻)
黄粱是小米。黄粱是一种粟米,粟米因为颗粒细小,又叫做小米,黄粱原产中国北方,是古代黄河流域重要的粮食作物之一,关于黄粱的典故有黄粱...
-
黑头黑脚的是什么动物(黑头黑脚代表什么动物)
黑头黑脚代表的动物是黑熊。黑熊全身的毛发都是黑色的,所以由此得来黑熊的称呼,黑熊的头部和脚部都是黑色的,所以黑头黑椒代表的动物是黑...
-
贵州选调生报考条件及时间2023年(贵州选调生报考条件及时间2023)
考研是场持久战,也是场信息战。每年临近暑假,就有很多院校发布公告,调整考研初试科目。这不,23考研人马上就又被“摆了一道”,又有几...
-
上海市公务员考报名时间2023时间(上海市公务员考报名时间2023)
2023年国考笔试考试延期举行,那2023年省考会延期吗?2023年省考对于已经发布招录考试简章地区,目前都已报名结束,进入笔试环...
-
银耳怎么吃降糖效果最好(银耳怎么吃)
银耳怎么吃说到银耳,银耳怎么吃,相信大家都不陌生了,经常拿来煲汤做糖水什么的!银耳口感脆爽,营养丰富,银耳富含维生素D,能防止钙的...
-
2023年纳音五行属什么命(2023年纳音)
2023年为农历【癸卯年】,属兔人为水兔之命。通过六十甲子纳音表查询可知,纳音为金箔金命,山林之兔。公元2023年,公历平年,共3...