Exemple Ruby:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
La concaténation réussie de la chaîne Python est apparemment verbeuse pour moi.
Exemple Ruby:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
La concaténation réussie de la chaîne Python est apparemment verbeuse pour moi.
Réponses:
Python 3.6 ajoutera une interpolation de chaîne littérale similaire à l'interpolation de chaîne de Ruby. À partir de cette version de Python (dont la sortie est prévue fin 2016), vous pourrez inclure des expressions dans les "f-strings", par exemple
name = "Spongebob Squarepants"
print(f"Who lives in a Pineapple under the sea? {name}.")
Avant la 3.6, le plus proche de vous est
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? %(name)s." % locals())
L' %
opérateur peut être utilisé pour l' interpolation de chaînes en Python. Le premier opérande est la chaîne à interpoler, le second peut avoir différents types, y compris un "mappage", mappant les noms de champ aux valeurs à interpoler. Ici, j'ai utilisé le dictionnaire des variables locales locals()
pour mapper le nom du champ name
à sa valeur en tant que variable locale.
Le même code utilisant la .format()
méthode des versions récentes de Python ressemblerait à ceci:
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? {name!s}.".format(**locals()))
Il y a aussi la string.Template
classe:
tmpl = string.Template("Who lives in a Pineapple under the sea? $name.")
print(tmpl.substitute(name="Spongebob Squarepants"))
%s
pour une chaîne et %03d
pour un nombre complété à 3 chiffres avec des zéros en tête. Cela pourrait simplement être écrit print "%s has %03d" % ("Python", 2)
. L'exemple utilise ensuite de mettre une clé de mappage entre crochets après le %
qui est un moyen de donner aux espaces réservés des noms significatifs plutôt que de se fier à leur ordre dans la chaîne. Vous passez ensuite un dictionnaire qui mappe les noms de clé à leurs valeurs. C'est pourquoi Sven utilise la locals()
fonction qui retourne un dict contenant toutes vos variables locales afin qu'il soit mappé name
à la valeur du nom
s
comme type de conversion - Python peut convertir à peu près n'importe quoi en chaîne. Mais bien sûr, vous perdriez les capacités de formatage spéciales des autres types de conversion.
Depuis Python 2.6.X, vous pouvez utiliser:
"my {0} string: {1}".format("cool", "Hello there!")
%
opérateur d'interpolation de chaîne n'est pas obsolète dans Python 3.x. docs.python.org/dev/py3k/whatsnew/… annonce le plan de dépréciation à %
partir de la 3.1, mais cela ne s'est jamais produit.
{}
peut être éliminé.
J'ai développé le paquet interpy , qui permet l'interpolation de chaînes en Python .
Installez-le via pip install interpy
. Et puis, ajoutez la ligne # coding: interpy
au début de vos fichiers!
Exemple:
#!/usr/bin/env python
# coding: interpy
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n#{name}."
L'interpolation de chaînes de Python est similaire à printf () de C
Si tu essayes:
name = "SpongeBob Squarepants"
print "Who lives in a Pineapple under the sea? %s" % name
La balise %s
sera remplacée par la name
variable. Vous devriez jeter un œil aux balises de fonction d'impression: http://docs.python.org/library/functions.html
print "First is %s, second is %s" % (var1, var2)
.
L'interpolation de chaînes va être incluse avec Python 3.6 comme spécifié dans PEP 498 . Vous pourrez le faire:
name = 'Spongebob Squarepants'
print(f'Who lives in a Pineapple under the sea? \n{name}')
Notez que je déteste Spongebob, donc écrire cela a été légèrement douloureux. :)
Vous pouvez également avoir ceci
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n{name}.".format(name=name)
#
imprimer. Ils utilisent simplement la syntaxe Ruby.
#
personnage serait imprimé.
import inspect
def s(template, **kwargs):
"Usage: s(string, **locals())"
if not kwargs:
frame = inspect.currentframe()
try:
kwargs = frame.f_back.f_locals
finally:
del frame
if not kwargs:
kwargs = globals()
return template.format(**kwargs)
Usage:
a = 123
s('{a}', locals()) # print '123'
s('{a}') # it is equal to the above statement: print '123'
s('{b}') # raise an KeyError: b variable not found
PS: les performances peuvent être un problème. Ceci est utile pour les scripts locaux, pas pour les journaux de production.
Dupliqué:
Pour l'ancien Python (testé sur 2.4), la meilleure solution montre le chemin. Tu peux le faire:
import string
def try_interp():
d = 1
f = 1.1
s = "s"
print string.Template("d: $d f: $f s: $s").substitute(**locals())
try_interp()
Et vous obtenez
d: 1 f: 1.1 s: s
Python 3.6 et plus récent ont une interpolation de chaîne littérale utilisant des chaînes f:
name='world'
print(f"Hello {name}!")
name
s'agit d'une variable locale située dans la chaîne, et en Python, vous devez passer explicitement le dictionnaire des variables locales au formateur de chaînes si vous voulez qu'il les utilise.