Python中函数的参数的附加处理

时间:2014-10-17 16:57:42

标签: python arguments

在编写一个小型库时,我发现需要清理函数所有参数的输入,如下所示:

import subprocess
import pipes

def copy(src, dst, id_file='/path/to/key'):
    src = pipes.quote(src)
    dest = pipes.quote(dest)
    id_file = pipes.quote(id_file)

    subprocess.check_output('scp -r -i %s %s %s' % (id_file, src, dest))

不是通过pipes.quote()显式运行每个参数,而是如何更优雅地执行此操作,以及任何数量的参数(包括* args和** kwargs,如果存在)?

1 个答案:

答案 0 :(得分:1)

大多数子流程函数接受参数列表:

subprocess.check_output(['scp', '-r', '-i', id_file, src, dest])

不再需要引用。

这很好地概括为*args

def foo(*args, **kwargs):
    call_args = ['scp', '-r', '-i']
    call_args.extend(args)
    call_args.extend(arg for item in kwargs.items() for arg in item)
    subprocess.check_output(call_args)

当然,对于kwargs,你永远不知道他们在最终的通话中会以什么顺序结束。 。