Day8 函數、參數和返回值

一微驶、函數

1浪谴、什么是函數

函數就是對實現某一特定功能的代碼段的封裝开睡。

2因苹、函數的分類
  • 系統(tǒng)函數:系統(tǒng)已經給我們定義好的函數,程序員直接調用函數使用函數的功能篇恒。
  • 自定義函數:需要程序員自己去定義的函數扶檐。
3、函數的定義
a胁艰、語法
def 函數名(參數列表):
    函數體
b款筑、說明

def - Python中聲明函數的關鍵字

函數名 - 標識符,不能是關鍵字腾么;PEP8命名規(guī)范奈梳,見名知意。

() - 固定格式

參數列表 - 參數1解虱,參數2攘须,參數3……;這里的參數叫形參殴泰。

? 功能是將函數外面的數據傳遞到函數里面

: - 固定格式

函數體 - 實現功能的代碼段于宙。一個完整的函數體包含:函數說明文檔浮驳、實現函數功能的代碼段、函數的返回值捞魁。

c至会、初學著聲明函數的步驟
  1. 確定函數的功能
  2. 根據功能給函數命名
  3. 確定形參(看實現函數的功能需不需要外面?zhèn)髦到鼇恚?/li>
  4. 實現函數功能
  5. 確定函數返回值

注意:函數的在聲明的時候不會執(zhí)行函數體。只有在調用的時候才會執(zhí)行谱俭。

def my_sum(num1, num2):
    """
    求兩個數的和奉件。
    :param num1:
    :param num2:
    :return:
    """
    print(num1 + num2)
4、函數的調用

就是使用函數旺上。

a瓶蚂、語法

函數名(實參列表)

b、說明

函數名 - 這個函數名對應的函數必須是已經聲明過的函數

() - 固定寫法

實參列表 - 實參是用來給新參賦值(用實參給形參賦值的過程就是傳參)

? 實參和新參要一一對應宣吱。

c窃这、調用過程
  1. 回到函數聲明的位置
  2. 用實參給形參賦值(傳參)
  3. 執(zhí)行函數體
  4. 執(zhí)行完函數體就確定并返回返回值
  5. 再回到函數調用位置,接著執(zhí)行后面其他代碼

練習:N的階乘

def factorial (num1):
    """
    打印N的階乘
    :param num1:
    :return:
    """
    result = 1
    while num1:
        result *= num1
        num1 -= 1
    print(result)

二征候、參數

1杭攻、位置參數和關鍵字參數

根據實參的傳遞方式對參數進行的分類

a、位置參數:

實參的位置和形參保持一致疤坝,按形參聲明的先后順序一一賦值兆解。

b、關鍵字參數:

調用函數的時候以 形參=實參的方式來傳參跑揉,這個時候實參的順序無所謂

def func1(a, b, c):
    print(a, b, c)
# 通過位置參數給新參賦值
func1(10, 20, 30)  

def func2(a, b, c):
    print(a, b, c)
# 通過關鍵字參數給新參賦值
func2(c = 10, a = 20, b =30)  
# 通過位置參數和關鍵字參數結合傳參(注意關鍵字參數必須在位置參數的后面)
func2(10, 20, c =30)  
2锅睛、參數默認值

聲明函數的時候,可以給參數賦默認值历谍。

如果一個形參有默認值了现拒,那么調用函數的時候這個參數就可以不用傳參。

有默認值的形參要放在沒有默認值的后面望侈。

調用函數要保證每個參數都有值印蔬!

def fun2(a, b c=0):
    print(a, b, c)
fun2(1, 2, 3)
fun2(1, 2)
fun2(b = 2, a = 1)
3、參數類型說明

類型說明只有提示功能脱衙,沒有約束功能侥猬。

a、給參數設置默認值捐韩,默認值的類型就是參數的類型退唠。

b在形參后面加:類型命,來說明參數類型荤胁。這個方式調用的時候必須傳參瞧预。

c、函數聲明的時候在() 后面加 ->類型名,來說明函數返回值的類型松蒜。

def list_item(list1: list, index = 0):
    print(list1[index])

類型說明的好處:

  1. 傳參時候扔茅,對實參的類型進行說明。
  2. 實現函數功能的時候有類型相關的語法提示
def list_item(list1: list, index = 0) ->int:
    return list1[index]
4秸苗、不定長參數

函數的參數不確定召娜。

寫一個函數,計算多個函數的和

方法一:聲明函數的時候惊楼,在參數名前加*玖瘸,可以用來同時獲取多個實參的值。實質是將帶*的參數變成元祖檀咙,將多個實參的值作為元祖的元素雅倒。

注意:如果函數中既有不定長參數又有普通參數,那么不定長參數必須放在普通參數的后邊弧可。

def my_sum(*nums):
    print(nums)
    print(type(nums))

my_sum(1, 2, 3, 4, 5, 6)
def my_sum(*nums):
    print(sum(nums))

方法二:在參數名前加兩個*

傳參時需使用關鍵字傳參蔑匣,會將參數變成一個字典來獲取關鍵字參數的值,其他關鍵字作為key,實參作為value

def my_sum(**nums):
    print(nums)
    print(type(nums))

my_sum(a = 1)
# {'a': 1}
# <class 'dict'>
def my_sum2(**nums):
    total = 0
    for key in nums:
        total += nums[key]
    print(total)

注意:

如果函數中既有不定長參數又有普通參數棕诵,那么不定長參數必須放在普通參數后邊裁良。

兩個*的參數要放在一個*的后面

def fun1(*args, **kwargs):
    print(args, kwargs)
    
fun1(10, 3, 4)
fun1(a= 10, b = 3, c = 2)
fun1(90, 23, z = 3, y = 3)
"""
(10, 3, 4) {}
() {'a': 10, 'b': 3, 'c': 2}
(90, 23) {'z': 3, 'y': 3}
"""

三、返回值

1校套、什么是返回值

a价脾、返回值就是函數調用表達式的值,就是return關鍵字后面的表達式的值笛匙。返回值就是將函數里面的數據傳遞到函數外面侨把。

b、Python中每個函數都有返回值妹孙,默認是None秋柄,如果遇到return ,return 后面是什么返回值就是什么涕蜂。

函數調用表達式 - 調用函數的語句

return - 關鍵字华匾,只能寫在函數體中映琳。

return功能:

  1. 確定函數的返回值
  2. 結束函數机隙,執(zhí)行時遇到return,函數直接結束萨西,并且將return后面的值作為函數的返回值有鹿。
def func1():
    print('***')
    
result = func1()
print(resut)  # None
2、多個返回值

return 值1, 值2, 值3... 相當于返回一個元祖

def fun3():
    return 1, 2, 3

fun3()
print(type(fun3()))
3谎脯、怎么確定函數是否需要返回值

函數執(zhí)行完成后是否產生新的數據葱跋,如果產生新的數據就將這個數據用return返回。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市娱俺,隨后出現的幾起案子稍味,更是在濱河造成了極大的恐慌,老刑警劉巖荠卷,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件模庐,死亡現場離奇詭異,居然都是意外死亡油宜,警方通過查閱死者的電腦和手機掂碱,發(fā)現死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慎冤,“玉大人疼燥,你說我怎么就攤上這事∫系蹋” “怎么了醉者?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長披诗。 經常有香客問我湃交,道長,這世上最難降的妖魔是什么藤巢? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任搞莺,我火速辦了婚禮,結果婚禮上掂咒,老公的妹妹穿的比我還像新娘才沧。我一直安慰自己,他們只是感情好绍刮,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布温圆。 她就那樣靜靜地躺著,像睡著了一般孩革。 火紅的嫁衣襯著肌膚如雪岁歉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天膝蜈,我揣著相機與錄音锅移,去河邊找鬼。 笑死饱搏,一個胖子當著我的面吹牛非剃,可吹牛的內容都是我干的。 我是一名探鬼主播推沸,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼备绽,長吁一口氣:“原來是場噩夢啊……” “哼券坞!你這毒婦竟也來了?” 一聲冷哼從身側響起肺素,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤恨锚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后倍靡,有當地人在樹林里發(fā)現了一具尸體眠冈,經...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年菌瘫,在試婚紗的時候發(fā)現自己被綠了蜗顽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡雨让,死狀恐怖雇盖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情栖忠,我是刑警寧澤崔挖,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站庵寞,受9級特大地震影響狸相,放射性物質發(fā)生泄漏。R本人自食惡果不足惜捐川,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一脓鹃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧古沥,春花似錦瘸右、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至盹沈,卻和暖如春龄章,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乞封。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工做裙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人歌亲。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓菇用,卻偏偏與公主長得像澜驮,于是被迫代替她去往敵國和親陷揪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內容