簡體   English   中英

傳遞給函數的打印參數

[英]Print parameters passed to the function

是否有pythonic方式打印傳遞給函數的所有參數?

我有一個類似下面的功能......

def modify_setting(self, keyword, method=None, value=None, limit=None, parameter=None):

當我調用這個函數時,我不會將每個參數傳遞給參數。 我想到的只是詳細地調用每個參數,如下所示,但這會產生我不想要的結果。

print "{} Modified: {}, {}, {}, {}".format(keyword,  method, value, limit, parameter)

結果:

Acquisition Mode Modified: Static, 10, None, None

我想要的(或類似的):

Acquisition Mode Modified: Static, 10

如果所有默認值都為None ,則只需打印不是的變量:

print "{} Modified: {}".format(keyword,  method, ", ".join( [str(v) for v in (value, limit, parameter) if not v is None]))

您可以更好地構建代碼:

vars= (value, limit, parameter)
vars_str= ", ".join( [str(v) for v in vars if not v is None]
print "{} Modified: {}".format(keyword,  method, vars_str)

你可以使用裝飾器 - 我想裝飾器是pythonic:

def dump_args(func):
    "This decorator dumps out the arguments passed to a function before calling it"
    argnames = func.func_code.co_varnames[:func.func_code.co_argcount]
    fname = func.func_name

    def echo_func(*args,**kwargs):
        print fname, ":", ', '.join(
            '%s=%r' % entry
            for entry in zip(argnames,args) + kwargs.items())
        return func(*args, **kwargs)

    return echo_func

@dump_args
def f1(a,b,c):
    print a + b + c

>>> f1(1, 2, 3)
f1 : a=1, b=2, c=3
6
>>>

@dump_args
def f2(a, b = None, c = None):
    print '{}/{}/{}'.format(a, b, c)

>>> f2(1, c = 3)
f2 : a=1, c=3
1/None/3
>>>

裝飾器在這里找到: https//wiki.python.org/moin/PythonDecoratorLibrary

暫無
暫無

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

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