1. 程式人生 > >python中的全大發彩局票網站開發變量與局部變量的區別

python中的全大發彩局票網站開發變量與局部變量的區別

超出 lob 變量的作用域 oba 局部變量 同名 glob 2.x 大發

全局變量與大發彩局票網站開發 haozbbs.com Q1446595067局部變量的本質區別在於作用域:

全局變量是在整個py文件中聲明的,全局範圍內都能訪問;

局部變量是在某個函數中聲明的,只能在該函數中調用它,如果試圖在超出範圍的地方調用,程序就會崩掉。

如果在函數內部定義某個與全局變量一樣名稱的局部變量,就可能導致意外的效果,不建議這樣使用,這樣會使程序不健全。
例1:

def fun(x):
y=2
print("乘法的運行結果:",x*y)

num1=1
print("初始num1=",num1)

fun(num1)

print("y的值是:",y)

運行結果:

初始num1= 1
乘法的運行結果: 2
Traceback (most recent call last):
File "/home/python/Desktop/MX_Dynamic_Query_RTree2/test.py", line 18, in <module>
print("y的值是:",y)
NameError: name ‘y‘ is not defined

原因是:試圖訪問局部變量,但是訪問的地方不在該變量y的作用域中,變量y是在函數內部定義的一個局部變量,所以該變量的作用域為該函數內部,在函數外部訪問該局部變量y會報錯!
例2:

def fun():
num1 = 2
print("函數內修改後num1=", num1)
num1 = 1
print("初始num1=", num1)
fun()

print("運行完函數後num1=", num1)

運行結果:

初始num1= 1
函數內修改後num1= 2

運行完函數後num1= 1

可以看到在函數內部對全局變量修改後,在函數執行完畢,修改的結果是無效的,全局變量並不會受到影響。
例3:

def fun():
num1 *= 2
print("函數內修改後num1=", num1)
num1 = 1
print("初始num1=", num1)

fun()

print("運行完函數後num1=", num1)

運行結果:

初始num1= 1
Traceback (most recent call last):
File "/home/python/Desktop/MX_Dynamic_Query_RTree2/test.py", line 15, in <module>
fun()
File "/home/python/Desktop/MX_Dynamic_Query_RTree2/test.py", line 11, in fun
num1 *= 2

UnboundLocalError: local variable ‘num1‘ referenced before assignment

報錯,這是因為在函數中使用了局部變量num1,它只是個跟全局變量同名的局部變量,使用前還是要賦值。
例4:如果真的想在函數體內修改全局變量的值,可以使用global關鍵字
def fun():
global num1
num1=2
print("函數內修改後num1=",num1)
num1=1
print("初始num1=",num1)
fun()

print("運行完函數後num1=",num1)

運行結果:

初始num1= 1
函數內修改後num1= 2
運行完函數後num1= 2

使用global關鍵字就是告訴python編輯器,這個變量不是局部變量而是全局變量,其實有點像"引用"的意思。

例5:關鍵字nonlocal,字面意思是當前這個變量不是局部變量,它是python3.0中新增的關鍵字,python2.x中不支持。

def fun():
num2 = 3
def fun2():
num2 *= 2
print("num2=", num2)
return fun2()

fun()

報錯!!錯誤的原因跟前面的差不多,就是使用了未定義的局部變量,然而num2也不是全局變量,只是fun2函數的外層變量,強行使用global定義num2的話同樣會報錯。

加上nonlocal關鍵字:

def fun():
num2 = 3
def fun2():
nonlocal num2
num2 *= 2
print("num2=", num2)
return fun2()
fun()

運行結果:num2= 6

python中的全大發彩局票網站開發變量與局部變量的區別