- 本教程為python3文檔解讀
- 本教程面向完全型小白,只要你會在電腦上打字,那你就可以看懂。
- 參考視頻觀看,味道更加:https://space.bilibili.com/186584185/#!/video
- 建議優先閱讀本系列的《編程的本質》這一章節。
- 推薦閱讀:《跟我讀python3文檔:016_帶你手撕程序,展現一個函數如何從思路到實現》
貫穿始終的理念:別廢話,就是干!
往期回顧:
- 自定義函數
- break
- continue
文檔解讀
python3文檔第四小節鏈接地址:4.7. More on Defining Functions
本章主要講解4.7.1. Default Argument Values (默認參數值)、4.7.2. Keyword Arguments(關鍵字參數)這兩個小節
4.7.1. Default Argument Values
段落截取(一)
the most useful form is to specify a default value for one or more arguments. This creates a function that can be called with fewer arguments than it is defined to allow.
名詞解釋
- default value
中文翻譯為:默認參數
我們在之前章節說過,所謂形式參數就是用來賦值的變量。
不過我們也提到了,這個變量可以有很多個,關鍵看你需要用到幾個。
形式參數越多,比如有10個。我們在使用該函數時,要賦的值也越多。如果我們每次都要給每一個形式參數賦值,那么這個函數用起來豈不是很麻煩?
所以,有人想了一個辦法。
我們在編寫函數時,提前給這些變量賦好值,需要改動哪個,在單獨改動不就好了。而這個賦好的值就是默認參數(default value)
比如我們看print語句,(還記得《跟我讀python3文檔:015_自學python編程,你需要掌握3個技巧》這期,我們講的help( )函數嗎?)
>>> help(print)
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
他有一個形式參數end,他的默認值是:\n 。(\n是轉義字符,相當于換行的意思)
這樣,我們每次調用print時,就能自動換行。而不用給每一個形式參數賦值。
如果不想換行,只要改掉默認值就行了。
比如像下面這樣:
print('hello,咖喱py', end = ' ') #這里把默認值改為了空格。
arguments
參數。這個上面已經說了。defined
定義
在這里就是指我們定義了多少形式參數。
段落大意
通過給形式參數設定默認值,可以讓你在調用函數時,少寫很多東西。
為了更明確的講解參數默認值,我們下面用實際代碼演示。
def ask_ok(prompt, retries=4, reminder='Please try again!'):
while True:
ok = input('請輸入yes或no: ')
if ok in ('y', 'ye', 'yes'):
return True
if ok in ('n', 'no', 'nop', 'nope'):
return False
retries = retries - 1
if retries < 0:
quit()
print(prompt, reminder)
知識點講解:
- input( ) 函數
之前講解過,它可以得到鍵盤輸入值。而他的參數是字符串提示語句。 - 關鍵字 in
在for語句中,它的作用是遍歷列表。
在其他地方,它的作用是判斷in左邊的值在不在in右邊的值里。 - raise關鍵字
文檔中用的是raise,但問了方便你們理解,我用quite代替了。你只要暫時知道,raise的作用是中斷程序,并給出錯誤信息就可以了。
等我們講到錯誤處理時,在深入講解。
接著,我們按照文檔的提示,試試使用不同個數參數來調用ask_ok( )函數。
- ask_ok('Do you really want to quit?')
因為第一個形式參數沒有默認值,所以我們必須給第一個參數傳入值。 - ask_ok('OK to overwrite the file?', 2)
給第二個形式參數也傳入一個值,看看運行結果和第一次有什么不同? - ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
給三個形式參數都傳值,看看會發生什么?
注意:我們在使用函數時,參數的類型是十分重要的,一定要注意字符串與數字的區別。一個有引號,一個沒有引號。
我們傳遞的參數與形式參數是一一對應的關系,參數之間用逗號分開。
思考:
有沒有想過,如果我不安順序傳值會怎樣?
想不出來不要緊,重要的是養成思考的習慣。
學習編程,最重要的一點就是多思考~
4.7.2. Keyword Arguments
段落截取(二)
Functions can also be called using keyword arguments of the form kwarg=value.
名詞解釋
- kwarg=value
這是一種展示形式,表示是一種賦值語句。就像我們上面那個事例代碼中的retries=4 一樣。
kwarg就是keyword arguments(關鍵字參數)的縮寫。
段落大意
函數可以通過關鍵字參數調用。
其實理解起來很簡單,就是在調用函數時,把形式參數的名字也用上。
我們直接看例子。
依舊以調用ask_ok( )函數舉例:
- ask_ok(prompt = 'OK to overwrite the file?', retries = 2, reminder = 'Come on, only yes or no!')
按順序填寫參數,形式參數的名字也都寫上。并且用賦值語句的形式表現出來。 - ask_ok('OK to overwrite the file?', retries = 2, reminder = 'Come on, only yes or no!')
按順序填寫參數,只不過只寫了有默認值的形式參數的名字。 - ask_ok('OK to overwrite the file?',retries = 2)
按順序填寫參數,只不過只寫了一個有默認值的形式參數的名字。
但省略了第三個參數。因為第三個參數是有默認值,所以可以省略。 - ask_ok('OK to overwrite the file?', 2, reminder = 'Come on, only yes or no!')
按順序填寫參數,只不過只把第三個有默認值的形式參數的名字寫上了。 - ask_ok('OK to overwrite the file?', reminder = 'Come on, only yes or no!')
不按順序填寫參數
首先填寫“第一個”參數,
之后填寫第三個參數,但是,必須寫形參的名字
能從上面5個調用事例中總結出什么規律嗎?
要想明白,什么時候可以省略形參,什么時候必須寫形參,什么時候可以不按順序,什么時候必須按順序。
答:參數可以不按順序填寫,但是應注意以下兩點:
- 沒有用賦值語句表達的參數必須按順序寫在開頭。這個沒用賦值語句表達的參數叫位置參數,因為你只能通過位置來判斷傳遞的值是要付給哪個形參的。
概括一下就是:位置參數必須寫在關鍵字參數之前。 - 后面不按順序填寫的參數,必須用賦值語句的形式寫出來。
思考題:
如果這樣調用參數可以嗎?
ask_ok(prompt = 'OK to overwrite the file?', 2)
參考上面兩條規則思考下答案~
函數參數這一章的內容比較多,今天就先講這么多。
我們在學習編程時,學會自己思考,和自己解決問題要比編程本身更重要。
試試思考并解決下面的問題:
函數在調用時,如何不限制參數數量?
比如print函數,我們可以傳遞任意數量的字符串參數給他。
就像下面這樣:
print('hello', 'world', '\n', 'hi', 'galipy', )
這是如何做到的?
試試自己通過搜索引擎或文檔找出答案~