1. 程式人生 > 其它 >python-裝飾器-被裝飾函式帶參(入參*args、**kwargs學習)

python-裝飾器-被裝飾函式帶參(入參*args、**kwargs學習)

import time
# 裝飾函式
def show_time(func):
    def inner(*args,**kwargs):
        begin_time = time.time()
        func(*args,**kwargs)
        end_time = time.time()
        print('伺服器響應時間:',end_time-begin_time)
    return inner

# 被裝飾函式,有入參
@show_time
def foo(test_case_name):
    print(test_case_name)
    time.sleep(1)
    
# foo = show_time(foo)
foo('有入參')

一、*args

【1】*args:表示位置引數,入參型別是列表或者元祖,傳送一個非鍵值對的可變數量的引數列表給函式

【2】*:會把傳入的多個引數打包成元祖,賦值給形參args

# *args:傳送一個非鍵值對的可變數量的引數列表給函式
# * :會把傳入的多個引數打包成元祖,賦值給形參args
def fun1(*args):
    print(args)
fun1(1) # 1
fun1(1,2) # 1 2
fun1((1,2),1) # (1,2) 1
fun1([1,2],2) # [1,2] 2
fun1('aaaaaa')
# fun1(a=1,b=2) # 關鍵字引數不行,會報錯

二、**kwargs

【1】**kwargs:傳送一個鍵值對的可變數量的引數列表給函式

【2】**:會把傳入的多個鍵值對打包成字典,賦值給kwargs

# **kwargs:傳送一個鍵值對的可變數量的引數列表給函式
# ** :會把傳入的多個鍵值對打包成字典,賦值給kwargs
def fun2(**kwargs):
    print(kwargs)
fun2(a=1) # {'a': 1}
fun2(a=1,b=2) # {'a': 1, 'b': 2}