我正在尝试将参数列表传递给我创建的函数。
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)
但是这也不起作用,因为它只是连接了每个参数,并用逗号将其分隔。
如何在不创建重复列表的情况下将一组不同的参数传递给函数?
答案 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']