python函數對變量的作用及遵循的原則


1.全局變量和局部變量

全局變量:指在函數之外定義的變量,一般沒有縮進,在程序執行的全過程有效

局部變量:指在函數內部使用的變量,僅在函數內部有效,當函數退出時變量將不存在

例如:

1 n=1 #n是全局變量
2 def func(a,b):
3     c=a*b    #c是局部變量,a和b作為函數參數也是局部變量
4     return c
5 s=func("knock~",2)
6 print(c)
Traceback (most recent call last):
  File "F:\pyrhon\函數對變量的作用.py", line 6, in <module>
    print(c) NameError: name 'c' is not defined

這個例子說明,當函數執行完退出后,其內部變量將被釋放。

如果函數內部使用了全局變量呢?例如:

n=1 #n是全局變量
def func(a,b):
    n=b    #這個n是在函數內存中新生成的局部變量,不是全局變量
    return a*b
s=func("knock~",2)
print(s,n) #測試一下n值是否發生改變

knock~knock~ 1

函數func()內部使用了變量n,並且將變量參數b賦值給變量n,為何n值沒有改變?

因為函數func()有自己的內存空間,它將n=b語句理解為生成一個局部變量n,並將參數b賦值給它,此時func()函數沒有將n當作全局變量。所以,函數退出后,局部變量n被釋放,全局變量n的值沒有改變。

如果希望讓func()函數將n當作全局變量,需要在變量n使用前顯式說明該變量未全局變量,修改后:

1 n=1 #n是全局變量
2 def func(a,b):
3     global n
4     n=b    #將局部變量b賦值給全局變量n
5     return a*b
6 s=func("knock~",2)
7 print(s,n) #測試一下n值是否發生改變

knock~knock~ 2

2.python函數對變量的作用遵守原則:

(1)簡單數據類型變量無論是否與全局變量重名,僅在函數內部創建和使用,函數退出后變量被釋放,如有全局同名變量,其值不變。

(2)簡單數據類型變量在用global保留字聲明后,作為全局變量使用,函數退出后該變量保留且值被函數改變。

(3)對於組合數據類型的全局變量,如果在函數內部沒有被真實創建的同名變量,則函數內部可以直接使用並修改全局變量的值。

(4)如果函數內部真實創建了組合數據類型變量,無論是否有同名全局變量,函數僅對局部變量進行操作,函數退出后局部變量被釋放,全局變量值不變。

 

思考:如果全局變量不是整數n,而是列表類型ls,會怎么樣呢?

本篇主要講述函數對程序中變量的作用問題,涉及組合數據類型,后期會持續更新講解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM