python函式區域性變數

2021-07-28 07:22:42 字數 1199 閱讀 6227

python簡單變數(不考慮類變數)分為兩類: 函式內定義的區域性變數,和函式外定義的全域性變數

基本訪問規則

1. 在函式內部,可以直接

讀取訪問全域性變數(注意唯讀)

#!/usr/bin/env python

i = 10

def f():

j = i + 1 # 讀取全域性變數i

f()print "i=%d" % i

2. 在函式內部,如果要修改訪問乙個變數,那麼python一定會認為這是乙個區域性變數(除非變數用global修飾,後面講)

所以如果同名全域性變數,python會建立乙個區域性變數

#!/usr/bin/env python

i = 10

def f():

i = 20 # 賦值操作, 建立乙個本地變數i

f()print "i=%d" % i

3. 在函式內部,如果修改同名全域性變數之前,對變數有讀取引用,那麼會引發unboundlocalerror: local variable 'i' referenced before assignment錯誤

#!/usr/bin/env python

i = 10

def f():

j = i + 1 # 開始此行**試圖引用權變數i

i = 20 # 而此行表明i是本地變數,反推出前面一行的i應該是本地變數,但在執行前面一行時本地變數並沒有創出出來,所以報錯

f()print "i=%d" % i

traceback (most recent call last):

file "./tt.py", line 6, in

f()file "./tt.py", line 4, in f

j = i + 1

unboundlocalerror: local variable 'i' referenced before assignment

聰明的程式設計師馬上就會思考, 會什麼不讓前面一行引用全域性變數i,而在i=20之後的對i的引用才使用本地變數呢;技術上完全可以這麼做,試想一旦這麼做,導致同乙個**塊裡的同名變數指向的是不同的變數,其結果是**的可讀性可維護性變得極差,對後期**的除錯,bug修正簡直是個大坑。

python函式和區域性變數

不帶引數的方法,攜帶返回值 defmethod return 不攜帶引數的方法 不帶引數的方法,攜帶返回值 defmethod1 print 不攜帶引數的方法 二者區別 函式呼叫 print method 只執行方法,不列印的話無法顯示資訊 method1 在方法中直接進行了列印,可以直接顯示,但是...

python中函式的區域性變數

1 def discount price,rate 定義函式名discount,兩個形式引數price和rate sell price price rate return sell price 函式返回售價 price float input please input the price 此處接受輸...

python 函式引數與區域性變數

形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數 實參可以是常量 變數 表示式 函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用...