一 变量与作用域
变量的定义使用var=varvalue
1)如果函数中定义了同名的变量,则同名的全局变量被屏蔽,否则查找使用全局变量
def
f1():
v1 = ' local '
f2()
print (v1)
def f2():
print (v1)
v1 = " Value1 "
f1()
# Value1
# local
v1 = ' local '
f2()
print (v1)
def f2():
print (v1)
v1 = " Value1 "
f1()
# Value1
# local
2)内嵌定义的函数中的变量的使用,如果内嵌函数中没有定义,则先查找包含此内嵌函数作用域中变量的定义,最后查找全局中变量的定义。
def
f3():
def f4():
print (v3)
v3 = " Value3# "
print (v3)
f4()
v3 = " Value3 "
f3()
# Value3#
# Value3#
def f4():
print (v3)
v3 = " Value3# "
print (v3)
f4()
v3 = " Value3 "
f3()
# Value3#
# Value3#
3)注意=赋值时,不可变类型其实是产生了对原变量的引用,可变类型与原来的共享相同的内存。
def
f5():
v51 = 100
v53 = v52
v53.append( 100 )
print ( v51)
print ( v53)
v51 = 10
v52 = [ 10 ]
f5()
print (v51)
print (v52)
# 100
# [10, 100]
# 10
# [10, 100]
v51 = 100
v53 = v52
v53.append( 100 )
print ( v51)
print ( v53)
v51 = 10
v52 = [ 10 ]
f5()
print (v51)
print (v52)
# 100
# [10, 100]
# 10
# [10, 100]
4)作用域由def、class、lambda等语句产生,if、try、for等语句并不会产生新的作用域。
def
f7(right):
if (right):
result = True
else :
result = False
print (result)
try :
v7 = " Value7 "
except :
pass
print (v7)
f7(False)
# False
# Value7
if (right):
result = True
else :
result = False
print (result)
try :
v7 = " Value7 "
except :
pass
print (v7)
f7(False)
# False
# Value7
三 global关键字
global关键字用来在局部作用域中申明使用全局变量。
def
f6():
global v6
print (v6)
v6 = " local "
print (v6)
v6 = " global "
f6()
print (v6)
# global
# local
# local
global v6
print (v6)
v6 = " local "
print (v6)
v6 = " global "
f6()
print (v6)
# global
# local
# local
参考:
http://hi.baidu.com/xjtukanif/blog/item/f35000f1642670c00b46e03c.html
完!