這篇文章說兩個問題:
問一:下劃線變數
單下劃線開頭的變數,pyhthon規定為內部變數(私有變數),from m import * 時,這種變數並不會匯入進來,例如:
[python] 純文字檢視
複製** ?
0102
03
04
05
06
07
08
09
10
11
12
13
foo.py
#foo.py
bar
=
10
bar2
=
11
_bar
=
20
__bar
=
30
foo2.py
#foo2.py
from
foo
import
*
if
__name__
=
=
'__main__'
:
print
locals
()
執行 python foo2.py,輸出:
[python] 純文字檢視
複製** ?
1
輸入結果中並沒有 _bar和__bar,因為它們都是以下劃線開頭的變數,所以沒有匯入進來,但是如果你非要把這些變數匯入進來也是可以的,使用import時,明確匯入具體的變數時就行了。如:
[python] 純文字檢視
複製** ?
12
3
4
5
6
#foo2.py
from
foo
import
*
from
foo
import
_bar
from
foo
import
__bar
if
__name__
=
=
'__main__'
:
print
locals
()
輸出:[python] 純文字檢視
複製** ?
1
單下劃線結尾的變數:用於避免於python關鍵字衝突的變數,如class_:
tkinter.toplevel(master, class_='classname')
如上所說的變數講的是定義在模組中的變數,屬於模組中的屬性,如果這些變數定義在函式裡面,那它和普通的變數沒什麼兩樣的,都是區域性變數。此外,單下劃線同樣適用於函式。
雙下劃線開頭的變數:它在模組中還是當作單下劃線看待,但出現在類中作為類屬性就不一樣了,在執行時該類屬性會被「混淆",不能直接訪問,需要在該變數前加上下劃線和類名才能訪問。如:
[python] 純文字檢視
複製** ?
0102
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
class
foo(
object
):
boo
=
40
_boo
=
50
__boo
=
60
# _foo__boo
def
__init__(
self
):
self
.__booo
=
70
def
__test(
self
):
#_foo__test
print
"__test"
if
__name__
=
=
'__main__'
:
print
foo.boo
print
foo._boo
print
foo._foo__boo
foo
=
foo()
print
foo._foo__booo
foo._foo__test()
這樣可以防止與父類或子類中同名的__***屬性發生衝突。
開始和結尾都有的雙下劃線的變數:此類變數屬於魔法物件,如:init,file,你永遠不要自己也發明個出來。
問二:all
__all__物件是裝有字串的列表物件,他會覆蓋 from import * 的預設行為:如
[python] 純文字檢視
複製** ?
0102
03
04
05
06
07
08
09
10
11
12
13
#foo.py
__all__
=
[
'bar'
,
'baz'
]
waz
=
5
bar
=
10
def
baz():
return
'baz'
from
foo
import
*
print
bar
print
baz
# 異常
print
waz
在foo.py裡面定義了__all__後,import * 就會按照 __all__定義的內容匯入,所以這裡 print waz就拋異常了,因為它不在 __all__裡面。為外,你可以把下劃線開頭的變數的字串形式加入到__all__中,這樣 import * 也能看到這些變數。
Python中下劃線說明
在python中經常看到方法或者變數前帶有下劃線,稍作解釋。1.前後雙下劃線 mtthod 這一般是系統定義的特殊方法,類似於類的構造方法 init 2.前單下劃線 以單下劃線開頭的變數指的是變數的許可權型別為protected,即是保護許可權的變數,該型別的變數只能通過其本身及子類的例項物件能夠訪...
python中下劃線 的用途
python 用下劃線作為變數字首和字尾指定特殊變數。不能用 from module import 匯入 系統定義名字 類中的私有變數名 核心風格 避免用下劃線作為變數名的開頭。因為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下劃線作為變數名的開頭。一般來講,...
Python中下劃線含義詳解
格式例子作用及含義單下劃線開頭 var僅供內部使用,通常不會有python直譯器強制執行末尾單下劃線var 單個末尾下劃線 字尾 是乙個約定,用來避免與python關鍵字產生命名衝突。雙下劃線開頭 var當在類上下文使用時,觸發 名詞修飾 由python直譯器強制執行雙下劃線開頭和結尾 var py...