跟我讀python3文檔:017_關于自定義函數的更多信息(4.7. More on Defining Functions)上

貫穿始終的理念:別廢話宛逗,就是干坎匿!


往期回顧

  • 自定義函數
  • break
  • continue

文檔解讀

python3文檔第四小節(jié)鏈接地址:4.7. More on Defining Functions

本章主要講解4.7.1. Default Argument Values (默認參數值)4.7.2. Keyword Arguments(關鍵字參數)這兩個小節(jié)


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.

名詞解釋

  1. default value
    中文翻譯為:默認參數
    我們在之前章節(jié)說過替蔬,所謂形式參數就是用來賦值的變量。
    不過我們也提到了屎暇,這個變量可以有很多個承桥,關鍵看你需要用到幾個。

形式參數越多根悼,比如有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 = ' ')   #這里把默認值改為了空格券膀。
  1. arguments
    參數君纫。這個上面已經說了。

  2. 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( )函數鹉梨。

  1. ask_ok('Do you really want to quit?')
    因為第一個形式參數沒有默認值讳癌,所以我們必須給第一個參數傳入值。
  2. ask_ok('OK to overwrite the file?', 2)
    給第二個形式參數也傳入一個值存皂,看看運行結果和第一次有什么不同晌坤?
  3. ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
    給三個形式參數都傳值,看看會發(fā)生什么旦袋?

注意:我們在使用函數時骤菠,參數的類型是十分重要的,一定要注意字符串數字的區(qū)別疤孕。一個有引號商乎,一個沒有引號。
我們傳遞的參數與形式參數是一一對應的關系祭阀,參數之間用逗號分開鹉戚。

思考:
有沒有想過鲜戒,如果我不安順序傳值會怎樣?
想不出來不要緊崩瓤,重要的是養(yǎng)成思考的習慣袍啡。
學習編程,最重要的一點就是多思考~


4.7.2. Keyword Arguments

段落截热赐啊(二)

Functions can also be called using keyword arguments of the form kwarg=value.

名詞解釋

  1. kwarg=value
    這是一種展示形式境输,表示是一種賦值語句。就像我們上面那個事例代碼中的retries=4 一樣颖系。
    kwarg就是keyword arguments(關鍵字參數)的縮寫嗅剖。

段落大意

函數可以通過關鍵字參數調用。
其實理解起來很簡單嘁扼,就是在調用函數時信粮,把形式參數的名字也用上。
我們直接看例子趁啸。
依舊以調用ask_ok( )函數舉例:

  1. ask_ok(prompt = 'OK to overwrite the file?', retries = 2, reminder = 'Come on, only yes or no!')
    按順序填寫參數强缘,形式參數的名字也都寫上。并且用賦值語句的形式表現(xiàn)出來不傅。
  2. ask_ok('OK to overwrite the file?', retries = 2, reminder = 'Come on, only yes or no!')
    按順序填寫參數旅掂,只不過只寫了有默認值的形式參數的名字。
  3. ask_ok('OK to overwrite the file?',retries = 2)
    按順序填寫參數访娶,只不過只寫了一個有默認值的形式參數的名字商虐。
    但省略了第三個參數。因為第三個參數是有默認值崖疤,所以可以省略秘车。
  4. ask_ok('OK to overwrite the file?', 2, reminder = 'Come on, only yes or no!')
    按順序填寫參數,只不過只把第三個有默認值的形式參數的名字寫上了劫哼。
  5. ask_ok('OK to overwrite the file?', reminder = 'Come on, only yes or no!')
    不按順序填寫參數
    首先填寫“第一個”參數叮趴,
    之后填寫第三個參數,但是权烧,必須寫形參的名字

能從上面5個調用事例中總結出什么規(guī)律嗎疫向?
要想明白,什么時候可以省略形參豪嚎,什么時候必須寫形參搔驼,什么時候可以不按順序,什么時候必須按順序侈询。

:參數可以不按順序填寫舌涨,但是應注意以下兩點:

  1. 沒有用賦值語句表達的參數必須按順序寫在開頭。這個沒用賦值語句表達的參數叫位置參數扔字,因為你只能通過位置來判斷傳遞的值是要付給哪個形參的囊嘉。
    概括一下就是:位置參數必須寫在關鍵字參數之前温技。
  2. 后面不按順序填寫的參數,必須用賦值語句的形式寫出來扭粱。

思考題:
如果這樣調用參數可以嗎舵鳞?
ask_ok(prompt = 'OK to overwrite the file?', 2)
參考上面兩條規(guī)則思考下答案~


函數參數這一章的內容比較多,今天就先講這么多琢蛤。

我們在學習編程時蜓堕,學會自己思考,和自己解決問題要比編程本身更重要博其。
試試思考并解決下面的問題:
函數在調用時套才,如何不限制參數數量?
比如print函數慕淡,我們可以傳遞任意數量的字符串參數給他背伴。
就像下面這樣:
print('hello', 'world', '\n', 'hi', 'galipy', )

這是如何做到的?

試試自己通過搜索引擎或文檔找出答案~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末峰髓,一起剝皮案震驚了整個濱河市傻寂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌携兵,老刑警劉巖崎逃,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異眉孩,居然都是意外死亡,警方通過查閱死者的電腦和手機勒葱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門浪汪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凛虽,你說我怎么就攤上這事死遭。” “怎么了凯旋?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵呀潭,是天一觀的道長。 經常有香客問我至非,道長钠署,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任荒椭,我火速辦了婚禮谐鼎,結果婚禮上,老公的妹妹穿的比我還像新娘趣惠。我一直安慰自己狸棍,他們只是感情好身害,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著草戈,像睡著了一般塌鸯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唐片,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天丙猬,我揣著相機與錄音,去河邊找鬼牵触。 笑死淮悼,一個胖子當著我的面吹牛,可吹牛的內容都是我干的揽思。 我是一名探鬼主播袜腥,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钉汗!你這毒婦竟也來了羹令?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤损痰,失蹤者是張志新(化名)和其女友劉穎福侈,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體卢未,經...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡肪凛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辽社。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伟墙。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖滴铅,靈堂內的尸體忽然破棺而出戳葵,到底是詐尸還是另有隱情,我是刑警寧澤汉匙,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布拱烁,位于F島的核電站,受9級特大地震影響噩翠,放射性物質發(fā)生泄漏戏自。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一伤锚、第九天 我趴在偏房一處隱蔽的房頂上張望浦妄。 院中可真熱鬧,春花似錦、人聲如沸剂娄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阅懦。三九已至和二,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耳胎,已是汗流浹背惯吕。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怕午,地道東北人废登。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像郁惜,于是被迫代替她去往敵國和親堡距。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內容