以下內容皆以Python 3.5為例,測試環境為Spyder 3.3.0
其實Python是沒有全域變數的
也沒有常數
但其實有一種類似"全域常數"的方式可以應用
以下先給一個在class的範例
首先我們在程式一開始建立了變數a=5
1.可以看到在執行read_ok(15行),程式能夠讀取來自class外的變數 a
2.執行write_type_1(16行),我們在裡面做了一次a = 10,列印出來的a也是10
問題出在(17行),我們在執行write_type_1之後,列印"a",確認變數 a是否被修改
列印的結果為5,證實class外面的a,並沒有被修改,write_type_1裡面的a是新建立的
3.在來是挺有趣的測試,write_type_2(18行),程式會報錯
因為你在裡面嘗試"寫入"到變數a,程式認為你想要建立一個變數 a
所以認定write_type_2中的變數 a跟class外面的變數 a沒有關係
但指令是a = a + 1,write_type_2裡面沒有變數 a的初始值,因此報錯
再給一個副程式版本的與執行結果
因為執行結果一樣就不再解釋一次
結論
以上面read_ok的執行結果來看,這樣的應用比較像"全域變數"
要達到這個功能,必須嚴守一個規定"不能在class或副程式裡面""嘗試覆寫"
應用範例:
假設你的程式要丟到網路給大家使用,可以在程式一開始設定一些參數(常數)
給使用者設定這些"執行後不會有變化"的參數
像pygame中的背景顏色,就很適合這種方式
補充
這邊補充一個說明
一樣先在外面建立一個變數 a
引入變數 a,並執行write_type_2,列印出來的變數 a為10
但執行完write_type_2,再列印一次變數 a得到a = 5
這是因為在程式眼中a = a + 1
a是新建立的區域變數
正確用法
不要重複命名
沒有留言:
張貼留言