定義一個函數很是簡單,可是怎麼定義一個函數,須要什麼參數,怎麼去調用倒是咱們須要去思考的問題。
java
如同大多數語言同樣(如 Java),Python 也提供了多種參數的設定(如:默認值參數、關鍵字參數、形參等)。使用這些參數定義出來的代碼,可讓咱們適應不一樣的開放場景,也能簡化咱們的代碼開發工做。python
咱們建立一個函數,定義參數中一個或多個賦予默認值後,咱們可使用比容許的更少的參數去調用此函數,舉個例子(注意:如下代碼都使用python3.7版本):git
def def_param_fun(prompt, retries=4, reminder='Please try again!'): while True: ok = input(prompt) if ok in ('y', 'ye', 'yes'): return True if ok in ('n', 'no', 'nop', 'nope'): return False retries = retries - 1 if retries < 0: raise ValueError('invalid user response') print(reminder)# 咱們能夠以下進行調用def_param_fun('Do you really want to quit?')
def_param_fun('Do you really want to quit?', 2)
def_param_fun('Do you really want to quit?', 2, 'Please, yes or no!')
如上所示,咱們可使用一個或多個參數去調用此函數,咱們實際生產中,不少狀況下會賦予函數參數默認值的情形,所以,合理使用此種參數形式能夠簡化咱們不少工做量。github
重要:使用默認值參數時,若是咱們的默認值是一個可變對象時,咱們調用函數可能出現不符合咱們預期的結果。以下:數據結構
def f(a, l=[]): l.append(a) return l# 此時調用函數print(f(1))print(f(2))print(f(3))
# 返回值# [1]# [1, 2]# [1, 2, 3]
這是因爲函數在初始化時,默認值只會執行一次,因此在默認值爲可變對象(列表、字典以及大多數類實例),咱們能夠以下操做:app
def f(a, l=None): if l is None: l = [] l.append(a) return l
# 再次調用函數print(f(1))print(f(2))print(f(3))
# 返回值# [1]# [2]# [3]
可變參數也就是咱們對於函數中定義的參數是能夠一個或多個能夠變化的,其中 *args表明着能夠傳入一個list或者tuple, **args表明着能夠傳入一個dict。舉個例子:ide
def variable_fun(kind, *arguments, **keywords): print("friend : ", kind, ";") print("-" * 40) for arg in arguments: print(arg) print("-" * 40) for kw in keywords: print(kw, ":", keywords[kw]) # 函數調用variable_fun("xiaoming", "hello xiaoming", "nice to meet you!", mother="xiaoma", father="xiaoba", son="see you") # 輸出結果first arg: xiaoming ...----------------------------------------hello nice to meet you!----------------------------------------mother : xiaomafather : xiaobason : see you
咱們還可使用下面的方式進行調用,獲得上面相同的結果:函數
list01 = ["hello xiaoming", "nice to meet you!"]dict01 = {'mother': 'xiaoma', 'father': 'xiaoba', 'son': 'see you'}variable_fun("xiaoming", *list01, **dict01)
以上實際上是python的解包操做,和java相似。ui
關鍵字參數容許你調用函數時傳入0個或任意個含參數名的參數,這樣可讓咱們靈活的去進行參數的調用。舉個例子:spa
# 借用官網例子def key_fun(voltage, state='a stiff', action='voom', type='Norwegian Blue'): print("-- This key_fun wouldn't", action, end=' ') print("if you put", voltage, "volts through it.") print("-- Lovely plumage, the", type) print("-- It's", state, "!")
# 函數調用 key_fun(1000) # 1 positional argumentkey_fun(voltage=1000) # 1 keyword argumentkey_fun(voltage=1000000, action='VOOOOOM') # 2 keyword argumentskey_fun(action='VOOOOOM', voltage=1000000) # 2 keyword argumentskey_fun('a million', 'bereft of life', 'jump') # 3 positional argumentskey_fun('a thousand', state='pushing up the daisies') # 1 positional, 1 keyword
注意不能夠重複傳值,不然會報以下錯誤:
# TypeError: key_fun() got multiple values for argument 'voltage'key_fun(100, voltage=1000) # error
本節主要簡單的介紹了python中函數參數的使用,設定的方式能夠配合使用,可是也不要過多的去設計,不然會形成函數的可讀性變的不好。
python中函數的參數設定[1]
[1]
python中函數的參數設定: https://github.com/JustDoPython/python-100-day/tree/master/day-005
系列文章