python定义匿名函数关键字_python语言的匿名函数、7种可调用对象以及用户定义的可调用类型...
匿名函數
在python表達式中,用來創建匿名函數的是lambda關鍵字。
lambda函數在python語言中只能使用純表達式,也就是說,在lambda函數體中不能使用while和try,當然也不能賦值等python語句。
實際應用過程中,lambda函數最適合在參數列表中使用。下面我們來看胰腺癌例子,使用lambda函數表達式反轉拼寫,然后依據發轉的結果對其進行排序,具體如下所示:
那么,是不是意味著lambda函數很受歡迎,應用范圍很廣呢?其實不然。除了向上述的例子中那樣,lambda函數作為參數傳給高階函數外,python中很少使用匿名函數。很少使用的原因是lambda函數不易閱讀和不易撰寫。
可調用對象
既然提到可調用對象,我們就需要判斷什么樣的對象是可調用的,如何進行判斷呢?
判斷對象是否可調用可以使用python內置的callable()函數。
python數據模型文檔中給出了7種可調用對象,具體如下:
1.用戶定義的函數
使用def語句創建函數
使用lambda表達式創建函數
2.內置函數
使用C語言實現的函數,例如len或time.strftime。
3.內置方法
使用C語言實現的方法,如dict.get。
4.方法
在類的定義體中定義的函數。
5.類
定義類我們使用的是class,調用類就相當于調用函數。
6.類的實例
如果類定義類__call__方法,則它的實例可以作為函數進行調用。
7.生成器函數
使用yield關鍵字的函數或方法,而調用生成器函數返回的是生成器對象。
用戶定義的可調用類型
除了python函數是真正的對象外,任何python對象都可以像函數一樣表現。因此,只需要實現實例方法__call__。
接下來,我們來看下如何定義可調用類型。
In [45]: import random
In [46]: class B:
...: def __init__(self,items):
...: self._items=list(items)
...: random.shuffle(self._items)
...:
In [47]: class B:
...: def __init__(self,items):
...: self._items=list(items)
...: random.shuffle(self._items)
...: def pick(self):
...: try:
...: return self._items.pop()
...: except IndexError:
...: raise LookupError('pick from empty B')
...: def __call__(self):
...: return self.pick()
...:
In [48]: b=B(range(6))
In [49]: b.pick()
Out[49]: 3
In [50]: b()
Out[50]: 1
In [51]: callable(b)
Out[51]: True
如上代碼所示,最后使用callabel方法判斷了對象b是否可調用,返回的結果是True,即b是可調用對象。
總結
以上是生活随笔為你收集整理的python定义匿名函数关键字_python语言的匿名函数、7种可调用对象以及用户定义的可调用类型...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于python技术的自动化运维是干嘛的
- 下一篇: python优先级排序_Python实现