将列表中的一组不同参数传递给函数

时间:2019-08-05 09:59:08

标签: python python-3.x

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

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)

但是这也不起作用,因为它只是连接了每个参数,并用逗号将其分隔。

如何在不创建重复列表的情况下将一组不同的参数传递给函数?

3 个答案:

答案 0 :(得分:6)

您需要做的就是使用*解压缩参数列表:

>>> 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']

答案 1 :(得分:4)

首先,请注意将params的默认参数定义为列表:python中的mutable default参数会导致难以发现的错误

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

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

答案 2 :(得分:1)

您需要连接列表:

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']