[Python --- 6] python中的 * 和 ** 的用法

一. 算數運算

  • * 代表乘法
  • ** 代表乘方
x = 2

y = x * x;
# y: 4

z = x ** 2;
# z: 4

二. 函數形參

*args 和 **kwargs都可以傳遞不定數量的參數。

python有以下四種參數傳遞方式

(1) function(a, b, c): 直接將實參賦予行參,根據位置做匹配

(2) function(a = 1, b = 2, c = 3): 根據鍵值對的形式做實參與行參的匹配,通過這種式就可以忽略了參數的位置關係,直接根據關鍵字來進行賦值

# function(2, 3) ==> function(a = 2, b = 3, c = 3)  可省略後部分參數
# function(c = 1, b = 2, a = 3) ==> function(a = 3, b = 2, c = 1)  可改變參數順序

(3) function(*args): 可以傳入任意個參數,這些若干參數都被放到了tuple元組中賦值給行參args
# 但本質上需要保證參數的順序

def test(a, b, c):
    return a + b + c
input = (a, b, c)  # 本質上傳遞一個tuple,需要滿足參數數量的限制
test(*input)

(4) function(**kwargs): 以鍵值對字典的形式向函數傳參,沒有位置和參數數量的限制

def test(a, b, c):
    return a + b + c
input = {"a": 2, "b": 2, "c": 2}
test(**input) 

python傳遞參數的方式有兩種

  • 位置參數 (positional argument)
  • 關鍵詞參數 (keyword argument)

*args 表示任何多個無名參數,它本質是一個 tuple

def fun(name, *args):
    print('你好:', name)
    for i in args:
        print("你的寵物有:", i)

fun("Geek", "dog", "cat")
# 你好: Geek
# 你的寵物有: dog
# 你的寵物有: cat

**kwargs 表示關鍵字參數,它本質上是一個 dict

def fun(**kwargs):
    for key, value in kwargs.items():
        print("{0} 喜歡 {1}".format(key, value))

fun(Geek="cat", cat="box")
# Geek 喜歡 cat
# cat 喜歡 box

如果同時使用 *args 和 **kwargs,*args需要放在**kwargs之前

def fun(*args, **kwargs):
    print('args=', args)
    print('kwargs=', kwargs)

fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
# args= (1, 2, 3, 4)
# kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}

三. 函數實參

如果函數的形參是定長參數,可利用*args和**kwargs作爲實參,傳遞給函數

def add(a, b, c):
    return a + b + c

args = (1, 2, 3)
add(*args)

kwargs = {"a": 1, "b": 2, "c": 3)
add(**kwargs)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章