先谈谈python中的全局变量和局部变量
全局变量,所有的作用域都可读。而在定义的def函数内部的变量则属于局部变量,只
对该函数生效,如果想在自定义的函数中修改全局变量,需要:global name ,然后再定义
即可对全局变量重新赋值。但是对于像列表、字典、嵌套有列表的元组这样的全局变量,
在不使用global的情况下,自定义的函数中全局变量可修改但是不可重新赋值(意思是重
新赋值只会在当前函数中生效,而修改则会在接下来所有的函数中生效,相当于修改了全
局变量)。
1,一定注意在定义全局变量的时候,一定要大写。如,NAME = ‘tom‘等。
NAME = ‘tom‘ def f1(): age = 19 global NAME NAME = ‘yn‘ print(NAME, age) def f2(): age = 18 print(NAME,age) f1() f2()
执行结果:
yn, 19
yn, 18
2,
NAME = [ ‘tom‘,‘lucy‘] def f1(): age = 19 # global NAME NAME.append(‘yn‘) #修改会在接下来的函数中也生效,成为全局变量 print(NAME, age) def f2(): age = 18 print(NAME,age) f1() f2()
执行结果:
[‘tom‘, ‘lucy‘, ‘yn‘] 19
[‘tom‘, ‘lucy‘, ‘yn‘] 18
python javascripts中无块级作用域(块级作用域是指if...else...中)
java C#中有块级作用域
if 1 == 1: name = "tom" print(name)
name = "tom" def f1(): name = "a" def f2(): name = ‘b‘ print(name) f2() f1()
执行结果:
b
name = "tom" def f1(): print(name) def f2(): name = ‘lucy‘ f1() f2()
执行结果:
tom
4,易混淆的点
name = "tom" def f1(): print(name) def f2(): name = "lucy" return f1 ret = f2() ret()
执行结果:
tom
原文:http://www.cnblogs.com/yang-ning/p/6400661.html