python函數的4種參數類型

總結 python 函數中的不同參數類型的使用方法。

在調用函數時,通常會傳遞參數,函數內部的代碼保持不變,針對 不同的參數 處理 不同的數據

有位置傳參、關鍵字傳參、默認值參數、多值參數等。

1、參數傳遞

形參和實參:

  • 形參定義 函數時的 參數變量
  • 實參調用 函數時,使用的參數變量

參數傳遞的過程,就是 把實參的引用 傳遞給 形參 ,使用實參的值來執行函數體的過程。

Python 中,函數的 實參/返回值 都是是靠 引用 來傳遞來的

2、位置實參

按照參數位置,依次傳遞參數,這是最普通的方式。

def location(a, b)
    print(a + b)

location(3, 9)
"調用函數時,按順序傳遞參數,3 傳給 a,9 傳給 b"

3、關鍵字實參

如果不想嚴格按照順序傳遞參數,也可以按關鍵字傳遞。

def location(a, b)
    print(a + b)

location(b = 3, a = 9)
"調用函數時,按關鍵字傳遞參數,3 傳給 b,9 傳給 a"

4、缺省參數

定義函數時,可以給 某個參數 賦值一個默認值,具有默認值的參數就叫做 缺省參數

  • 調用函數時,如果沒有傳入 缺省參數 的值,則在函數內部使用 參數默認值
  • 將常見的值設置爲參數的缺省值,從而 簡化函數的調用
    • 要使用 最常見的值 作爲默認值
    • 如果一個參數的值 不能確定,則不應該設置默認值,具體的數值在調用函數時,由外界傳遞!

例如:對列表排序的方法

gl_num_list = [6, 3, 9]

"默認就是升序排序,因爲這種應用需求更多"
gl_num_list.sort()
print(gl_num_list)

"只有當需要降序排序時,才需要傳遞 'reverse' 參數"
gl_num_list.sort(reverse=True)
print(gl_num_list)

缺省參數的定義位置:

  • 必須保證帶有默認值的缺省參數在參數列表末尾!

調用帶有多個缺省參數的函數:

  • 調用函數時,如果有 多個缺省參數需要指定參數名,這樣解釋器才能夠知道參數的對應關係!
def print_info(name, title="", gender=True):
    gender_text = "男生"

    if not gender:
        gender_text = "女生"

    print("%s%s 是 %s" % (title, name, gender_text))


# 提示:在指定缺省參數的默認值時,應該使用最常見的值作爲默認值!
print_info("小明")
print_info("老王", title="班長")
print_info("小美", gender=False)

5、多值參數

當函數需要處理的參數個數不確定時,可使用 多值參數

python 中有兩種多值參數:

  • 接收 元組:參數名前加 一個 *
  • 接收 字典:參數名前加 兩個 *

一般在給多值參數命名時,習慣使用以下兩個名字

  • *args — 存放 元組 參數
  • **kwargs — 存放 字典 參數,(kwkeywordkwargs鍵值對參數
def demo(num, *args, **kwargs):

    print(num)
    print(args)
    print(kwargs)

demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)

輸出:
1
(2, 3, 4, 5)
{'name': '小明', 'age': 18, 'gender': True}

拆包

在上面多值參數傳遞時,實際上使用了拆包功能。

拆包主要用於元組和字典參數的傳遞。

在調用帶有多值參數的函數時,使用拆包簡化參數的傳遞:

  • 直接將一個 元組變量 實參傳遞給元組形參 args
    • 元組變量前,加 *
  • 直接將一個 字典變量 實參傳遞給字典形參 kwargs
    • 字典變量前,加 **
def demo(*args, **kwargs):

    print(args)
    print(kwargs)

gl_nums = (1, 2, 3)
gl_xiaoming = {"name": "小明", "age": 18}

"變量名前必須要加 * 號,否則不能無法正常拆包"

"錯誤演示(不加 * 號):"
demo(gl_nums, gl_xiaoming)
輸出:
((1, 2, 3), {'name': '小明', 'age': 18})
{}

"正確演示(加 * 號):"
demo(*gl_nums, **gl_xiaoming)
輸出:
(1, 2, 3)
{'name': '小明', 'age': 18}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章