python語法31[變量的作用域+global]
一 變量與作用域
變量的定義使用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
完!


浙公網安備 33010602011771號