python函数2_闭包和装饰器
Posted 冥思苦想
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python函数2_闭包和装饰器相关的知识,希望对你有一定的参考价值。
变量的范围(局部/全局)
- 局部变量
- 在函数内部声明的变量
- 在函数体外部无法获取
- 全局变量
- 在函数外部声明的变量
- 所有函数都可以访问
在函数内,局部变量和全局变量同名,优先使用局部变量
name = '月月'
def fun2():
name = '小月月'
name += '会弹吉他'
print(name)
fun2()
小月月会弹吉他
当在函数体内,尝试更改全局变量会报错
name = '月月'
def fun2():
print(name)
name += '会弹吉他'
fun2()
当需要在函数体内修改全局变量时,需要加global
只是获取不需要加
name = '月月'
def fun2():
global name
name += '会弹吉他'
print(name)
fun2()
print(name)
月月会弹吉他
月月会弹吉他
当在函数中要修改的全局变量是可变类型的,如列表,则不需要添加global关键字
list1 = ['python','php','go']
def fun2():
list1.append('java')
fun2()
print(list1)
['python', 'php', 'go', 'java']
内部函数
可以访问外部函数的变量
a = 10
def func1():
b = 20
def func2():
print(a,b)
func2()
func1()
10 20
内部函数可以修改外部函数的可变类型的变量比如:list
list1 = ['python','php','go']
def func1():
list2 = ['html','css']
def func2():
list1.append('java')
list2.append('javascript')
print(list1,list2,sep='
')
func2()
func1()
['python', 'php', 'go', 'java']
['html', 'css', 'javascript']
内部函数修改全局的不可变变量时,需要在内部函数声明global 变量名
a = 10
def func1():
b = 20
def func2():
global a
a += b
print(a,b)
func2()
func1()
内部函数修改外部函数的不可变变量时,需要在内部函数中声明,nonlocal 变量名
a = 10
def func1():
b = 20
def func2():
nonlocal b
b += a
print(a,b)
func2()
func1()
4.1, locals(),可以看到当前函数中声明的变量有哪些,以字典的形式输出
a = 10
def func1():
b = 20
def func2():
nonlocal b
b += a
print(locals())
func2()
print(locals())
func1()
{'b': 30}
{'func2': <function func1.<locals>.func2 at 0x000001BF232F4730>, 'b': 30}
globals(),查看全局变量有那些,以字典的形式输出(会有一些系统中的键值对)
a = 10
def func1():
b = 20
def func2():
nonlocal b
b += a
print(globals())
func2()
func1()
以上是关于python函数2_闭包和装饰器的主要内容,如果未能解决你的问题,请参考以下文章