Python學習筆記(十三)——進階語法

####傳遞元組
函數可以返回元組來實現傳遞多個數值
示例如下:

>>> def get_error_details():
... return (2, 'details')
...
>>> errnum, errstr = get_error_details()
>>> errnum
2
>>> errstr
'details'

其中接收參數的兩個變量errnum, errstr可以視爲一個含有兩個變量的元組
據此,在 Python 中交換兩個變量的最快方法是:

>>> a , b = 5, 8
>>> a, b
(5, 8)
>>> a, b = b, a
>>> a, b
(8, 5)

####特殊方法
可以通過在類中定義特殊方法來模擬一些內置行爲(類似運算符重載)
常用的特殊函數如下:

  • _init_(self, …)
    • 這一方法在新創建的對象被返回準備使用時被調用。
  • _del_(self)
    • 這一方法在對象被刪除之前調用(它的使用時機不可預測,所以避免使用它)
  • _str_(self)
  • 當我們使用 print 函數時,或 str() 被使用時就會被調用。
  • _lt_(self, other)
  • 當小於運算符(<)被使用時被調用。類似地,使用其它所有運算符(+、> 等等)時都會有特殊方法被調用。
  • _getitem_(self, key)
    • 使用 x[key] 索引操作時會被調用。
  • _len_(self)
  • 當針對序列對象使用內置 len() 函數時會被調用

####單語句塊
python中通過縮進來區分語句塊,如果一個語句塊只有一個語句,則可以在同一行使用,例如:

flag = True
if flag: print('Yes')

但是不推薦此種做法,原因是如果不小心縮進,可能造成錯誤
####Lambda 表達式
lambda表達式用來創建一個函數對象,相當於一個匿名的簡單函數
lambda函數結構簡單,只限於表達式作爲函數體,限制在一行以內
形式如下:
lambda 參數列表:表達式
可以參考:關於Python中的lambda,這可能是你見過的最完整的講解
可以將lambda函數賦值給一個變量,通過這個變量間接調用該lambda函數。
也可以將lambda函數賦值給一個函數, 可以覆蓋掉原來的函數內容
####列表推導
列表推導用於從一份現有的列表中得到一份新列表。通過for循環來篩選列表中符合要求的元素組成新列表。示例如下:

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

####在函數中接收元組與字典
可以分別使用 * 或 ** 作爲元組或字典的前綴,來使它們作爲一個參數爲函數所接收。示例:

def powersum(power, *args):
	'''Return the sum of each argument raised to the specified power.'''
	total = 0
	for i in args:
	total += pow(i, power)
	return total

>>> powersum(2, 3, 4)
25
>>> powersum(2, 10)
100

args 變量前添加了一個 * 前綴,函數的所有其它的額外參數都將傳遞到args 中,並作爲一個元組予以儲存。如果採用的是 ** 前綴,則額外的參數將被視爲字典的鍵值—值配對。
####assert 語句
assert 語句用以斷言(Assert)某事是真的。用來確保某些條件一定成立,不成i則拋出錯誤。
####裝飾器
裝飾器用來方便的對函數功能進行修改,本質上是一個Python函數,它可以讓其他函數在不需要做任何代碼變動的前提下增加額外功能,裝飾器的返回值也是一個函數對象。它經常用於有切面需求的場景,比如:插入日誌、性能測試、事務處理、緩存、權限校驗等場景。裝飾器是解決這類問題的絕佳設計,有了裝飾器,我們就可以抽離出大量與函數功能本身無關的雷同代碼並繼續重用。
格式如下:

def 裝飾器名稱(func):
	def 裝飾器函數(參數列表):
		函數體
		#一般都與func有關
	return 裝飾器函數
@裝飾器名稱(參數列表)
調用函數 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章