1.true
2.false
3.none
4.notimplemented:被二元特殊方法返回(比如eq()、 lt() 、 add() 、 rsub() 等),表明某個型別沒有像其他型別那樣實現這些操作
(1)能被重新賦值,甚至改變屬性名稱, 並且不會產生 syntaxerror,所以它不是乙個真正的「真」常數。當然,我們應該永遠不改變它
# none="a" #報錯:syntaxerror: cannot assign to none
notimplemented="abc"
print(notimplemented) #abc
(2)其實際值為true
# print(notimplemented) #notimplemented
# print(bool(notimplemented)) #true
(3)會被原地處理(in place)的二元特殊方法返回(比如imul()、iand()等)
class a():
def __init__(self,value):
self.value=value
def __eq__(self,other):
if isinstance(other,a):
print("1--正在把1個a和a比較")
return other.value==self.value
if isinstance(other,b):
print("2--正在把1個a和b比較")
return other.value==self.value
print("3--不能把a和其他類進行比較")
return notimplemented
class b():
def __init__(self,value):
self.value=value
def __eq__(self,other):
if isinstance(other,b):
print("4--正在把1個b和b比較")
return other.value==self.value
print("5--不能把b和其他的類進行比較")
return notimplemented
a1=a(123)
b1=b(123)
#使用類a中的eq()來進行這個比較
print(a1==a1) #1--正在把1個a和a比較
#true
#使用類b中的eq()來進行這個比較
print(b1==b1) #4--正在把1個b和b比較
#true
#在a的eq()會檢查other是不是b的乙個例項
print(a1==b1) #2--正在把1個a和b比較
#true
#b1.eq(a1)方法返回notimplemented,這樣會導致呼叫a中的eq()方法。而且由於在a中的eq()定義了a和b之間的比較,所以就得到了正確的結果(true)
print(b1==a1) #5--不能把b和其他的類進行比較
#2--正在把1個a和b比較
#true
notimplemented告訴執行時,應該讓其他物件來完成某個操作。在表達b1 == a1中,b1.eq(a1)返回了notimplemented,這說明python試著用a1.eq(b1)。由於a1足夠可以返回true,因此這個表達可以成功。如果a中的eq()也返回notimplemented,那麼執行時會退化到使用內建的比較行為,即比較物件的識別符號(在cpython中,是物件在記憶體中的位址),如下例子:
class a():
def __init__(self,value):
self.value=value
def __eq__(self,other):
if isinstance(other,a):
print("1--正在把1個a和a比較")
return other.value==self.value
print("3--不能把a和其他類進行比較")
return notimplemented
class b():
def __init__(self,value):
self.value=value
def __eq__(self,other):
if isinstance(other,b):
print("4--正在把1個b和b比較")
return other.value==self.value
print("5--不能把b和其他的類進行比較")
return notimplemented
a1=a(123)
b1=b(123)
# print(a1==a1) #1--正在把1個a和a比較
# #true
# print(b1==b1) #4--正在把1個b和b比較
# #true
print(a1==b1) #3--不能把a和其他類進行比較
#5--不能把b和其他的類進行比較
#false
print(b1==a1) #5--不能把b和其他的類進行比較
#3--不能把a和其他類進行比較
#false
注:如果在呼叫b1.eq(a1)時丟擲notimpementederror,而不進行處理,就會中斷**的執行;而notimplemented無法丟擲,僅僅是用來進一步測試是否有其他方法可供呼叫
5.ellipsis:與 「...」 相同,其bool值為真,感覺類似於pass的作用
def fun():
...print(fun()) #none
print(...) #ellipsis
print(type(...)) #print(bool(...)) #true
(1)是個單例
print(id(...)) #1507230736
print(id(...)) #1507230736
print(id(ellipsis)) #1507230736
(2)特殊值主要與使用者定義的容器資料型別的擴充套件切片語法結合使用
l=[1,2,3]
print(l) #[1, 2, 3, [...]]
6.__debug__:如果 python 沒有以 -o 選項啟動,則此常量為真值
print(__debug__) #true
# __debug__=1 #報錯:syntaxerror: cannot assign to __debug__
注:變數名 none,false,true 和 __ debug__ 無法重新賦值(賦值給它們,即使是屬性名,將引發 syntaxerror ),所以它們可以被認為是「真正的」常數 python 內建常量
python的內建常量不多,只有6個,分別是true false none notimplemented ellipsis debug 一.true 1.true是bool型別用來表示的真值常量 true true type true bool 2.對常量true進行任何賦值操作都會丟擲語法錯誤 t...
python合法常量 python內建常量是什麼?
摘要 學習python的過程中,我們會從變數常量開始學習,那麼python內建的常量你知道嗎?乙個新產品,想熟悉它,最好的辦法就是檢視說明書!沒錯,python也給我們準備了這樣的說明書 python官方文件。想知道python內建常量其實很簡單,在官方文件就可找到。這裡我們來依次熟悉一下,看看這些...
Python標準庫學習 2 內建常量
內建常量 有少數的常量存在於內建命名空間中。它們是 1 false bool 型別的假值。2 true bool 型別的假值。3 none nonetype 型別的唯一值。4 notimplemented 雙目運算特殊方法 如eq lt add rsub 等 應返回的特殊值,用於表示運算沒有針對其他...