Python3中的常量和部分案例詳解,90%的人都不懂


Python3的內置常量

在Python解釋器中,有少量的常量存在於內置命名空間中

所謂常量就是指不變化的量,雖然在python中的常量有可以被重新賦值的常量,但是強烈建議不要對其重新賦值,否則會影響python解釋器正確執行python程序

注意:這里順便提醒大家不管你是為了Python就業還是興趣愛好,記住:項目開發經驗永遠是核心,如果你缺新項目練習或者沒有python精講教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,里面很多新教程項目,還可以跟老司機交流討教!

False:

  • bool類型的假值
  • 不可賦值

True

  • bool類型的真值,給True或False賦值是非法的,會引發SyntaxError
  • 不可賦值

None

  • NoneType類型的唯一值.None經常用於表示缺少值,當因為默認參數未傳遞給函數時.給None賦值也是非法的,后引發SyntaxError
  • 不可賦值

NotImplemented

  • 二進制特殊方法應返回特殊值(例如,__eq__(),__lt__(),__add__(),__rsub__()等)表示操作沒有針對其他類型實現,為了相同的目的可以通過就地二進制特殊方法(例如__imul__(),__rightnd__()等)返回,它的邏輯為真.
  • 對其賦值不會拋錯,但是不應該對其賦值,會影響解釋器對程序正常的執行

注解:當二進制(或就地)方法返回NotImplemented時,解釋器將常識對另一種類型(或其他一些回滾操作,取決於運算符)的反射操作。 如果所有嘗試都返回NotImplemented,則解釋器將引發適當的異常。 錯誤返回的NotImplemented將導致誤導性錯誤消息或返回到Python代碼中的NotImplemented值。

NotImplemented是說明當前代碼沒有實現對調用方法的支持,不錯產生錯誤.

它的布爾值為真:

>>> bool(NotImplemented) True 復制代碼

下面用代碼展示這個常量的作用,定義兩個類,實現了__eq__()方法:

class A: def __init__(self, value): self.value = value def __eq__(self, other): """ 傳進的other是A的實例或者B的實例,都調用此方法進行比較, 其他情況返回NotImplemmented """ if isinstance(other, A): print(f'Comparing an A with another A') return other.value == self.value if isinstance(other, B): print(f'Comparing an A with a B') return other.value == self.value print('could not compare A with other class') return NotImplemented class B: def __init__(self, value): self.value = value def __eq__(self, other): """ 只有other是B的實例時才調用這個方法進行比較,其他情況返回 NotImplemented """ if isinstance(other, B): print(f'Comparing an B with another B') return other.value == self.value print('could not compare B with other class') return NotImplemented 復制代碼

在代碼中實例化兩個類,分別進行比較,查看調用方法的不同:

>>> a1 = A(1) >>> b1 = B(1) >>> a1 == b1 Comparing an A with a B True >>> a1 == a1 Comparing an A with another A True 復制代碼

如上例,運行a1 == b1,首先調用a1__eq__()方法,對前后兩個值a1和b1比較,

同樣a1 == a1調用A的__eq__()方法

>>> b1 == b1 Comparing a B with another B True 復制代碼

調用b1的__eq__()方法.

>>> b1 == a1
Could not compare B against the other class
Comparing an A with a B
True
復制代碼

如上面代碼所示,b1和a1進行比較時,會首先調用B類中的__eq__()方法,即b1.__eq__(a1),得到控制台信息Could not compare B against the other class,返回NotImpletemented,這個常量告訴解釋器,對應的方法沒有在該類中實現,讓其嘗試調用a1的__eq__()方法,得到控制台信息Comparing an A with a B,結果為Ture.NorImplemented本身不會打斷程序的運行.

如果兩個對象的__eq__()都不能正確得出結果,解釋器會繼續嘗試調用兩個對象的__ne__()方法,知道獲取正常結果或異常.

對比NotImplementedError,NotImplementedError是一個異常類,表示類的抽象方法或者開發者定義的接口方法,沒有被重寫,而出現的異常,會打斷程序的執行,可以被捕獲.

class C: def interface(self): raise NotImplementedError('you have to overwrite this method') 復制代碼

Ellipsis

  • 和省略號文字字面"..."相同,特殊值主要與用戶定義的容器數據類型的擴展切片語法結合使用
  • 循環數據結構,一個符合對象包含只想自身的引用
  • 對其賦值不會拋錯

該對象的布爾值為真

>>> bool(Ellipsis) True 復制代碼

示例:

>>> def func(): Ellipsis >>> func() >>> def func(): ... >>> func() # 函數的調用結果為空 復制代碼

對自身的引用:

>>> array = [1, 2, 3] >>> array.append(array) >>> print(array) [1, 2, 3, [...]] 復制代碼

在numpy中被用來模擬數據結果:

>>> import numpy as np >>> l = np.linspace(1, 100, num=10000) >>> print(l) array([ 1. , 1.00990099, 1.01980198, ..., 99.98019802, 99.99009901, 100. ]) 復制代碼

__debug__

  • 是一個bool類型的常量,對其賦值會拋出語法錯誤
>>> __debug__ = False SyntaxError: assignment to keyword 復制代碼
  • 如果Python沒有使用-O選項啟動,此常量是真值,否則是假值。

site 模塊添加的常量

site 模塊(在啟動期間自動導入,除非給出 -S 命令行選項)將幾個常量添加到內置命名空間。 它們對交互式解釋器 shell 很有用,並且不應在程序中使用。

  • quit(code=None)

  • exit(code=None)

    quit()exit()表示退出python解釋器

    當打印此對象時,會打印出一條消息,例如“Use quit() or Ctrl-D (i.e. EOF) to exit”,當調用此對象時,將使用指定的退出代碼來引發 SystemExit

  • copyright

  • credits

    打印或調用的對象分別打印版權或作者的文本。

  • license

    當打印此對象時,會打印出一條消息“Type license() to see the full license text”,當調用此對象時,將以分頁形式顯示完整的許可證文本(每次顯示一屏)。
    最后總結  :不管你是為了Python就業還是興趣愛好,記住:項目開發經驗永遠是核心,如果你缺新項目練習或者沒有python精講教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,里面很多新教程項目,還可以跟老司機交流討教!
    本文的文字及圖片來源於網絡加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM