Python學習——更多的Python內容

更多的Python內容

 

  • 特殊的方法

        在類中有一些特殊的方法具有特殊的意義,比如__init__和__del__方法,它們的重要性我們已經學習過了。
        一般說來,特殊的方法都被用來模仿某個行爲。例如,如果你想要爲你的類使用x[key]這樣的索引操作(就像列表和元組一樣),那麼你只需要實現__getitem__()方法就可以了。
下面這個表中列出了一些有用的特殊方法。如果你想要知道所有的特殊方法,你可以在《Python參考手冊》中找到一個龐大的列表。

名稱  說明
__init__(self,...) 這個方法在新建對象恰好要被返回使用之前被調用。
__del__(self) 恰好在對象要被刪除之前調用。
__str__(self) 在我們對對象使用print語句或是使用str()的時候調用。
__lt__(self,other) 當使用 小於 運算符(<)的時候調用。類似地,對於所有的運算符(+,>等等)都有特殊的方法。
__getitem__(self,key) 使用x[key]索引操作符的時候調用。
__len__(self) 對序列對象使用內建的len()函數的時候調用。

 

  • 單語句塊

        每一個語句塊是通過它的縮進層次與其它塊區分開來的。然而這在大多數情況下是正確的,但是並非100%的準確。如果你的語句塊只包含一句語句,那麼你可以在條件語句或循環語句的同一行指明它。
        就如你所看見的,單個語句被直接使用而不是作爲一個獨立的塊使用。雖然這樣做可以使你的程序變得小一些 ,但是除了檢驗錯誤之外我強烈建議你不要使用這種縮略方法。不使用它的一個主要的理由是一旦你使用了恰當的縮進,你就可以很方便地添加一個額外的語句。
        另外,注意在使用交互模式的Python解釋器的時候,它會通過恰當地改變提示符來幫助你輸入語句。

 

  • 列表綜合

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

listone = [2, 3, 4]
listtwo = [2*i for i in listone if i > 2]
print listone
print listtwo 

        輸出:

[2, 3, 4]
[6, 8]

        這裏我們爲滿足條件(if i > 2)的數指定了一個操作(2*i),從而導出一個新的列表。注意原來的列表並沒有發生變化。在很多時候,我們都是使用循環來處理列表中的每一個元素,而使用列表綜合可以用一種更加精確、簡潔、清楚的方法完成相同的工作。

  • 在函數中接收元組和列表

        當要使函數接收元組或字典形式的參數的時候,有一種特殊的方法,它分別使用*和**前綴。這種方法在函數需要獲取可變數量的參數的時候特別有用。
        在函數中接收元組和列表的例子如下:

def powersum(power, *args):
    total = 0
    for i in args:
        total += pow(i, power)
    return total

sum1 = powersum(2, 3, 4)
print 'sum1=%s' % sum1
sum2 = powersum(2, 10)
print 'sum2=%s' % sum2

        輸出:

sum1=25
sum2=100

        由於在args變量前有*前綴,所有多餘的函數參數都會作爲一個元組存儲在args中。如果使用的是**前綴,多餘的參數則會被認爲是一個字典的鍵/值對。

  • lambda形式

        lambda語句被用來創建新的函數對象,並且在運行時返回它們。
        使用lambda形式例子如下:

def make_repeater(n):
    return lambda s: s*n
twice = make_repeater(2)
print twice('word')
print twice(5) 

        輸出:

wordword
10

        這裏,我們使用了make_repeater函數在運行時創建新的函數對象,並且返回它。lambda語句用來創建函數對象。本質上,lambda需要一個參數,後面僅跟單個表達式作爲函數體,而表達式的值被這個新建的函數返回。注意,即便是print語句也不能用在lambda形式中,只能使用表達式。

  • exec和eval語句

        exec語句用來執行儲存在字符串或文件中的Python語句。例如,我們可以在運行時生成一個包含Python代碼的字符串,然後使用exec語句執行這些語句。
下面是一個簡單的例子:

exec 'print "Hello World"'

        輸出:

Hello World 

        eval語句用來計算存儲在字符串中的有效Python表達式。
        下面是一個簡單的例子:

eval('2*3')

        輸出:

6 
  • assert語句

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

mylist = ['item']
print mylist
assert len(mylist) >= 1
mylist.pop()
print mylist
assert len(mylist) >= 1

        輸出:

['item']
[]
Traceback (most recent call last):
  File "D:\MyEclipse10\Workspaces\HelloWord\src\others\assertTest.py", line 12, in <module>
    assert len(mylist) >= 1
AssertionError

 

  • repr函數

        repr函數用來取得對象的規範字符串表示。反引號(也稱轉換符)可以完成相同的功能。注意,在大多數時候有eval(repr(object)) == object。
        repr函數使用例子如下:

i = []
i.append('item')
print i
print repr(i)

        輸出:

['item']
['item']

        基本上,repr函數和反引號用來獲取對象的可打印的表示形式。你可以通過定義類的__repr__

方法來控制你的對象在被repr函數調用的時候返回的內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章