歡迎關注」生信修煉手冊」!
python中的內置函數提供了基礎功能,在實際開發中,我們需要將這些基礎功能進行搭配組合,來有效解決我們的問題。如何將我們自己構建的代碼作為一個可復用的工具,最基本的方法就是寫成函數。通過函數可以減少代碼冗餘,提高編碼效率。在python中函數的基本定義如下
>>> def hello():... print("hello world!")...>>>>>> a = hello()hello world!>>> type(a)<class 'NoneType'>用def關鍵詞來聲明一個函數,函數有幾個構成元素,函數名稱,比如這裡的hello;參數列表,圓括號裡的內容,上述代碼較為簡單,不需要傳入參數,所以圓括號裡為空; 返回值,可以看到,沒有顯示聲明的情況下,返回值為None。需要注意,在python中,函數在調用前必須先聲明,這一點和perl不同。
通過函數名稱加參數的形式,可以調用函數。在傳遞參數時,有以下兩種方式
示意如下
>>> def print_info(name, age):... return(f'Name:{name} Age:{age}')...
>>> print_info('Andy', 24)'Name:Andy Age:24'>>> print_info(24, 'Andy')'Name:24 Age:Andy'位置傳參的好處是我們不用寫參數名稱了,比較省事,但是局限就在於,必須按照參數定義的順序依次傳入,不可亂序。
2. 按照參數名
示意如下
>>> print_info(age = 24, name = 'Andy')'Name:Andy Age:24'
>>>print_info(name = 'Andy',age = 24)'Name:Andy Age:24'通過變量名傳參時,程序會按照變量名賦值給指定參數,不用擔心順序的問題。以上只是最基本的示例,關於函數的參數,還有以下幾種進階用法
1. 默認參數
在函數定義時,可以給參數賦值,這個值就是參數的默認值,寫法如下
>>> def print_info(name, age = 24):... return(f'Name:{name} Age:{age}')需要注意的是,擁有默認值的參數必須位於沒有默認值的參數之後,如果位於之前,會報錯
>>> def print_info(name = 'Andy', age):... return(f'Name:{name} Age:{age}')... File "<stdin>", line 1SyntaxError: non-default argument follows default argument默認參數的好處是顯而易見的,在調用時,如果你需要傳入的值和默認值相同,就可以省略不用寫,如果不同,再傳入指定值也可以,示意如下
>>> print_info('Andy')'Name:Andy Age:24'
>>> print_info('Andy', 25)'Name:Andy Age:25'2. 可變參數
print作為學習python接觸的第一個函數,可以傳入任意個參數,示意如下
>>> print(1,2)1 2
>>> print(1,2,3)1 2 3
>>> print(1,2,3,4)1 2 3 4實現這個方式的技巧就是可變參數,可變參數通過一個`*`星號加參數名的方式進行定義,寫法如下
>>> def print_info(name, age, *friends):... print(f'Name:{name} Age:{age}')... for people in friends:... print(people)...在調用時,可以傳入任意多個值
>>> print_info('Andy', 24, 'Tom', 'Jack')Name:Andy Age:24TomJack
>>> print_info('Andy', 24, 'Tom', 'Jack', 'Rose')Name:Andy Age:24TomJackRose注意,可變參數的名稱只有函數定義時有用,在函數調用時,不可以加參數名稱。
3. 關鍵字參數
可變參數的值為列表,而關鍵字參數的值為字典,通過兩個`*`星號加參數名的形式進行定義,寫法如下
>>> def print_info(name, age, **friends):... print(f'Name:{name} Age:{age}')... for k,v in friends.items():... print(f'{k}:{v}')
>>> print_info('Andy', 24, mother = 'Rose', father ='Jack')Name:Andy Age:24mother:Rosefather:Jack
>>> print_info('Andy', 24, mother = 'Rose', father ='Jack', uncle = "Tom")Name:Andy Age:24mother:Rosefather:Jackuncle:Tom4. 命名關鍵字參數
關鍵字參數功能強大,但是太過於自由,可以傳入任意的數據,而命名關鍵字參數是對關鍵字參數的限定,在函數定義時,限定好允許傳入的參數名, 用`*`星號分隔,在星號的後面定義命名關鍵字參數,直接寫允許接受的參數名稱即可,寫法如下
>>> def print_info(name, age, *, mother, father):... print(f'Name:{name} Age:{age}')... print(f'Mother:{mother} Father:{father}')...>>> print_info('Andy', 24, mother = 'Rose', father = 'Jack')Name:Andy Age:24Mother:Rose Father:Jack在函數中已經有一個可變參數的情況下,命名關鍵字參數的`*`星號可以省略
def print_info(name, age, *friends, mother, father)上述各種形式的參數可以進行組合,但是組合時需要注意順序,從頭開始,依次為位置參數,默認參數,可變參數,命名關鍵字參數, 關鍵字參數。
原創不易,歡迎收藏,點讚,轉發!生信知識浩瀚如海,在生信學習的道路上,讓我們一起並肩作戰!本公眾號深耕耘生信領域多年,具有豐富的數據分析經驗,致力於提供真正有價值的數據分析服務,擅長個性化分析,歡迎有需要的老師和同學前來諮詢。轉發本文至朋友圈,後臺私信截圖即可加入生信交流群,和小夥伴一起學習交流。
掃描下方二維碼,關注我們,解鎖更多精彩內容!