传递参数一次,但使用次数更多

时间:2010-06-04 23:18:49

标签: python parameters string-formatting repeat

我正在尝试这样做:

  

commands = {'py':'python%s','md':'markdown“%s”> “%s.html”; gnome-open“%s.html”',}

     

命令['md']%'file.md'

但是如你所见,命令['md']使用参数3次,但命令['py']只使用一次。如何在不更改最后一行的情况下重复参数(因此,只需将参数传递一次?)

3 个答案:

答案 0 :(得分:11)

注意:在较新版本的Python中,不鼓励接受的答案,虽然它适用于较旧版本和较新版本的Python。

  

由于str.format()很新,很多Python代码仍然使用%运算符。但是,因为这种旧的格式化格式最终会从语言中删除,所以通常应该使用str.format()。

因此,如果您使用的是Python 2.6或更高版本,则应使用str.format而不是旧的%运算符:

>>> commands = {
...     'py': 'python {0}',
...     'md': 'markdown "{0}" > "{0}.html"; gnome-open "{0}.html"',
... }
>>> commands['md'].format('file.md')
'markdown "file.md" > "file.md.html"; gnome-open "file.md.html"'

答案 1 :(得分:3)

如果您不使用2.6,则可以使用字典来修改字符串:

commands = { 'py': 'python %(file)s', 'md': 'markdown "%(file)s" > "%(file)s.html"; gnome-open "%(file)s.html"', }

commands['md'] % { 'file': 'file.md' }

%()s语法适用于任何普通的%formatter类型,并接受通常的其他选项:http://docs.python.org/library/stdtypes.html#string-formatting-operations

答案 2 :(得分:1)

如果您没有使用2.6或想要使用这些%s符号,请使用另一种方法:

>>> commands = {'py': 'python %s',
...             'md': 'markdown "%s" > "%s.html"; gnome-open "%s.html"'
... }
>>> commands['md'] % tuple(['file.md'] * 3)

'markdown“file.md”> “file.md.html”; gnome-open“file.md.html”'