2010-06-04 4 views
4

Je suis en train de le faire:paramètre passe une fois, mais utiliser plusieurs fois

commandes = { 'py': 'python% s', 'md': « démarquage "% s"> "% s.html"; gnome-open "% s.html" »,}

commandes [ 'md']% 'file.md'

Mais comme vous le voyez, les commmands [ 'md'] utilise le paramètre 3 fois, mais les commandes ['py'] utilisent juste une fois. Comment est-ce que je peux répéter le paramètre sans changer la dernière ligne (ainsi, juste en passant le paramètre une fois?)

+0

Quelle version de Python? –

Répondre

10

Remarque: La réponse acceptée, bien qu'elle fonctionne pour les versions plus anciennes et plus récentes de Python, est déconseillée dans les versions plus récentes de Python.

Comme str.format() est relativement récent, beaucoup de code Python utilise toujours l'opérateur%. Cependant, étant donné que cet ancien style de formatage sera éventuellement supprimé du langage, str.format() devrait généralement être utilisé.

Pour cette raison, si vous utilisez Python 2.6 ou plus récent, vous devez utiliser str.format au lieu de l'ancien opérateur %:

>>> 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"' 
+0

Merci beaucoup. Cela a fonctionné pour moi. –

+0

Merci pour vos conseils. Je vais utiliser cette solution. –

1

Si vous ne l'utilisez 2.6 ou si vous voulez utiliser les% s les symboles sont ici d'une autre manière:

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

'markdown "fichier.md"> "fichier.md.html"; gnome-open « file.md.html » »

+0

nah, l'utilisation de cartes au lieu de sequnce en% de mise en forme était là depuis au moins python 2.4. En outre, votre exemple ne fonctionnera pas avec l'autre valeur, 'commands ['py']% tuple (['some.file'] * 3)' –

3

Si vous n'utilisez pas 2.6 vous pouvez mod la chaîne avec un dictionnaire à la place:

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

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

Le%() la syntaxe fonctionne avec tout de la normale % formatter types et accepte les autres options habituelles: http://docs.python.org/library/stdtypes.html#string-formatting-operations

+0

Fonctionne même avec les anciens pythons. Agréable! –

+0

Je pense à python2.6, la deuxième ligne devrait être: commandes [ 'md']% { 'fichier': 'file.md'} sinon il y a un KeyError –

+0

@xiao, yup, mon mauvais. J'ai fait trop de Javascript dernièrement :) – lambacck

Questions connexes