1. 程式人生 > >Python 函式定義及呼叫(2)——引數詳解

Python 函式定義及呼叫(2)——引數詳解

目錄

一、函式的引數和返回值

(1)引數: 負責給函式傳遞一些必要的資料或者資訊

  • 形參(形式引數): 在函式定義的時候用到的引數沒有具體值,只是一個佔位的符號,成為形參;
  • 實參(實際引數): 在呼叫函式的時候輸入的值。

(2)返回值: 函式的執行結果

  • 使用return關鍵字;
  • 如果沒有return,預設返回一個None;
  • 函式一旦執行return語句,則無條件返回,即結束函式的執行;

引數分類:

(1)普通引數;(2)預設引數;(3)關鍵字引數;(4)收集引數。

二、舉例說明 

1、普通引數

形式:

 def 函式名(引數1, 引數2,....):
                函式體

 # 呼叫
 函式名(value1, value2,.......)

 # 呼叫的時候,具體值參考的是位置,按位置賦值

例如:

def hello(person):
    print("大家好,我是函式{0}".format(person))
    return "我結束了,啦啦啦"

p = "XiaoMing"
rst = hello(p) # 呼叫函式 hello
print(rst)

執行結果:

2、預設引數

(1)形參帶有預設值;

(2)呼叫的時候,如果沒有對相應形參賦值,則使用預設值。

形式:

def func_name(p1=v1, p2=v2..........):
    函式體


# 呼叫1
func_name()

# 呼叫2
value1 = 100
value2 = 200
func_name(value1, value2)

例如:

# 預設引數示例
# 報名函式,需要知道學生性別
# 學習python的學生基本都是男生,所以,報名的時候如果沒有特別指定,我們預設是男生
def reg(name, age, gender="male"):
    if gender == "male":
        print("{0} is {1}, and he is a good student".format(name, age))
    else:
        print("{0} is {1}, and she is a good student".format(name, age))
        


# 呼叫
reg("mingyue", 21)  # 沒有給第三個引數的值,則使用預設值

reg("xiaojing", 23, "female")  

執行結果:

3、關鍵字引數

形式:

def func(p1=v1, p2=v2.....):
    func_body


呼叫函式:
func(p1=value1, p2=value2.......)

從形式上看,比較麻煩,但是有以下優點:

(1)不容易混淆, 一般實參和形參只是按照位置一一對應即可,容易出錯

(2)使用關鍵字引數,可以不考慮引數位置

例如:

# 普通引數案例
def stu(name, age, addr):
    print("I am a student")
    print("我叫 {0}, 我今年 {1}歲了, 我住{2}".format(name, age, addr))


n = "jingjing"
a = 18
addr = "我家"

# 普通引數,只按照位置傳遞,容易出錯
stu(a, n, addr)
print("-" * 50)

# 對於關鍵字引數 案例
def stu_key(name="No name", age=0, addr="No addr"):
    print("I am a student")
    print("我叫 {0}, 我今年 {1}歲了, 我住{2}".format(name, age, addr))

n = "jingjing"
a = 18
addr = "我家"

執行結果:

4、 收集引數

(1)把沒有位置,不能和定義時的引數位置相對應的引數,放入一個特定的資料結構中。

(2)引數名args不是必須這麼寫,但是,我們推薦直接用args,約定俗成 引數名args前需要由星號

(3)收集引數可以和其他引數共存

形式:

def func(*args):
    func_body
    # 按照list使用方式訪問args得到傳入的引數


#呼叫:
func(p1, p2, p3, .....)

例如:

# 函式模擬一個學生進行自我介紹,但具體內容不清楚
# args把他看做一個list
def stu(*args):
    print("Hello 大家好,我自我介紹以下,簡答說兩句:")

    print(type(args)) # type函式作用是檢測變數的型別
    for item in args:
        print(item)


stu("Xiaoming", 18, "浙江省杭州市", "愛好:喜歡打籃球")

print("-" * 50)

stu("Xiaohong")

執行結果:

5、 收集引數之關鍵字收集引數

(1)把關鍵字引數按字典格式存入收集引數;

(2)kwargs一般約定俗成;

(3)呼叫的時候,把多餘的關鍵字引數放入kwargs;

(3)訪問kwargs需要按字典格式訪問。

形式:

def func(**kwargs):
    func_body


# 呼叫:
func(p1=v1, p2=v2, p3=v3........)

例如:

# 自我介紹
# 呼叫的時候需要使用關鍵字引數呼叫
def stu(**kwargs):
    # 在函式體內對於kwargs的使用不用帶星號
    print("Hello 大家好,我先自我介紹一下:")
    print(type(kwargs))

    for k, v in kwargs.items():
        print(k, "---", v)


stu(name="Xiaoming", age=18, addr="浙江省杭州市", hobby="Play basketball") # 呼叫1

print("-" * 50)

stu(name="Xiaohong") # 呼叫2

執行結果:

參考資料