編程求一個正整數有幾位,最快的方法是什么?
It很簡單。It一句話就搞定了。首先把正整數轉換成字符串,然后求字符串的長度。如下所示:
l
求tan怎么來?
有很多方法可以找到譚。以下是尋找譚的一些常用方法:
使用三角函數表:可以使用三角函數表查詢tan的值。
使用計算器:可以使用帶三角函數的計算器,輸入角度值,按tan鍵,求tan的值。
使用公式:tan的值等于對邊的長度與斜邊的長度之比。譚燦的價值是根據這個公式手工計算出來的。
使用編程語言:可以使用編程語言,比如Python,Java,調用內置的三角函數庫來求tan的值。
如何編寫Pythonic對象?
那就說清楚。
在我們開始探索如何編寫pythonic對象之前,讓讓我們弄清楚這個術語的意思。It這不是關于PEP8和遵守它的規則來編寫漂亮的Python代碼。Its關于寫對象,最大限度的使用Python數據模型的概念,所以可以像Python標準庫對象一樣自然的使用。
這個想法是將PythonADN注入到我們的用戶定義對象中,并使它們變異,表現為本地Python對象。為此,我們將實現一個vector類來表示多維向量。
下面的代碼用最小的實現表示Vector類。矢量由它的坐標來表示。
向量坐標存儲在浮點數組中;注意,數組中的元素類型被強制設置為數組類型"d"浮點運算。我們可以將任何iterable傳遞給Vector的構造函數,因為array的構造函數是作為內部容器來接受任何iterable(tuple,list等。).
當我們打印一個vector對象本身時,注意我們得到的是它的引用(CPython的內存地址)而不是它的坐標。讓s通過在類中實現_str_method來改變它,讓它有更友好的輸出,比如(x,y,z,…)。
當我們打印一個vector對象本身時,注意我們得到的是它的引用(CPython的內存地址)而不是它的坐標。讓通過在類中實現_str_method來改變它,使它有一個更友好的輸出,比如(x,y,z,…)注意,我們使用了從數組創建的元組的字符串表示。
__str_不是Python數據模型用來打印對象的唯一方法;_repr_還用于提供更加面向調試的對象表示形式,可以使用eval函數對其進行評估以創建相同的對象。
在前面的代碼塊中,請注意當與eval一起使用時,repr的返回值允許我們創建一個新的vector。reprlib的使用允許我們在數組中包含太多的元素。唐在的情況下,不要打印數組的所有元素,就像vectorv2一樣使用它。
Python迭代為了確保我們能夠循環遍歷向量并對其進行解包,我們需要使它們迭代。為此,我們必須在我們的類中添加_iter_method。
Python長度計算為了通過將對象分配給len()函數來獲得矢量中的坐標數,必須將_Len_method添加到該類中。
應用于兩個矢量對象的Python比較運算符將比較它們的引用,而無需調整類來支持比較。要改變這種行為,您必須實現"情商與智商方法。在我們的例子中,兩個向量相等當且僅當它們具有相同的坐標和相同的順序。
讓讓我們花點時間來分析這個新方法:通過調用len()函數來使用len方法。
通過將self和其他參數傳遞給zip函數來使用iter方法,該函數接受iterable作為參數。
Pythonic的絕對值
對于此示例,我們使用__abs__方法返回由以下表達式定義的向量的歐幾里德范數:
Pythonic式布爾求值對于vector類的當前實現,在計算vector的布爾值時,我們有以下行為。
在我們的類中,如果沒有bool方法,那么對bool()函數的調用就會引用這個方法。如果長度等于0,則對象的計算結果為false,否則為true。
讓讓我們通過實現一個方法來改變這種行為。如果向量的歐幾里德范數不等于0,讓它返回True,否則返回false。
Pythonic切片
Python中的切片旨在通過指示要檢索的元素的索引或通過指示切片來從初始集中獲取子集。
一個對象的切片返回同類型的另一個對象。getitem方法是要更新的方法,使vector對象具有這種能力。
注意,通過使用切片,返回的對象也是一個vector對象。
結論我們在本教程中實現的Dunder方法不是唯一可以使用的方法。其他的,比如字節、散列、getatrr和格式,可以用來改變用戶定義對象的行為。這些方法并不是每次定義一個新的類就實現,這要看需求,這是Python數據模型的優勢。
歡迎關注