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='\n') 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()
相关推荐
FlySky 2020-10-16
FlySky 2020-09-29
bizercsdn 2020-09-17
夜斗不是神 2020-11-17
huavhuahua 2020-11-20
Yasin 2020-11-16
xiaoseyihe 2020-11-16
千锋 2020-11-15
diyanpython 2020-11-12
chunjiekid 2020-11-10
wordmhg 2020-11-06
文山羊 2020-10-20
楼上小宇home 2020-09-26
世事一场大梦 2020-11-17
xiaoseyihe 2020-11-16
Morelia 2020-11-03
CloudXli 2020-11-03
文山羊 2020-10-31
comtop0 2020-10-31