到現在我還是需要很多咖啡才對QQ
今天我們來講解一下跨檔案之間的全域變數操作吧!
這是外部建立的finction檔案op.py:
#op.py
count=1
def add():
global count
count+=1
print(count)
return
if __name__=='__main__':
add()
這是主程式檔案main.py:
#main.py
from op import add,count
global count
add()
print(count)
來執行看看結果:
>>> python main.py
2
1
腫麼會長這樣?此時你會發現,我們想要在main.py得到的count
應該也是2,卻發現是1?!
為了方便,我們會使用大量print()
來看程式是怎麼跑的!
#op.py
count=1
print('In op.py, the 1st time meet count assigning {}'.format(count))
def add():
global count
print('In add(), the 1st time meet count assigning {}'.format(count))
count+=1
print('In add(), the 2nd time meet count assigning {}'.format(count))
return
print('In op.py, the 2nd time meet count assigning {}'.format(count))
if __name__=='__main__':
print('In controlling, 1st time meet count assigning {}'.format(count))
add()
print('In controlling, 2nd time meet count assigning {}'.format(count))
#main.py
from op import add,count
global count
print('In main.py, 1st time meet count assigning {}'.format(count))
add()
print('In main.py, 2nd time meet count assigning {}'.format(count))
>>> python op.py
In op.py, the 1st time meet count assigning 1
In op.py, the 2nd time meet count assigning 1
In controlling, 1st time meet count assigning 1
In add(), the 1st time meet count assigning 1
In add(), the 2nd time meet count assigning 2
In controlling, 2nd time meet count assigning 2
>>> python main.py
In op.py, the 1st time meet count assigning 1
In op.py, the 2nd time meet count assigning 1
In main.py, 1st time meet count assigning 1
In add(), the 1st time meet count assigning 1
In add(), the 2nd time meet count assigning 2
In main.py, 2nd time meet count assigning 1
def add():
時,若function是可work的,並不會挑出錯誤訊息,只會先被置放暫時存取待使用,當然此時就會印出In co.py...
的結果,此時count依然是1。if...
這一段控制碼的時候,只要吻合條件,開始進入其下面操作。因此,首先我們先看這時候,在if...
階層下第一次遇到的count仍然是1,表示這時候count還沒經過任何操作。add()
,在add()
運作時,第一次遇到的count依然是1count+=1
後,第二次印出count變成2了,這時候add()
操作完整結束if...
進行下一行,此時透過印出經過add()
操作後count是否有改變,結果發現這時候的印出也變為2,也就代表這時候全域變數count已經被改變為2了!那我們來看看另外一組的操作:
from co import add,count
進行時,會如同上面執行co.py的步驟1一樣會的執行概念if...
這一段控制碼的時候,因為條件不吻合,不會執行其階層下的操作print
第一次遇到的count是1,因為還沒開始任何的操作add()
經過count+=1
後,第二次印出count變成2了,這時候add()
操作完整結束。這一段的結果與前面執行co.py的結果相同。add()
操作後count已經變成2,要和執行co.py的結果相同才對,但在主程式第二次print(count)
的結果卻是1add()
沒有return
任何值;再者,即使return count
,在main.py需要變數被賦予這個運算結果,即如果想要更改count,則應該改寫成count=add()
,接下來第二次print(count)
才會是2!
add()
後的count,main.py裡面接受的count就是一開始步驟1所接到的count=1,並不會有改變我們需要透過三個檔案:
#variable.py
def var():
global count
count = 1
#op.py
import variable
def add():
variable.count += 1
#main.py
import variable
import op
if __name__ == "__main__":
variable.var()
print(variable.count) # print the initial value
op.add()
print(variable.count ) # print the value after modified within co.py
執行的結果如下:
>>> python main.py
1
2
這樣你搞懂了嗎?
今天就先到這裡吧!