14.程序編程進(jìn)階:函數(shù)的參數(shù)

接上一講名秀,這節(jié)我們專門介紹python函數(shù)的參數(shù)處理

本節(jié)主要內(nèi)容

  • 函數(shù)的形式參數(shù)和實(shí)際參數(shù)
  • 函數(shù)的參數(shù)定義規(guī)則
  • 函數(shù)參數(shù)的默認(rèn)值
  • 函數(shù)的可變參數(shù)
  • 函數(shù)的關(guān)鍵字參數(shù)
  • 函數(shù)的命名關(guān)鍵字參數(shù)

1.3. 函數(shù)的參數(shù)

1.3.1 函數(shù)的形式參數(shù)和實(shí)際參數(shù)

函數(shù)的參數(shù)主要會(huì)涉及到兩個(gè)概念:形式參數(shù)、實(shí)際參數(shù)

  • 形式參數(shù):其實(shí)就是定義函數(shù)時(shí)肚菠,函數(shù)括號(hào)中的變量揩环,形式參數(shù)的意義是當(dāng)前函數(shù)如果要被調(diào)用執(zhí)行诉探,就必須讓函數(shù)接收括號(hào)中定好的參數(shù)才能正常執(zhí)行先较,就是形式上需要這些數(shù)據(jù)才能執(zhí)行函數(shù),所以稱為形式參數(shù)
  • 實(shí)際參數(shù):實(shí)際參數(shù)是我們?cè)谕ㄟ^函數(shù)名稱調(diào)用函數(shù)時(shí)卵皂,在括號(hào)中傳遞的真實(shí)數(shù)據(jù)秩铆;實(shí)際傳遞給函數(shù)用于執(zhí)行的數(shù)據(jù),稱為實(shí)際參數(shù)
    形式參數(shù)和實(shí)際參數(shù)的具體關(guān)系如下圖所示:


    形式參數(shù)和實(shí)際參數(shù)的關(guān)系
1.3.2. 函數(shù)的參數(shù)定義規(guī)則

函數(shù)通過def進(jìn)行定義灯变,用于執(zhí)行一個(gè)功能殴玛,一個(gè)函數(shù),可以需要參數(shù)添祸,也可以不需要參數(shù)族阅。
類似我們現(xiàn)實(shí)生活,執(zhí)行一個(gè)功能就是做一件事情膝捞,做這件事情需要的資源就是參數(shù)坦刀,去做一件事情,有些需要資源蔬咬,有些是不需要資源的鲤遥。

所以!
規(guī)則1:如果我們的程序中出現(xiàn)了一部分功能代碼重復(fù)執(zhí)行林艘,就需要封裝一個(gè)函數(shù)來減少代碼的重復(fù)量
規(guī)則2:根據(jù)代碼執(zhí)行是否需要其他額外的數(shù)據(jù)盖奈,需要額外的幾個(gè)數(shù)據(jù)就定義幾個(gè)參數(shù),不需要額外的數(shù)據(jù)就不定義參數(shù)
規(guī)則3:實(shí)際參數(shù)可以傳遞任意對(duì)象(python中一切皆對(duì)象)

1.3.3. 函數(shù)參數(shù)默認(rèn)值

某些時(shí)候狐援,我們可以給函數(shù)的參數(shù)定義默認(rèn)值钢坦,這樣函數(shù)在調(diào)用過程中,如果某些參數(shù)沒有傳遞啥酱,就直接使用默認(rèn)值來執(zhí)行函數(shù)代碼了爹凹,函數(shù)默認(rèn)參數(shù)確定比較簡(jiǎn)單,直接在形式參數(shù)上賦值就可以

# 重新定義函數(shù)镶殷,給參數(shù)設(shè)置默認(rèn)值5
def getCircleArea(pi=3.1415, radius=5) :
    a = pi * (radius ** 2);
    return a;

# 調(diào)用函數(shù)計(jì)算圓面積禾酱,不傳遞參數(shù),使用默認(rèn)值
a1 = getCircleArea();
# 調(diào)用函數(shù),傳遞參數(shù)進(jìn)行計(jì)算
a2 = getCircleArea(3.14, 3);
# 調(diào)用函數(shù)颤陶,給第二個(gè)參數(shù)傳遞數(shù)據(jù)進(jìn)行計(jì)算
a3 = getCircleArea(radius=8);
1.3.4. 函數(shù)的可變參數(shù)

在某些情況下颗管, 函數(shù)的參數(shù)個(gè)數(shù)不是確定的,這樣在常規(guī)定義函數(shù)時(shí)就木有辦法進(jìn)行形式參數(shù)的定義了滓走。
python提供了一種可變參數(shù)垦江,可以完美的解決這個(gè)問題
可變參數(shù),是在形式參數(shù)前面加一個(gè)*符號(hào)作為標(biāo)識(shí)

# 定義一個(gè)函數(shù)搅方,用于打印多個(gè)數(shù)據(jù)
def printMsg(*msgs) :
    for x in msgs:
        print(x);

printMsg("tom");
printMsg("tom", "jerry");
printMsg("tom", "jerry", "shuke");
# 以上三個(gè)函數(shù)調(diào)用比吭,都是可以正常執(zhí)行的

注意,在某些特殊情況下腰懂,函數(shù)的可變參數(shù)放在了固定參數(shù)的前面梗逮;此時(shí)函數(shù)的調(diào)用就需要通過變量名稱指定數(shù)據(jù)了(這個(gè)也成為命名關(guān)鍵字參數(shù)项秉,后面的內(nèi)容中有單獨(dú)介紹)

# 可變參數(shù)msgs放在固定參數(shù)name的前面了
def printMsg(*msgs, name) :
  print (name);
  print(msgs);
  for x in msgs:
      print("-->" + x);
# 普通調(diào)用绣溜,出現(xiàn)錯(cuò)誤
# 函數(shù)中的參數(shù)都被可變參數(shù)接收了,name就木有可以接收的數(shù)據(jù)了
printMsg("tom", "jerry");
# 必須如下方式調(diào)用才可以;指定name參數(shù)傳遞數(shù)據(jù)
printMsg("tom", "jerry", name="shuke");

可變參數(shù)是將傳入函數(shù)的多個(gè)參數(shù)娄蔼,自動(dòng)封裝成了一個(gè)tuple字典怖喻,也就是一組數(shù)據(jù)來使用。
上面的可變參數(shù)*msgs在函數(shù)中打印的結(jié)果如下:

print (msgs);
執(zhí)行結(jié)果:("tom", "jerry")
1.3.5. 特殊的用法:關(guān)鍵字參數(shù)

將傳遞給函數(shù)的參數(shù)岁诉,解析成dict字典的形式锚沸,也就是key:value鍵值對(duì)的形式,這就是關(guān)鍵字參數(shù)的意義涕癣,更加方便可變參數(shù)的操作
關(guān)鍵字參數(shù)哗蜈,使用兩個(gè)**符號(hào)來聲明關(guān)鍵字參數(shù)

def printMsg(**msgs) :
    print(msgs);

printMsg(name="jerry", age=18);
函數(shù)中打印結(jié)果:{name:"jerry", age:18}

注意,關(guān)鍵字參數(shù)坠韩,還可以指定只能傳遞什么樣的名稱為參數(shù)名稱距潘,就是命名關(guān)鍵字參數(shù)。命名關(guān)鍵字參數(shù)通過*符號(hào)作為分隔符號(hào)只搁,符號(hào)后面的參數(shù)就是命名關(guān)鍵字參數(shù)

# 定義具有命名關(guān)鍵字的參數(shù)
def printMsg(name, age, *, province, city):
    print(name, age, province, city);
# 調(diào)用時(shí)需要傳遞具體的參數(shù)
printMsg("tom", 18, province="HN", city="ZZ");

另外一種情況音比,就是在可變參數(shù)的后面,添加的參數(shù)都是命名關(guān)鍵字參數(shù)氢惋,這里的命名關(guān)鍵字參數(shù)就不需要*符號(hào)分隔了

# 下面的函數(shù)洞翩,province和city兩個(gè)參數(shù)是放在可變參數(shù)*args后面的
# 就是制定的命名關(guān)鍵字參數(shù),在前面可變參數(shù)部分有提到
def printMsg(name, age, *args, province, city):
    函數(shù)中的執(zhí)行代碼
# 此時(shí)函數(shù)的調(diào)用如下
printMsg("tom", 19, "tom is a cat", province="HZ", city="ZZ");

擴(kuò)展:函數(shù)中的參數(shù)焰望,根據(jù)傳遞的參數(shù)的順序骚亿、參數(shù)類型的不同,會(huì)有各種不同的組合方式熊赖,如傳遞[字符串循未、字符串]、[字符串、字符串...]的妖、[字符串绣檬、數(shù)值..]、[數(shù)值嫂粟、函數(shù)...]等等各種各樣的情況娇未,但是我們有了可變參數(shù)*args和命名關(guān)鍵字參數(shù)**kw之流的出現(xiàn),讓函數(shù)參數(shù)的接收變得比較簡(jiǎn)單星虹。
我們可以通過(*args, **kw)的形式來接收任何形式的參數(shù)

本節(jié)內(nèi)容主要介紹python中的函數(shù)參數(shù)問題零抬,下一節(jié)繼續(xù)介紹函數(shù)的返回值處理


大牧莫邪.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宽涌,隨后出現(xiàn)的幾起案子平夜,更是在濱河造成了極大的恐慌,老刑警劉巖卸亮,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忽妒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡兼贸,警方通過查閱死者的電腦和手機(jī)段直,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溶诞,“玉大人鸯檬,你說我怎么就攤上這事÷莨福” “怎么了喧务?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)枉圃。 經(jīng)常有香客問我功茴,道長(zhǎng),這世上最難降的妖魔是什么讯蒲? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任痊土,我火速辦了婚禮,結(jié)果婚禮上墨林,老公的妹妹穿的比我還像新娘赁酝。我一直安慰自己,他們只是感情好旭等,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布酌呆。 她就那樣靜靜地躺著,像睡著了一般搔耕。 火紅的嫁衣襯著肌膚如雪隙袁。 梳的紋絲不亂的頭發(fā)上痰娱,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音菩收,去河邊找鬼梨睁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛娜饵,可吹牛的內(nèi)容都是我干的坡贺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼箱舞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼遍坟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晴股,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤愿伴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后电湘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隔节,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年胡桨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了官帘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞬雹。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昧谊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出酗捌,到底是詐尸還是另有隱情呢诬,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布胖缤,位于F島的核電站尚镰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哪廓。R本人自食惡果不足惜狗唉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涡真。 院中可真熱鬧分俯,春花似錦、人聲如沸哆料。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽东亦。三九已至杏节,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奋渔。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工镊逝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫉鲸。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓蹋半,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親充坑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子减江,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1.函數(shù)參數(shù) 1.1 位置參數(shù) 我們先寫一個(gè)計(jì)算x2的函數(shù): 對(duì)于power(x)函數(shù),參數(shù)x就是一個(gè)位置參數(shù)捻爷。當(dāng)...
    時(shí)間之友閱讀 371評(píng)論 0 2
  • 位置參數(shù) 我們先寫一個(gè)計(jì)算x2的函數(shù): 對(duì)于power(x)函數(shù)辈灼,參數(shù)x就是一個(gè)位置參數(shù)。 當(dāng)我們調(diào)用power函...
    喵在野閱讀 293評(píng)論 0 1
  • 86.復(fù)合 Cases 共享相同代碼塊的多個(gè)switch 分支 分支可以合并, 寫在分支后用逗號(hào)分開也榄。如果任何模式...
    無灃閱讀 1,354評(píng)論 1 5
  • 不知不覺間巡莹,畢業(yè)近兩月。短短兩個(gè)月的經(jīng)歷甜紫,卻超過了四年的青春降宅。 七月,從泰安到六安囚霸,在時(shí)間的流逝中腰根,慢慢的沉淀了大...
    容山閱讀 254評(píng)論 0 1