我正在尝试这样做:
commands = {'py':'python%s','md':'markdown“%s”> “%s.html”; gnome-open“%s.html”',}
命令['md']%'file.md'
但是如你所见,命令['md']使用参数3次,但命令['py']只使用一次。如何在不更改最后一行的情况下重复参数(因此,只需将参数传递一次?)
答案 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”'