1. 程式人生 > >Python--初識函數

Python--初識函數

class 容易 但是 pri 動態 指定 func 部分 *args

一:定義

  對於代碼塊和功能的封裝和定義

二:函數的定義, 函數名, 函數體以及函數的調用

  我們使用def關鍵字來定義函數, 函數的定義語法:

    

def 函數名():
    函數體

  函數名的命名規則和變量基本一致,

  函數體就是函數被執行之後要執行的代碼

  函數名()的形式用來調用函數.

三:函數的返回

  return關鍵字會中斷函數,並返回一個返回值

  關於返回值:

    如果return什什麽都不寫 或者 ?幹脆不寫return .那麽返回的就是None
    如果return後?面寫了了?一個值. 則調?用者可以接收?一個結果
    如果return後?面寫了了多個結果, 則調?用者可以接收?一個tuple, 調?用者可以直接解構成多個變量

四:函數的參數

    

def 函數名(參數):
    函數體

    首先,需要明確兩個概念,形參和實參

      形參:寫在聲明位置的變量叫做形參,它表示形式上的完整,表示這個函數需要xxx

      實參:函數調用的時候傳遞給函數的值,表示給函數xxx

    傳參:將實參交給形參的過程叫做傳參

    4.1 實參的分類

      1.位置參數:傳參時按照位置順序分別將實參傳遞給形參,解釋器默認按照位置傳參.

        

def yue(chat, address, age): # 形參
print("拿出手機")
print("打開"+chat)
print("
找個"+address+"附近漂亮的"+str(age)+"歲妹子") print("約不約") yue("微信", "北京", 18) # 實參 結果: 拿出手機 打開微信 找個北京附近漂亮的18歲妹子 約不約

      2.關鍵字參數:不按照位置傳參,按照參數名字傳參

      

def yue(chat, address, age):
print("拿出手機")
print("打開"+chat)
print("找個"+address+"附近漂亮的"+str(age)+"歲妹子")
print("約不約")
yue(chat="微信", age=18, address="北北京") #
關鍵字參數. 結果: 拿出手機 打開微信 找個北京附近漂亮的18歲妹子 約不約

      3.混合參數:將上述兩種參數混合使用,但是位置參數必須在關鍵字參數前邊

  

# 混合參數
yue("微信", age=18, address="上?") # 正確.第一個位置賦值給chat, 後面的參數開始指定關鍵字.
yue(age="18", "微信", address="廣州") # 錯誤, 最開始使用了關鍵字參數, 那麽後面的微信的位置就串了, 容易出現混亂

    4.2 形參的分類

      1.位置參數:同實參的位置參數,很容易理解

      2.默認值參數:當這個參數不傳實參的時候,使用默認的值,需要在位置參數的後邊

    

#比如, 我們錄入一個班學生的基本信息. 通過調查發現.大部分學生都是男生. 這個時候就可以給出一個sex=‘男‘的默認值.
def stu_info(name, age, sex=):
    print("錄入學生信息")
    print(name, age, sex)
    print("錄入完畢")
stu_info("張強", 18)

      3.動態參數

        3.1 動態接受位置參數, 動態參數必須在位置參數之後,在默認值參數之前, *表示接受任意內容

def chi(*food):
    print("我要吃", food)
chi("大米飯", "小米飯")
結果:
我要吃 (大米飯, 小米飯) # 多個參數傳遞進去. 收到的內容是元組tuple

        3.2 動態接收關鍵字參數,使用** 標誌

 

def func(**kwargs):
    print(kwargs)
func(a=1, b=2, c=3)
func(a=1, b=2)
結果:
{a: 1, b: 2, c: 3}
{a: 1, b: 2}

     幾種參數最終的排序:位置參數 > *args > 默認值參數 > **kwargs

    如果想接收所有類型的參數,可以使用def func(*args, **kwargs):的形式,可以接收任何類型的參數,源碼中很多方法都是這種形式.

    4 動態傳參的另一種方式

      

def fun(*args):
    print(args)
lst = [1, 4, 7]
fun(lst[0], lst[1], lst[2])
fun(*lst) # 可以使用*把一個列表按順序打散
s = "臣妾做不到"
fun(*s) # 字符串也可以打散, (可叠代對象)

      在實參位置上給一個序列,列表,可叠代對象前面加個*表示把這個序列按順序打散,在形參的位置上的* 表?示把接收到的參數組合成一個元組,如果是一個字典, 那麽也可以打散. 不過需要用兩個*

def fun(**kwargs):
    print(kwargs)
dic = {a:1, b:2}
fun(**dic)

          

Python--初識函數