python - Comment formater un nombre variable d'arguments en une chaîne?
Nous savons que le formatage un argument peut être fait en utilisant un %s
dans une chaîne de caractères:
>>> "Hello %s" % "world"
'Hello world'
deux arguments, nous pouvons utiliser deux %s
(duh!):
>>> "Hello %s, %s" % ("John", "Joe")
'Hello John, Joe'
Alors, comment puis-je formater un nombre variable d'arguments sans avoir à définir de manière explicite au sein de la chaîne de base un certain nombre de %s
égal au nombre d'arguments de format? il serait très cool si quelque chose comme cela existe:
>>> "Hello <cool_operator_here>" % ("John", "Joe", "Mary")
Hello JohnJoeMary
>>> "Hello <cool_operator_here>" % ("John", "Joe", "Mary", "Rick", "Sophie")
Hello JohnJoeMaryRickSophie
Est-ce encore possible ou la seule chose que je puisse faire est de faire quelque chose comme:
>>> my_args = ["John", "Joe", "Mary"]
>>> my_str = "Hello " + ("".join(["%s"] * len(my_args)))
>>> my_str % tuple(my_args)
"Hello JohnJoeMary"
NOTE: je besoin de le faire avec la %s
mise en forme de chaîne de l'opérateur.
Mise à JOUR:
Il doit être avec l' %s
parce que d'une fonction d'une autre bibliothèque, les formats de ma chaîne à l'aide de l'opérateur étant donné que je passe sans mise en forme de chaîne et les arguments pour le formater, mais il fait quelques vérifications et corrections (si nécessaire) sur les arguments avant de réellement faire la mise en forme.
Donc j'ai besoin de l'appeler:
>>> function_in_library("Hello <cool_operator_here>", ["John", "Joe", "Mary"])
"Hello JohnJoeMary"
Merci pour votre aide!
source d'informationauteur Gerard
Vous devez vous connecter pour publier un commentaire.
Que vous souhaitez utiliser
str.join()
sur la liste sans mise en forme de chaîne, puis interpoler les résultat:Démo:
Si certains de vos arguments ne sont pas encore des chaînes, utilisez une compréhension de liste:
ou de l'utilisation
map(str, ...)
:Vous feriez la même chose avec votre fonction:
Si vous êtes limité par un (plutôt arbitraire) de restriction que vous ne pouvez pas utiliser un
join
dans l'interpolation de la liste d'arguments, l'utilisation d'unjoin
pour créer la chaîne de mise en forme à la place: