簡體   English   中英

如何打印 args 和 kwargs 的列表

[英]How to print the list of args and kwargs

在我的代碼中,我有很多地方將一個函數及其參數傳遞給另一個函數。 出於調試目的,我想打印函數的名稱和參數列表。 例如

def process(f, *args, **kwargs):
    print("processing " + print_func(f, args, kwargs))

process(myfunc, 1,2, a="A",b=0)的預期輸出應該是"processing myfunc(1,2,a="A", b=0)"

我在打印args方面取得了一些進展,如下所示:

def print_func(f, *args, **kwarg):
    func_str = f.__name__ + "("
    if len(args) > 0:
        func_str = func_str + (', '.join(['%.2f']*len(x)) % args)
     func_str = func_str + ")"

在上面的例子中將產生輸出processing myfunc(1,2)

我的問題是如何打印 kwargs。 我無法找出使用動態格式字符串的類似解決方案,將其打印為由“,”分隔的k=v對序列。

任何建議將不勝感激。

要格式化argskwargs ,您可以簡單地遍歷它們並創建您的字符串表示

def process(my_func, *args, **kwargs):

    #Iterate over all args, convert them to str, and join them
    args_str = ','.join(map(str,args))

    #Iterater over all kwargs, convert them into k=v and join them
    kwargs_str = ','.join('{}={}'.format(k,v) for k,v in kwargs.items())

    #Or using f-strings
    #kwargs_str = ','.join(f'{k}={v}' for k,v in kwargs.items()

    #Form the final representation by adding func name
    return "processing {}({})".format(my_func.__name__, ','.join([args_str,kwargs_str]))

    #Or using f-strings
    #return f"processing {my_func.__name__}({','.join([args_str,kwargs_str])})"

print(process(my_func, 1,2, a="A",b=0))

輸出將是

processing my_func(1,2,a=A,b=0)

您可以通過創建這樣的注釋來做到這一點

def printArgs(my_func):
    def wrapper(*arg, **kwargs):
        print("{}({})".format(my_func.__name__, ','.join([str(arg),str(kwargs)])))
        return my_func(*arg, **kwargs)
    return wrapper

@printArgs
def a_function_where_you_want_to_print_args(arg1, arg2, arg3="arg3"):
    pass

a_function_where_you_want_to_print_args(1,2, arg3="b")

這將打印“a_function_where_you_want_to_print_args((1, 2),{'arg3': 'b'})”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM