第3章 函式3.2.4 匿名函式
匿名函式是一種通過單個語句生成函式的方式,其結果本身就是是返回值,不需要def定 和return返回,呼叫更加方便。匿名函式使用lambda
關鍵字定義,表達「我們宣告乙個匿名函式的意思」。
其通用的格式為:
《名稱》
=lambda
《引數1..
. 引數n> : 《表示式》
看如下例子:
>>
>
def short_function(x)
:return x *
2>>
> short_function(5)
10
使用匿名函式則可以簡化**,可以寫成:
>>
>equiv =
lambda x : x *
2>>
>equiv(5)
10
同時,匿名函式可以定義多個引數:
>>
>function2 =
lambda x, y, z : x + y + z
>>
>function2(1,
2,3)
6
匿名函式在資料分析中非常方便,因為在很多案例中資料變形函式都可以作為其他函式的引數,最常用的是將匿名函式作為sort
函式的key
,是資料排序更加符合我們的要求:
我們按字串長短對列表中的字串進行排序:
>>
>strings =
['ds'
,'ekja'
,'poweak'
,'dadio**'
,'pzqidade'
,'osssssqknjd'
]>>
>strings.sort(key =
lambda x :
len(x)
)>>
>strings
['ds'
,'ekja'
,'poweak'
,'dadio**'
,'pzqidade'
,'osssssqknjd'
]
我們還可以按照字母的數量進行排序:
>>
>strings =
['abbbb'
,'abc'
,'aaaaaaa'
,'jkiu'
,'poikpo'
,'ossdqqknjd'
]>>
>strings.sort(key =
lambda x :
len(
set(
list
(x))))
>>
>strings
['aaaaaaa'
,'abbbb'
,'abc'
,'jkiu'
,'poikpo'
,'ossdqqknjd'
]
通過將匿名函式傳遞給key
,我們可以做出更多的排序方式。
3.2.5 柯里化:部分引數應用
柯里化石電腦科學的術語,是以一位數學家的名字命名的,所以這個名字並沒有明確的含義。它表示通過部分引數應用的方式從已有的函式中衍生出新的函式,看例子很容易理解。
有乙個簡單的將兩個數字相加的函式:
>>
>
def add_numbers(x, y):.
..return x + y
通過這個函式衍生出乙個只有乙個變數的新函式,add_five,給引數加上5:
add_five =
lambda y : add_numbers(
5, y)
這種情況下,第二個引數對於函式add_numbers就是柯里化了,相當於我們定義了乙個新函式,而新函式呼叫了已存在的函式。
python中內建的functools
模組可以使用pratial
函式簡化這種處理:
>>
>
from functools import partial
>>
>add_six = partial(add_numbers,6)
>>
>add_six(7)
13
3.2.6 迭代器與生成器
迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。我們使用的字串、列表與元組都是可迭代物件。
在 python 中,使用了yield
的函式被稱為生成器(generator)
。跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是乙個迭代器。而且在實際呼叫生成器時,只是生成了乙個可迭代物件,只有真正請求生成器中的元素時,它才會執行**。
我們通過例子來直觀感受:
首先定義乙個生成列表的普通函式:
>>
>
def c_list(n)
:>>
>
return
list
(range
(n))
#該函式可以直接使用
>>
>c_list(10)
[0,1
,2,3
,4,5
,6,7
,8,9
]
如果使用yiled
生成乙個生成器函式:
>>
>
def d_list(n)
:>>
>
yield
list
(range
(n))
#直接呼叫,返回的是乙個生成器,**沒有立即執行
>>
>d_list(10)
>
#列印生成器中的內容
>>
>
for x in d_list(10)
:print
(x)[0,
1,2,
3,4,
5,6,
7,8,
9]
注意到這裡直接返回了乙個列表,而我們知道如果對列表進行遍歷的話,返回的應該是每個元素的值,這也說明了生成器並不是乙個簡單的可迭代列表形式。
因為生成器只有在具體訪問的時候才會返回具體的值,所以生成器相對於迭代器的一大優點便是其占用空間小。
與列表推導式相對相應的是生成器表示式,只需要將列表解析式的中括號換成()即可。
gen =
( x **
2for x in
range
(100
))
總的來數,生成器表示式是對記憶體空間的優化。他們不需要像方括號的列表解析一樣,一次構造出整個結果列表。他們執行起來比列表解析式可能稍慢一些,因此他們對於非常大的結果集合運算是最優的選擇。列表解析式最快,生成器表示式最省空間。
微生物基因組上一節分享了關於尋找基因的內容,本節分享幾個微生物基因組資源,一些可用於基因注釋:
1, 蛋白直系同源簇(cog):全基因組蛋白的種類分類,每個cog由起源同一保守域單個蛋白質或並繫同源蛋白群組成。
2,高質量自動和人工注釋的微生物蛋白質組(hamap):可對微生物基因組測序產生的蛋白質序列進行自動注釋。
3,京都基因和基因組百科全書(kegg):可根據相互作用的分子或者基因組成資訊途徑。
4,微生物基因組資料庫(mbgd):從不同方面為比較基因組學提供方便,如識別直系同源序列,收集並分析同源序列和蛋白膜體分析。
5,國立生物工程資訊中心(ncbi)。
6,鮑森轉運蛋白頁(paulsen tranxporter page):比較基因組間膜轉運系統。
7,rast。也是注釋基因組的。
利用python進行資料分析
目錄 10 minutes to pandas 翻譯 pandas中loc iloc ix的區別 pandas dropna函式 pandas中dataframe的stack unstack 和pivot 方法的對比 pandas中關於set index和reset index的用法 python匿...
利用python進行資料分析
利用python進行資料分析,需要了解一些基本的方法,比如掌握回歸分析的方法,通過線性回歸和邏輯回歸,其實你就可以對大多數的資料進行回歸分析,並得出相對精確地結論。這部分需要掌握的知識點如下 回歸分析 線性回歸 邏輯回歸 基本的分類演算法 決策樹 隨機森林 樸素貝葉斯 基本的聚類演算法 k mean...
《利用Python進行資料分析》筆記
之前的筆記一直記在我的印象筆記上,今天突然想到 不如直接記在部落格上,印象筆記只記錄生活上的事,這樣也分工明確一些。同時也能和大家分享,也許可以幫助到別人。由於這個學習筆記系列主要還是用於個人學習總結用,所以會比較凌亂,望大家理解!2017 9 23 p151 pd.dropna thresh 其中...