Передайте параметр один раз, но используйте больше раз - PullRequest
4 голосов
/ 05 июня 2010

Я пытаюсь сделать это:

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

команды [' md ']%' file.md '

Но, как вы видите, команды [' md '] использует параметр 3 раза, но команды ['py'] просто используют один раз.Как я могу повторить параметр без изменения последней строки (так, просто передав параметр один раз?)

Ответы [ 3 ]

11 голосов
/ 05 июня 2010

Примечание. Принятый ответ, хотя и работает как для более старых, так и для более новых версий 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"'
3 голосов
/ 05 июня 2010

Если вы не используете 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 работает с любыми обычными типами форматирования% и принимает обычные другие параметры: http://docs.python.org/library/stdtypes.html#string-formatting-operations

1 голос
/ 05 июня 2010

Если вы не используете 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" '

...