将一组不同的参数以列表的形式传递给函数

2024-04-25 06:21:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将参数列表传递给我创建的函数。你知道吗

def pdftotext(params=[], layout='-layout'):
    cmd = ['pdftotext', params, '-layout']
    return cmd

我这样称呼它:

text = pdftotext(params=['-f', '1', '-l', '2'])  
return text              

这将产生以下结果:

[
  "pdftotext",
  [
    "-f",
    "1",
    "-l",
    "2"
  ],
  "-",
  "-layout"
]

但是,如您所见,在传递params=[]的地方添加了一个额外的[]。你知道吗

我尝试将参数转换为字符串,例如:

params = ','.join(params)

但这也不起作用,因为它只是连接每个参数并用逗号分隔。你知道吗

如何将一组不同的参数传递给函数,而不创建一个双列表?你知道吗


Tags: 函数字符串textcmd列表参数returndef
3条回答

您只需使用*解压参数列表:

>>> params = ['-f', '1', '-l', '2']

>>> ['pdftotext', params, '-layout']
['pdftotext', ['-f', '1', '-l', '2'], '-layout']

>>> ['pdftotext', *params, '-layout']
['pdftotext', '-f', '1', '-l', '2', '-layout']

最好使用更动态的方法,将params更改为varargs参数:

def pdftotext(*params, layout='-layout'):
    cmd = ['pdftotext', *params, '-layout']
    return cmd

现在可以传递任意数量的参数:

>>> print(pdftotext('-f', '1', '-l', '2'))
['pdftotext', '-f', '1', '-l', '2', '-layout']

如果您无法控制输入,并且希望使用params作为列表,您仍然可以执行以下操作:

>>> print(pdftotext(*['-f', '1', '-l', '2']))
['pdftotext', '-f', '1', '-l', '2', '-layout']

您需要连接列表:

cmd = ['pdftotext'] + params + ['-layout']

当你看到它在行动时:

>>> params=['-f', '1', '-l', '2']
>>> cmd = ['pdftotext', params, '-layout']
>>> cmd
['pdftotext', ['-f', '1', '-l', '2'], '-layout']
>>> cmd = ['pdftotext'] + params + ['-layout']
>>> cmd
['pdftotext', '-f', '1', '-l', '2', '-layout']

首先,请注意将params的默认参数定义为一个列表:mutabledefault参数在python中可能会导致难以找到的bug

要解决主要问题,可以使用unpacking

cmd = ['pdftotext', *params, '-layout']

相关问题 更多 >