日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python基礎(chǔ)(九)

系統(tǒng) 1784 0

今日主要內(nèi)容

  • 函數(shù)初識
    • 函數(shù)定義
    • 函數(shù)調(diào)用
    • 函數(shù)返回值
    • 函數(shù)參數(shù)

一、函數(shù)初識

(一)為什么要用函數(shù)

  • 有一個(gè)需求,給出一個(gè)變量,計(jì)算變量的長度,要求不能使用 len()

                  
                    s = "郭老濕今天崩潰了,在后面直嘆氣"
    count = 0
    for i in s:
      count += 1
    print(count)
                  
                
  • 我們利用上述一段代碼完成了需求,很強(qiáng)666。但是問題來了,現(xiàn)在100個(gè)人每個(gè)人給你一個(gè)變量,讓你計(jì)算變量的長度,此時(shí)只能苦逼的敲代碼來計(jì)算!!!

                  
                    s = ......
    count = 0
    for i in s:
      count += 1
    print(count)
    
    lst = ......
    count = 0
    for i in lst:
      count += 1
    print(count)
    
    tu = ......
    count = 0
    for i in tu:
      count += 1
    print(count)
    
    ......................
                  
                
  • 我們發(fā)現(xiàn)一個(gè)問題,上述每一段代碼有將近99%的內(nèi)容完全一樣,我們完全可以把這段代碼提前寫出來,等到使用的時(shí)候,拿過來用一下,解決了我們重復(fù)性的大問題,這就是函數(shù)的產(chǎn)生

                  
                    def my_len():   # 這就是把我的代碼封裝成一個(gè)函數(shù)
      count = 0
      for i in s:
          count += 1
      print(count)
    
    s = [1, 2, 3, 4, 5]
    my_len()
    
    s = "12345"
    my_len()
    
    ......................
                  
                
  • 函數(shù)可以為我們精簡代碼,把重復(fù)的內(nèi)容封裝起來,需要使用的時(shí)候調(diào)用就好了,同時(shí)加強(qiáng)了代碼的重用性

(二)函數(shù)定義

  • 定義函數(shù)的格式:

                  
                    def 函數(shù)名():
      函數(shù)體
                  
                
    • def:定義函數(shù)的關(guān)鍵字
    • 函數(shù)名:函數(shù)名的命名規(guī)范和變量的命名規(guī)范完全相同
    • 函數(shù)體: 函數(shù)執(zhí)行 的時(shí)候,真正執(zhí)行的部分
  • 補(bǔ)充:定義變量時(shí),開辟的內(nèi)存空間、內(nèi)存地址與變量名之間的關(guān)系

    • 內(nèi)存空間:程序執(zhí)行到定義變量內(nèi)一行,先開辟一塊內(nèi)存空間,用來存放數(shù)據(jù)
    • 內(nèi)存地址:當(dāng)內(nèi)存空間開辟之后,內(nèi)存地址同時(shí)就產(chǎn)生了,一個(gè)內(nèi)存空間的地址是永遠(yuǎn)不會改變的
    • 變量名:內(nèi)存地址的外號,可以更快的找到內(nèi)存空間,可有可無
                  
                    s = "zxd"
    print(id("zxd"))  # 2844747728632
    print(s)  
                  
                
  • 此時(shí)已經(jīng)開辟了一塊內(nèi)存空間,同時(shí)產(chǎn)生內(nèi)存地址,之后為了方便找到"zxd",起一個(gè)外號為a,a也指向這個(gè)內(nèi)存空間

                  
                    print("zxd")
    print(id("zxd"))  # 2118956123896
    # 單執(zhí)行這句話時(shí),開辟了一塊內(nèi)存空間,同時(shí)產(chǎn)生內(nèi)存地址,但是這個(gè)就沒有變量名,所以變量名可有可無,但內(nèi)存地址是唯一的
                  
                

(三)函數(shù)調(diào)用

  • 函數(shù)的調(diào)用就是 使用之前預(yù)先定義好的函數(shù)

  • 函數(shù)調(diào)用方法: 函數(shù)名+()

                  
                    def play():
      print("登陸游戲")
      print("開始排位賽")
      print("開始激烈的爭逐...")
      print("Victory")
    
    play()  # 函數(shù)名+括號 就是函數(shù)調(diào)用
                  
                
  • 函數(shù)執(zhí)行順序

    • 先定義,在調(diào)用,調(diào)用后執(zhí)行函數(shù)體內(nèi)容

    Python基礎(chǔ)(九)_第1張圖片

    • 在內(nèi)存中的變化
      • 定義函數(shù)時(shí)在在內(nèi)存中開辟一塊空間,用于存放函數(shù)體執(zhí)行時(shí)產(chǎn)生的數(shù)據(jù)
      • 當(dāng)調(diào)用函數(shù)時(shí),執(zhí)行到每一行代碼都會新開辟一塊內(nèi)存空間用來存儲數(shù)據(jù)

    Python基礎(chǔ)(九)_第2張圖片

(四)函數(shù)返回值

  1. 為什么要有返回值?

    • 函數(shù)在執(zhí)行完之后,會自動銷毀函數(shù)執(zhí)行期間產(chǎn)生的數(shù)據(jù),若外部程序需要用到內(nèi)部函數(shù)產(chǎn)生的數(shù)據(jù),此時(shí)就需要用返回值返回給外部函數(shù)
  2. 返回值關(guān)鍵字: return

  3. 返回值可以將函數(shù)執(zhí)行過程中產(chǎn)生的數(shù)據(jù)返回,也可以返回任意數(shù)據(jù)

  4. 如果函數(shù)沒有return或者return后沒有寫值都默認(rèn)返回None

  5. 返回值可以返回多個(gè)數(shù)據(jù),以元組形式存儲

  6. 返回值是函數(shù)執(zhí)行時(shí)的最后一行代碼,遇到return函數(shù)就結(jié)束了

  7. 返回值將數(shù)據(jù)返回給調(diào)用者

  8. 函數(shù)體中可以有多個(gè)返回值,但只執(zhí)行一個(gè)

                  
                    def func():
     print("郭老濕沒有買到沙發(fā)")
     print("郭老濕很絕望")
     print("郭老濕要離我們而去了")
     return "郭老濕開卡車"
    
    a = func()  # 返回"郭老濕開卡車"
                  
                
  • 函數(shù)名+() 的全部作用:
    • 調(diào)用函數(shù)
    • 接收返回值

(五)函數(shù)參數(shù)

  • 看我們一段上面的代碼

                  
                    def play():
      print("登陸游戲")
      print("開始排位賽")
      print("開始激烈的爭逐...")
      print("Victory")
    
    play()
    
                  
                
  • 這是LOL大概的流程,但是我們忽略了一點(diǎn),打排位得選英雄吧,那么此時(shí)我們需要填入一個(gè)參數(shù)來決定我們選擇的英雄

                  
                    def play(hero):
      print("登陸游戲")
      print("開始排位賽")
      print("選擇英雄", hero)
      print("進(jìn)入召喚師峽谷")
      print("開始激烈的爭逐...")
      print("Victory")
    
    play("卡莎")
    
                  
                
  • 而hero就是我們填入的參數(shù),在函數(shù)執(zhí)行的時(shí)候,我們傳入的參數(shù)就會通過函數(shù)名傳入到我們的函數(shù)體中,這有點(diǎn)類似我們的格式化輸出,參數(shù)其實(shí)可以理解為一個(gè)占位符,通過函數(shù)調(diào)用時(shí)傳進(jìn)去,接下來我們來看看參數(shù)的分類

  1. 形參(形式參數(shù)):函數(shù)定義時(shí)填入的參數(shù)

    • 位置參數(shù):按照位置順序來接收實(shí)參傳來參數(shù)
                  
                    def play(game, hero, take):  # 按照位置接收實(shí)參
     print(f"登陸{game}")
     print(f"選擇角色:{hero}")
     print(f"開始游戲:{take}")
     print("結(jié)束游戲")
    
    play("LOL", "卡莎", "發(fā)育、對線、打團(tuán)")
    play("DNF", "念皇", "刷深淵、打團(tuán)")
    
                  
                
    • 默認(rèn)值參數(shù):在函數(shù)聲明的時(shí)候就可以給出參數(shù)的默認(rèn)值,當(dāng)實(shí)際調(diào)用的時(shí)候可以給出具體的值,也可以不給
                  
                    def msg(name="zxd", age=23, sex="男"):  # 默認(rèn)值參數(shù)
        dic = dict()
        dic["name"] = name
        dic["age"] = age
        dic["sex"] = sex
        return dic
    
    print(msg())  # 默認(rèn)值參數(shù)可以傳也可以不傳
    
                  
                
    • 混合參數(shù):兩種參數(shù)混合使用
      • 優(yōu)先級:位置參數(shù) > 默認(rèn)值參數(shù),位置參數(shù)一定要在默認(rèn)值參數(shù)前
                  
                    def msg(name, age, sex="男"):  # 混合參數(shù)
        dic = dict()
        dic["name"] = name
        dic["age"] = age
        dic["sex"] = sex
        return dic
    
    print(msg("zxd", 23))
    
                  
                
  2. 實(shí)參(實(shí)際參數(shù)):函數(shù)調(diào)用時(shí)填入的參數(shù)

    • 位置參數(shù):按位置照順序填入實(shí)際的參數(shù)
                  
                    def play(game, hero, take):  
     print(f"登陸{game}")
     print(f"選擇角色:{hero}")
     print(f"開始游戲:{take}")
     print("結(jié)束游戲")
    
    play("LOL", "卡莎", "發(fā)育、對線、打團(tuán)")
    play("DNF", "念皇", "刷深淵、打團(tuán)")  # 按照位置接收實(shí)參
    
                  
                
    • 關(guān)鍵字參數(shù):按照參數(shù)名字指定傳參,不用考慮位置順序
                  
                    def play(game, hero, take):  
     print(f"登陸{game}")
     print(f"選擇角色:{hero}")
     print(f"開始游戲:{take}")
     print("結(jié)束游戲")
    
    play(game="LOL", take="發(fā)育、對線、打團(tuán)", hero="卡莎")
    play(take="刷深淵、打團(tuán)", game="DNF", hero="念皇")  # 關(guān)鍵字參數(shù)
    
                  
                
    • 混合參數(shù):兩種參數(shù)混合使用
      • 優(yōu)先級:位置參數(shù) > 關(guān)鍵字參數(shù),位置參數(shù)必須寫在關(guān)鍵字參數(shù)之前
                  
                    def play(game, hero, take):  
     print(f"登陸{game}")
     print(f"選擇角色:{hero}")
     print(f"開始游戲:{take}")
     print("結(jié)束游戲")
    
    play("LOL", "卡莎", "發(fā)育、對線、打團(tuán)")
    play("DNF", "念皇", take="刷深淵、打團(tuán)")  # 混合參數(shù)
    
                  
                
  3. 傳參:傳參就是實(shí)際參數(shù)傳給形式參數(shù)的一個(gè)過程

    Python基礎(chǔ)(九)_第3張圖片

    • 紅色箭頭就是傳參的過程,將實(shí)參按照位置傳給形參
    • 綠色箭頭代表函數(shù)把接收到的參數(shù)分配給自己的函數(shù)體,此時(shí)和傳參沒有關(guān)系,通過相同的形參名將參數(shù)分配給函數(shù)體

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 柳河县| 长阳| 朔州市| 疏附县| 阿图什市| 手游| 望都县| 道孚县| 海丰县| 南陵县| 怀化市| 策勒县| 盐源县| 衡阳县| 辰溪县| 鹿泉市| 施秉县| 望江县| 白玉县| 建平县| 屏南县| 阿拉尔市| 新干县| 湖南省| 定襄县| 徐州市| 青州市| 临桂县| 广安市| 黔江区| 两当县| 广西| 淳化县| 东兰县| 焦作市| 绥芬河市| 两当县| 绩溪县| 宁蒗| 东兰县| 太仆寺旗|