day10-筆記Function

一.function1

"""
飛機(jī)功能: 左移怀估、右移验懊、上移、下移、發(fā)射子彈浸踩、爆炸

沒有函數(shù)的時候的問題:1.重復(fù)的代碼需要寫多次(代碼冗余)
                  2.一旦功能發(fā)生改變,需要修改多處代碼  
                  
怎么解決上面兩個問題:使用函數(shù)
"""


def zuoyi():
    print('=============左移=============')
    print('看后視鏡')
    # print('踩油門')
    print('向左打方向盤')
    print('回正方向盤')


def youyi():
    print('=============右移=============')
    print('看后視鏡')
    # print('踩油門')
    print('向右打方向盤')
    print('回正方向盤')

# 左移3次再右移2次左移2次右移2次
zuoyi()
zuoyi()
zuoyi()
youyi()
youyi()
zuoyi()
zuoyi()
youyi()
youyi()
# print('=============左移=============')
# print('看后視鏡')
# print('踩油門')
# print('向左打方向盤')
# print('回正方向盤')
# print('=============左移=============')
# print('看后視鏡')
# print('踩油門')
# print('向左打方向盤')
# print('回正方向盤')
# print('=============左移=============')
# print('看后視鏡')
# print('踩油門')
# print('向左打方向盤')
# print('回正方向盤')
# print('=============右移=============')
# print('看后視鏡')
# print('踩油門')
# print('向右打方向盤')
# print('回正方向盤')
# print('=============右移=============')
# print('看后視鏡')
# print('踩油門')
# print('向右打方向盤')
# print('回正方向盤')
# print('=============左移=============')
# print('看后視鏡')
# print('踩油門')
# print('向左打方向盤')
# print('回正方向盤')
# print('=============左移=============')
# print('看后視鏡')
# print('踩油門')
# print('向左打方向盤')
# print('回正方向盤')
# print('=============右移=============')
# print('看后視鏡')
# print('踩油門')
# print('向右打方向盤')
# print('回正方向盤')
# print('=============右移=============')
# print('看后視鏡')
# print('踩油門')
# print('向右打方向盤')
# print('回正方向盤')

二.Function2

1.什么是函數(shù)
函數(shù)就是對實現(xiàn)某一特定功能的代碼段的封裝
2.函數(shù)的分類
內(nèi)置函數(shù)(系統(tǒng)函數(shù)):python已經(jīng)實現(xiàn)的函數(shù),程序員直接用,例如:print()、input()、max()懊蒸、len()等.相當(dāng)于系統(tǒng)造好的機(jī)器
自定義函數(shù): 程序員自己定的函數(shù),相當(dāng)于自己造機(jī)器

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

"""
1)語法:
def 函數(shù)名(參數(shù)列表):
    函數(shù)體

2)說明:
def    -  聲明函數(shù)的關(guān)鍵字,固定寫法
函數(shù)名  -  要求: 標(biāo)識符,不能是關(guān)鍵字
                見名知義(看到函數(shù)名大概知道函數(shù)的功能),所有字母都小寫,多個單詞用_隔開,不能和系統(tǒng)的函數(shù)名類名重合
()     -  固定寫法
參數(shù)列表 - 形參1,形參2,形參3,... -->變量名1,變量名2,變量名3...;這兒的參數(shù)叫形參,形參可以沒有也可以有多個
          形參的功能是將函數(shù)外面的數(shù)據(jù)傳遞到函數(shù)里面  
:      -  固定寫法
函數(shù)體  -  和def保持一個縮進(jìn)的代碼段;
          函數(shù)體分為函數(shù)說明文檔和實現(xiàn)函數(shù)功能的代碼段兩個部分

3)初學(xué)者聲明函數(shù)的步驟:
第一步: 確定函數(shù)的功能
第二步: 根據(jù)功能確定函數(shù)的名字
第三步: 確定參數(shù)(就是確定需不需要參數(shù),需要幾個參數(shù))
       看實現(xiàn)函數(shù)的功能需不需要從函數(shù)外面給函數(shù)傳值,如果需要需要幾個
第四步: 實現(xiàn)函數(shù)的功能
第五步: 確定返回值
"""

4.函數(shù)體再函數(shù)聲明的時候不會執(zhí)行,調(diào)用函數(shù)的時候才會執(zhí)行函數(shù)體(重要!)
5.函數(shù)調(diào)用 - 使用機(jī)器

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

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

# 寫一個函數(shù)悯搔,功能是求1*2*3*...*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)

三.函數(shù)的調(diào)用過程(重要!!!)

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

函數(shù)的調(diào)用過程:
1) 先回到函數(shù)聲明的位置
2) 用實參給形參賦值(傳參)   --傳參要保證每個參數(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ù)和關(guān)鍵字參數(shù)
    a.位置參數(shù): 調(diào)用函數(shù)的時候?qū)崊⒌奈恢煤托螀⒁灰粚?yīng),然后保證每個形參都有值
    b.關(guān)鍵字參數(shù): 實參列表以'形參名1=值1,形參名2=值2,...'的方式來調(diào)用參數(shù),在這兒形參的順序可以和聲明的時候形參的順序不同
    注意: 位置參數(shù)和關(guān)鍵字參數(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è)置默認(rèn)值
注意: a.如果設(shè)置默認(rèn)值的時候,是一部分參數(shù)有默認(rèn)值,一部分沒有默認(rèn)值,那么沒有默認(rèn)值的參數(shù)一定要寫在有默認(rèn)值的參數(shù)的前面
b.有默認(rèn)值的參數(shù),調(diào)用的時候可以不用傳參;沒有默認(rèn)值的參數(shù),調(diào)用的時候必須傳參
c.當(dāng)我們傳參的時候想要跳過某個或者某幾個有默認(rèn)值的參數(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ù)類型說明
a.給參數(shù)設(shè)置默認(rèn)值,默認(rèn)是什么類型,參數(shù)就是什么類型
b.以'參數(shù)名:類型名'的方式說明參數(shù)類型

def func3(nums: list, a: int, b=0):
    nums.append('abc')
    print(a+b, nums)


func3([], 10, 0)
# 練習(xí): 寫一個函數(shù)骑丸,函數(shù)的功能是統(tǒng)計一個列表中指定元素的個數(shù)(類似count()方法的功能)
def yt_count(list1: list, item):
    """統(tǒng)計一個list1中item的個數(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)
  1. 不定長參數(shù)
    a. 聲明函數(shù)的時候,在形參前加一個,可以將這個形參變成元祖,然后同時接受多個位置參數(shù)的值
    b. 聲明函數(shù)的時候,在形參前加
    ,可將這個形參變成字典,然后可以同時接受多個關(guān)鍵字參數(shù)的值(這兒的關(guān)鍵字自己隨便命名)
    注意: 原則上一個函數(shù)的參數(shù)中既可以有定長的,也可以有帶一個
    的不定長和帶兩個的不定長;如果同時存在帶一個的參數(shù)和帶兩個*的參數(shù),帶一個的要放在帶兩個的前面
# *和**混合
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('不定長參數(shù)2:')
    print(a, num)

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

# *
# 寫一個函數(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)

# 注意: 一個函數(shù)中可以同時有不定長參數(shù)和定長參數(shù)妒貌,一般情況下不定長參數(shù)要放在后面通危;
#      如果出現(xiàn)定長參數(shù)放在不定長參數(shù)的后面,那么在不定長參數(shù)后面的定長參數(shù)調(diào)用的時候需要使用關(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í): 寫一個函數(shù)求多個數(shù)的和灌曙,要求調(diào)用函數(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)

四.Function4

1.什么是返回值
返回值的作用是將函數(shù)體重產(chǎn)生的數(shù)據(jù)傳遞到函數(shù)外面
返回值就是函數(shù)調(diào)用表達(dá)式的值,就是return關(guān)鍵字后面的值
注意:函數(shù)調(diào)用表達(dá)式 - 調(diào)用函數(shù)的語句;它的結(jié)果就是這個函數(shù)的返回值;通過函數(shù)調(diào)用表達(dá)式獲取函數(shù)的返回值
2.return關(guān)鍵字
return只能出現(xiàn)在函數(shù)體中;
當(dāng)執(zhí)行函數(shù)體的時候遇到return,函數(shù)直接結(jié)束;并且會將return后面的值作為函數(shù)的返回值返回;如果在執(zhí)行函數(shù)體的時候沒有遇到return,函數(shù)的返回值是None

3.函數(shù)的調(diào)用過程(完整版) 記!!!

"""
1) 先回到函數(shù)聲明的位置
2) 用實參給形參賦值  -  傳參(保證每個參數(shù)都有值)
3)執(zhí)行函數(shù)體
4)執(zhí)行完函數(shù)體,確定返回值(執(zhí)行完函數(shù)體中所有的語句沒有遇到return,函數(shù)的返回值是None;執(zhí)行過程中遇到return,函數(shù)的返回值就是return后面的值)
5) 回到函數(shù)調(diào)用的位置,接著往后執(zhí)行(此時函數(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)

4.什么時候函數(shù)需要有返回值
給初學(xué)者的建議: 只要實現(xiàn)函數(shù)的功能產(chǎn)生了新的數(shù)據(jù),就可以把這個數(shù)據(jù)用返回值返回

# python中一個函數(shù)可以有多個返回值在刺;return后給多個值逆害,用逗號隔開
def func2():
    return 10, 20


x, y = func2()     # x, y = 10, 20
print(x)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蚣驼,隨后出現(xiàn)的幾起案子忍燥,更是在濱河造成了極大的恐慌,老刑警劉巖隙姿,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異厂捞,居然都是意外死亡输玷,警方通過查閱死者的電腦和手機(jī)队丝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欲鹏,“玉大人机久,你說我怎么就攤上這事∨夂浚” “怎么了膘盖?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尤误。 經(jīng)常有香客問我侠畔,道長,這世上最難降的妖魔是什么损晤? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任软棺,我火速辦了婚禮,結(jié)果婚禮上尤勋,老公的妹妹穿的比我還像新娘喘落。我一直安慰自己,他們只是感情好最冰,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布瘦棋。 她就那樣靜靜地躺著,像睡著了一般暖哨。 火紅的嫁衣襯著肌膚如雪赌朋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天鹿蜀,我揣著相機(jī)與錄音箕慧,去河邊找鬼。 笑死茴恰,一個胖子當(dāng)著我的面吹牛颠焦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播往枣,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼伐庭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了分冈?” 一聲冷哼從身側(cè)響起圾另,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雕沉,沒想到半個月后集乔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡坡椒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年扰路,在試婚紗的時候發(fā)現(xiàn)自己被綠了尤溜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡汗唱,死狀恐怖宫莱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哩罪,我是刑警寧澤授霸,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站际插,受9級特大地震影響碘耳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜腹鹉,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一藏畅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧功咒,春花似錦愉阎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至景殷,卻和暖如春溅呢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背猿挚。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工咐旧, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绩蜻。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓铣墨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親办绝。 傳聞我的和親對象是個殘疾皇子伊约,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

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

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,511評論 1 51
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章孕蝉,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,737評論 2 9
  • 函數(shù)和對象 1屡律、函數(shù) 1.1 函數(shù)概述 函數(shù)對于任何一門語言來說都是核心的概念。通過函數(shù)可以封裝任意多條語句降淮,而且...
    道無虛閱讀 4,543評論 0 5
  • 函數(shù)只定義一次超埋,但可能被執(zhí)行或調(diào)用任意次。JS函數(shù)是參數(shù)化的,函數(shù)的定義會包括一個稱為形參的標(biāo)識符列表霍殴,這些參數(shù)在...
    PySong閱讀 846評論 0 0
  • 函數(shù)只定義一次窍蓝,但可能被執(zhí)行或調(diào)用任意次。JS函數(shù)是參數(shù)化的繁成,函數(shù)的定義會包括一個稱為形參的標(biāo)識符列表,這些參數(shù)在...
    PySong閱讀 519評論 0 0