Python學習筆記(11) 更多內容

2022-02-23 11:58:14 字數 2591 閱讀 4173

在類中有一些特殊的方法具有特殊的意義,如__init__和__del__方法。通常,特殊方法都被用來模仿某個行為。如果你要為你的類使用x[key]這樣的索引操作,那麼你只需要實現__getitem__()方法即可。

名稱說明

__init__(self, ...)

這個方法在新建物件恰好要被返回使用之前被呼叫。

__del__(self)

恰好在物件要被刪除之前呼叫。

__str__(self)

在我們對物件使用print語句或是使用str()的時候呼叫。

__lt__(self, other)

當使用 小於 運算子(<)的時候呼叫。類似地,對於所有的運算子(+,>等等)都有特殊的方法。

__getitem__(self, key)

使用x[key]索引操作符的時候呼叫。

__len__(self)

對序列物件使用內建的len()函式的時候呼叫。

一般,每個語句塊都是通過它的縮排層次與其他語句塊分開的。然而,有時候你的語句塊只包含一句語句,那麼你可以在條件語句或迴圈語句的同一行指明它。

flag = true

if flag: print("yes")

雖然這樣做可以使你的程式變得小一些 ,但是除了檢驗錯誤之外我強烈建議你不要使用這種縮略方法。不使用它的乙個主要的理由是一旦你使用了恰當的縮排,你就可以很方便地新增乙個額外的語句。

通過列表綜合,可以從乙個已有的列表匯出乙個新的列表。例如,你有乙個數的列表,而你想要得到乙個對應的列表,使其中所有大於2的數都是原來的2倍。對於這種應用,列表綜合是最理想的方法。

listone = [2, 3, 4]

listtwo = [2 * i for i in listone if i > 2]

print(listtwo)

這段話的意思是:將listone中的所有大於2的數分別乘以2,得出乙個新的listtwo。執行結果:

[6, 8]

當要使函式接收元組或字典形式的引數的時候,有一種特殊的方法,它分別使用*和**字首。這種方法在函式需要獲取可變數量的引數的時候特別有用。

def powersum(power, *args):

'''return the sum of each argument raised to specified power.'''

total = 0

for i in args:

total += pow(i, power)

return total

由於在args變數前有*字首,所有多餘的函式引數都會作為乙個元組儲存在args中。如果使用的是**字首,多餘的引數則會被認為是乙個字典的鍵/值對。

lambda語句被用來建立新的函式物件,並且在執行時返回它們。

def make_repeater(n):

return lambda s : s * n

twice = make_repeater(2)

print(twice("ha"))

print(twice(5))

執行結果:

haha

這裡,我們使用了make_repeater函式在執行時建立新的函式物件,並且返回它。lambda語句用來建立函式物件。本質上,lambda需要乙個引數,後面僅跟單個表示式作為函式體,而表示式的值被這個新建的函式返回。注意,即便是print語句也不能用在lambda形式中,只能使用表示式。

exec語句用來執行儲存在字串或檔案中的python語句。例如,我們可以在執行時生成乙個包含python**的字串,然後使用exec語句執行這些語句。

exec("print('hello world')")

執行結果:

hello world

eval語句用來計算儲存在字串中的有效python表示式。

eval("2 * 3")

執行結果:

assert語句用來宣告某個條件是真的。例如,如果你非常確信某個你使用的列表中至少有乙個元素,而你想要檢驗這一點,並且在它非真的時候引發乙個錯誤,那麼assert語句是應用在這種情形下的理想語句。當assert語句失敗的時候,會引發乙個assertionerror。

>>> mylist = ["item"]

>>> assert(len(mylist) >= 1)

>>> mylist.pop()

'item'

>>> assert(len(mylist) >= 1)

traceback (most recent call last):

file "", line 1, in assert(len(mylist) >= 1)

assertionerror

repr函式用來取得物件的規範字串表示。注意,在大多數時候有eval(repr(object)) == object。

>>> i = 

>>> repr(i)

"['item']"

基本上,repr函式和反引號用來獲取物件的可列印的表示形式。你可以通過定義類的__repr__方法來控制你的物件在被repr函式呼叫的時候返回的內容。

Python 學習筆記(11)

1.arange arange 類似於python中的 range 函式,只不過返回的不是列表,而是陣列 arange start,stop none,step 1,dtype none 產生乙個在區間 start,stop 之間,以 step 為間隔的陣列,如果只輸入乙個引數,則預設從 0 開始,...

python學習筆記11(函式)

概述 在乙個完整的專案中,某些功能會反覆的使用。那麼會將功能封裝成函式,當我們要使用功能的時候直接呼叫函式即可 本質 函式就是對功能的封裝 優點 1 簡化 結構,增加了 的復用度 重複使用的程度 2 如果想修改某些功能或者除錯某個bug,只需要修改對應的函式即可 定義函式 格式 def 函式名 引數...

Python學習筆記11 函式

定義函式的時候,我們把引數的名字和位置確定下來,函式的介面定義就完成了。對於函式的呼叫者來說,只需要知道如何傳遞正確的引數,以及函式將返回什麼樣的值就夠了,函式內部的複雜邏輯被封裝起來,呼叫者無需了解。python的函式定義非常簡單,但靈活度卻非常大。除了正常定義的必選引數外,還可以使用預設引數 可...