day10-總結(jié)

1.函數(shù)

1.什么是函數(shù)

  • 函數(shù)就是對(duì)實(shí)現(xiàn)某一特定功能的代碼段的封裝

2.函數(shù)的分類

  • 內(nèi)置函數(shù)(系統(tǒng)函數(shù)): python已經(jīng)實(shí)現(xiàn)的函數(shù)浊竟,程序員直接用鞠评,例如: print()夏块、input()北专、max()、len()等毕籽。相當(dāng)于系統(tǒng)造好的機(jī)器
  • 自定義函數(shù): 程序員自己定的函數(shù)抬闯,相當(dāng)于自己造機(jī)器

3.函數(shù)的定義(聲明) - 造機(jī)器

1)語(yǔ)法:

def 函數(shù)名(參數(shù)列表):
函數(shù)體

2)說(shuō)明:
  • def - 聲明函數(shù)的關(guān)鍵字,固定寫法
  • 函數(shù)名 - 要求: 標(biāo)識(shí)符关筒、不能是關(guān)鍵字
    規(guī)范: 見(jiàn)名知義(看到函數(shù)名大概知道函數(shù)的功能)溶握、所有字母都小寫,多個(gè)單詞用_隔開(kāi)蒸播、不能和系統(tǒng)的函數(shù)名類名重名
  • () - 固定寫法
  • 參數(shù)列表 - 形參1,形參2,形參3,... --> 變量名1,變量名2,變量名3,... ; 這兒的參數(shù)叫形參睡榆,形參可以沒(méi)有也可以有多個(gè)
    形參的功能是將函數(shù)外面的數(shù)據(jù)傳遞到函數(shù)里面
  • : - 固定寫法
  • 函數(shù)體 - 和def保持一個(gè)縮進(jìn)的代碼段;
    函數(shù)體分為函數(shù)說(shuō)明文檔和實(shí)現(xiàn)函數(shù)功能的代碼段兩個(gè)部分
3)初學(xué)者聲明函數(shù)的步驟:
  • 第一步: 確定函數(shù)的功能
  • 第二步: 根據(jù)功能確定函數(shù)的名字
  • 第三步: 確定參數(shù)(就是確定需要不需要參數(shù),需要幾個(gè)參數(shù))看實(shí)現(xiàn)函數(shù)的功能需不需要從函數(shù)外面給函數(shù)傳值肉微,如果需要需要幾個(gè)?
  • 第四步: 實(shí)現(xiàn)函數(shù)的功能
  • 第五步: 確定返回值 (暫時(shí)不管)

4.函數(shù)體在函數(shù)聲明的時(shí)候不會(huì)執(zhí)行, 調(diào)用函數(shù)的時(shí)候才會(huì)執(zhí)行函數(shù)體(重要蜡塌!)

5.函數(shù)調(diào)用 - 使用機(jī)器

1) 語(yǔ)法:
  • 函數(shù)名(參數(shù)列表/實(shí)參列表)
2) 說(shuō)明:
  • 函數(shù)名 - 函數(shù)名對(duì)應(yīng)的函數(shù)必須是已經(jīng)聲明過(guò)的函數(shù)
  • () - 固定寫法
  • 參數(shù)列表 - 這兒的參數(shù)叫實(shí)參; 實(shí)參是用來(lái)給形參賦值的
    值1,值2,值3
  • 寫一個(gè)函數(shù)碉纳,功能是計(jì)算兩個(gè)數(shù)的和
def yt_sum(num1, num2):
    """
    函數(shù)功能的說(shuō)明: 求兩個(gè)數(shù)的和
    :param num1: 參數(shù)說(shuō)明: int, 數(shù)字
    :param num2: 數(shù)字
    :return: 返回值說(shuō)明: None
    """
    print('========')
    print(num1, num2)
    print(num1 + num2)


yt_sum(11, 222)
yt_sum(2, 8)

  • 寫一個(gè)函數(shù),功能是求123...n
def yt_mul(n):
    """求1*2*3*...*n"""
    sum1 = 1
    for num in range(1, n+1):
        sum1 *= num
    print('乘積:', sum1)


yt_mul(4)

  • 寫一個(gè)函數(shù)馏艾,功能是打印10個(gè)*
def print_star():
    print('*'*10)


print_star()

2.函數(shù)的調(diào)用過(guò)程

1.函數(shù)的調(diào)用過(guò)程 (重要@筒堋!琅摩!)

"""
函數(shù)在聲明的時(shí)候不執(zhí)行函數(shù)體铁孵,調(diào)用的函數(shù)的時(shí)候才會(huì)執(zhí)行函數(shù)體

函數(shù)的調(diào)用過(guò)程:
1)先回到函數(shù)聲明的位置
2)用實(shí)參給形參賦值(傳參) -- 傳參要保證每個(gè)參數(shù)都有值
3)執(zhí)行函數(shù)體
4)執(zhí)行完函數(shù)體再回到函數(shù)調(diào)用的位置,接著往后執(zhí)行
"""

def yt_sum(num1, num2):
# num1, num2 = 1, 2 --> num1 = 1, num2 = 2
# num1 = 20, num2 = 30
print(num1+num2) # print(1+2) print(3)

yt_sum(1, 2)
print('~~~~~')

yt_sum(20, 30)

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

1)根據(jù)實(shí)參的寫法將參數(shù)分為位置參數(shù)和關(guān)鍵字參數(shù)

  • a.位置參數(shù): 調(diào)用函數(shù)的時(shí)候?qū)崊⒌奈恢煤托螀⒁灰粚?duì)應(yīng)房资,然后保證每個(gè)形參都有值
  • b.關(guān)鍵字參數(shù): 實(shí)參列表以'形參名1=值1,形參名2=值2...'的方式來(lái)調(diào)用函數(shù),
    在這兒形參的順序可以和聲明的時(shí)候形參的順序不同
  • 注意: 位置參數(shù)和關(guān)鍵字參數(shù)可以混合使用蜕劝,但是使用的時(shí)候一定要保證位置參數(shù)在關(guān)鍵字參數(shù)的前面
def func1(a, b, c):
    print(a, b, c)


# 位置參數(shù)
func1(10, 20, 30)
# 關(guān)鍵字參數(shù)
func1(a=10, b=20, c=30)
func1(c=30, b=20, a=10)
# 位置參數(shù)和關(guān)鍵字參數(shù)混合
func1(5, c=25, b=15)
# func1(b=10, a=0, 20)  SyntaxError: positional argument follows keyword argument

2)參數(shù)默認(rèn)值

  • 聲明函數(shù)的時(shí)候,函數(shù)的形參可以設(shè)置默認(rèn)值轰异。
  • 注意: a.如果設(shè)置默認(rèn)值的時(shí)候岖沛,是一部分參數(shù)有默認(rèn)值,一部分沒(méi)有默認(rèn)值搭独,那么沒(méi)有默認(rèn)值的參數(shù)一定要寫在有默認(rèn)值的參數(shù)的前面
  • b.有默認(rèn)值的參數(shù)婴削,調(diào)用的時(shí)候可以不用傳參;沒(méi)有默認(rèn)值的參數(shù)牙肝,調(diào)用的時(shí)候必須傳參
  • c.當(dāng)我們傳參的時(shí)候想要跳過(guò)某個(gè)或者某幾個(gè)有默認(rèn)值的參數(shù)唉俗,直接后面的參數(shù)傳參的時(shí)候,后面的參數(shù)必須使用關(guān)鍵字參數(shù)傳參
def func2(a, b=20, c=30):
    # a ;b = 20 ;c = 30
    # a = 100; b=200; c=300
    # a ;b = 20 ;c = 30
    # a=100
    print(a, b, c)


func2(100, 200, 300)
func2(100)
func2(100, 200)
func2(a=100, c=300)
func2(100, c=300)

3) 參數(shù)類型說(shuō)明

  • a.給參數(shù)設(shè)置默認(rèn)值配椭,默認(rèn)是什么類型虫溜,參數(shù)就是什么類型
  • b.以'參數(shù)名: 類型名'的方式說(shuō)明參數(shù)類型
def func3(nums: list, a: int, b=0):
    nums.append('abc')
    print(a+b, nums)


func3([], 10, 0)
練習(xí): 寫一個(gè)函數(shù),函數(shù)的功能是統(tǒng)計(jì)一個(gè)列表中指定元素的個(gè)數(shù)(類似count()方法的功能)
def yt_count(list1: list, item):
    """統(tǒng)計(jì)一個(gè)list1中item的個(gè)數(shù)"""
    count = 0
    for item1 in list1:
        if item1 == item:
            count += 1
    print(count)


yt_count([1, 34, 56, 778, 1], 1)
yt_count([1, 34, 56, 778, 1], 0)
nums = [1, 23, 4, 2, 2, 4, 1, 4]
yt_count(nums, 2)


4)不定長(zhǎng)參數(shù)

a. 聲明函數(shù)的時(shí)候颂郎,在形參前加一個(gè)*, 可以將這個(gè)形參變成元祖吼渡,然后同時(shí)接受多個(gè)位置參數(shù)的值
b. 聲明函數(shù)的時(shí)候,在形參前加**乓序,可將這個(gè)形參變成字典寺酪,然后可以同時(shí)接受多個(gè)關(guān)鍵字參數(shù)的值(這兒的關(guān)鍵字自己隨便命名)
注意: 原則上一個(gè)函數(shù)的參數(shù)中既可以有定長(zhǎng)的,也可以有待一個(gè)的不定長(zhǎng)和帶兩個(gè)*的不定長(zhǎng)替劈;
如果同時(shí)存在帶一個(gè)參數(shù)和帶兩個(gè)的參數(shù)寄雀,帶一個(gè)的要放在帶兩個(gè)的前面
*混合
def func(*args, **kwargs):
    print(args, kwargs)


func(1, 2, 3, 4)
func(a=1, b=2, c=3)
func(1, 2, 3, a=10, b=20, c=30)


# **
def func(a, **num):
    print('不定長(zhǎng)參數(shù)2:')
    print(a, num)


func(10, name=10, age=23, tel=90)


*

寫一個(gè)函數(shù),功能是求多個(gè)數(shù)的和

假設(shè)你實(shí)現(xiàn)的函數(shù)是yt_sum, yt_sum(10) == 10

yt_sum(1, 2)  == 3   yt_sum(1, 2, 3, 4)  == 10
def yt_sum1(*num):
    print(sum(num))


yt_sum1()
yt_sum1(1)
yt_sum1(1, 2)
yt_sum1(1, 2, 3, 4)
  • 注意: 一個(gè)函數(shù)中可以同時(shí)又不定長(zhǎng)參數(shù)和定長(zhǎng)參數(shù)陨献,一般情況下不定長(zhǎng)參數(shù)要放在后面盒犹;
  • 如果出現(xiàn)定長(zhǎng)參數(shù)放在不定長(zhǎng)參數(shù)的后面,那么在不定長(zhǎng)參數(shù)后面的定長(zhǎng)參數(shù)調(diào)用的時(shí)候需要使用關(guān)鍵字參數(shù)傳參
def func1(a, *nums, b='abc'):
    print(nums, a, b)


func1(1, 2, 3, 4, 5, b='hello')


def func2(a, *b, c):
    print(a, b, c)


func2(1, 23, 34, 56, 67, c=200)
  • 練習(xí): 寫一個(gè)函數(shù)求多個(gè)數(shù)的和,要求調(diào)用函數(shù)的時(shí)候既可以使用位置參數(shù)傳參急膀,也可以用關(guān)鍵字參數(shù)傳參沮协。
# yt_sum2(1, 2, 3)  == 6   yt_sum2(num1=10, num2=20)  == 30
# yt_sum2(1, 2, num3=100, num4=200)  == 303

def yt_sum2(*nums1, **nums2):
    sum1 = 0
    for num in nums1:
        sum1 += num
    for key in nums2:
        sum1 += nums2[key]

    print(sum1)


yt_sum2(1, 2, 3)
yt_sum2(num1=10, num2=20)
yt_sum2(1, 2, num3=100, num4=200)

1.什么是返回值

  • 返回值的作用是將函數(shù)體中產(chǎn)生的數(shù)據(jù)傳遞到函數(shù)外面
  • 返回值就是函數(shù)調(diào)用表達(dá)式的值,就是return關(guān)鍵字后面的值
  • 注意: 函數(shù)調(diào)用表達(dá)式 - 調(diào)用函數(shù)的語(yǔ)句卓嫂; 它的結(jié)果就是這個(gè)的函數(shù)的返回值慷暂;
  •                   通過(guò)函數(shù)調(diào)用表達(dá)式獲取函數(shù)的返回值
    

2.return關(guān)鍵字

  • return只能出現(xiàn)在函數(shù)體中;
  • 當(dāng)執(zhí)行函數(shù)體的時(shí)候遇到return晨雳,函數(shù)直接結(jié)束行瑞;并且會(huì)將return后面的值作為函數(shù)的返回值返回;
  • 如果在執(zhí)行函數(shù)體的時(shí)候沒(méi)有遇到return,函數(shù)的返回值是None

3.函數(shù)的調(diào)用過(guò)程(完整版) 記2徒Q谩!0锓恰Q跬隆!

1) 先回到函數(shù)聲明的位置
2) 用實(shí)參給形參賦值 - 傳參 (保證每個(gè)參數(shù)都有值)
3) 執(zhí)行函數(shù)體
4) 執(zhí)行完函數(shù)體喜鼓,確定返回值

(執(zhí)行完函數(shù)體中所有的語(yǔ)句沒(méi)有遇到return,函數(shù)的返回值是None;
執(zhí)行過(guò)程中遇到return副砍,函數(shù)的返回值就是return后面的值)

5) 回到函數(shù)調(diào)用的位置,接著往后執(zhí)行庄岖。(此時(shí)函數(shù)調(diào)用表達(dá)式的值才是函數(shù)的返回值)
def func1(n):
    # n = 10
    # n = 100
    # n = 100
    print(n)
    return n*2    # return 20; return 200; return 200


print(10)
print(func1(10))   # print(20)

a = 10
a = func1(100)    # a = 200
print('a:', a)

list1 = [10, func1(100)]   # list1 = [10, 200]
print(list1)
"""
10
10
20
100
a: 200
100
[10, 200]
"""

4.什么時(shí)候函數(shù)需要有返回值

給初學(xué)者的建議: 只要實(shí)現(xiàn)函數(shù)的功能產(chǎn)生了新的數(shù)據(jù)豁翎,就可以把這個(gè)數(shù)據(jù)用返回值返回

寫一個(gè)函數(shù),求兩個(gè)數(shù)的和:
def yt_sum(n1, n2):
    return n1+n2


score1 = 10
score2 = 20
print(yt_sum(score1, score2))
total = yt_sum(score1, score2)
person = {'name': '小明', 'scores': total}

print([1, 2, 3].count(1))
list1 = [1, 2, 3]
print('===:', list1.append(4))

python中一個(gè)函數(shù)可以有多個(gè)返回值隅忿;return后給多個(gè)值心剥,用逗號(hào)隔開(kāi)

def func2():
    return 10, 20


x, y = func2()     # x, y = 10, 20
print(x)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市背桐,隨后出現(xiàn)的幾起案子优烧,更是在濱河造成了極大的恐慌,老刑警劉巖链峭,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畦娄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡弊仪,警方通過(guò)查閱死者的電腦和手機(jī)熙卡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)励饵,“玉大人驳癌,你說(shuō)我怎么就攤上這事∫厶” “怎么了颓鲜?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵表窘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我甜滨,道長(zhǎng)乐严,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任衣摩,我火速辦了婚禮麦备,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昭娩。我一直安慰自己,他們只是感情好黍匾,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布栏渺。 她就那樣靜靜地躺著,像睡著了一般锐涯。 火紅的嫁衣襯著肌膚如雪磕诊。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天纹腌,我揣著相機(jī)與錄音霎终,去河邊找鬼。 笑死升薯,一個(gè)胖子當(dāng)著我的面吹牛莱褒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涎劈,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼广凸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蛛枚?” 一聲冷哼從身側(cè)響起谅海,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蹦浦,沒(méi)想到半個(gè)月后扭吁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盲镶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年侥袜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徒河。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡系馆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出顽照,到底是詐尸還是另有隱情由蘑,我是刑警寧澤闽寡,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站尼酿,受9級(jí)特大地震影響爷狈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裳擎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一涎永、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹿响,春花似錦羡微、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至绸贡,卻和暖如春盯蝴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背听怕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工捧挺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尿瞭。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓闽烙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親声搁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸣峭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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

  • 1.函數(shù)Function 函數(shù)就是對(duì)實(shí)現(xiàn)某一特定功能的代碼段的封裝 1.函數(shù)的分類 內(nèi)置函數(shù)(系統(tǒng)函數(shù)): pyt...
    BrayKing閱讀 141評(píng)論 0 1
  • 函數(shù) 1.什么是函數(shù) 函數(shù)就是對(duì)實(shí)現(xiàn)某一特定功能的代碼段的封裝 2.函數(shù)的分類 內(nèi)置函數(shù)(系統(tǒng)函數(shù)) :Pytho...
    灬小魚(yú)兒zzZ閱讀 206評(píng)論 0 0
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章酥艳,發(fā)現(xiàn)簡(jiǎn)書(shū)還為我保存起的...
    Jenaral閱讀 2,739評(píng)論 2 9
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,770評(píng)論 0 38
  • 一摊溶、概述 應(yīng)用程序本地化,從名字理解就是充石,應(yīng)用程序App的入鄉(xiāng)隨俗化處理莫换,比喻說(shuō)App的名字,在手機(jī)設(shè)置語(yǔ)言為簡(jiǎn)體...
    爬樹(shù)的螞蟻閱讀 1,028評(píng)論 3 4