2017-06-26 3 views
0

Comment transformer un classique string en un f-string? :Transformer une chaîne en f-string

variable = 42 
user_input = "The answer is {variable}" 
print(user_input) 

La réponse est {variable}

f_user_input = # Here the operation to go from a string to an f-string 
print(f_user_input) 

La réponse est 42

+0

Une chaîne f est ** syntaxe **, pas un type d'objet. Vous ne pouvez pas convertir un modèle en une syntaxe de ce type. –

Répondre

2

Un f-chaîne est syntaxe, pas un type d'objet . Vous ne pouvez pas convertir une chaîne arbitraire à cette syntaxe, la syntaxe crée un objet chaîne, et non l'inverse.

Je suppose que vous voulez utiliser user_input comme modèle, donc il suffit d'utiliser la str.format() method sur l'objet user_input:

variable = 42 
user_input = "The answer is {variable}" 
formatted = user_input.format(variable=variable) 

Si vous voulez fournir un service de templating configurable, créer un dictionnaire d'espace de noms avec tous champs qui peuvent être interpolées, et utiliser str.format() avec la syntaxe d'appel **kwargs à appliquer l'espace de noms:

namespace = {'foo': 42, 'bar': 'spam, spam, spam, ham and eggs'} 
formatted = user_input.format(**namespace) 

l'utilisateur peut alors utiliser l'une des clés i n l'espace de noms dans les champs {...} (ou aucun, les champs inutilisés sont ignorés).

+0

Très bien, merci (ne peut pas encore accepter). Comment traiter un nombre inconnu de '{}'? –

+0

@fmalaussena: passer dans un dictionnaire avec un espace de noms, en utilisant la syntaxe '** kwargs'. Donc 'template.format (** namespace)', où 'namespace' est un dictionnaire avec tous les noms autorisés qui peuvent être interpolés par l'utilisateur. –

+0

Ok, je pense que je comprends. Mais quel devrait être le format de 'namespace'? –

1
variable = 42 
    user_input = "The answer is {variable}" 
    # in order to get The answer is 42, we can follow this method 
print (user_input.format(variable=variable)) 
(or) 
    user_input_formatted = user_input.format(variable=variable) 
    print (user_input_formatted) 
    Good link https://cito.github.io/blog/f-strings/