[python3] problème format avec tuple

Bonjour

Par exemple j’ai un tuple de deux éléments t=(‘bbbboooo’, ‘qqqqq’)
Pour afficher dans un texte j’utilise

Il n’y a pas moyen de faire un print(’{} et {}’.format(t) ) ?

deuxième question:
J’ai un tuple de deux éléments de type byte par exemple
t=(b’bbbboooo’, b’qqqqq’)

Y a t il un autre moyen pour faire afficher avec la méthode format que ceci:

Comment appliquer decode() à tous les éléments du tuple?
J’ai bien une solution avec [i.decode() for i in t] mais y a t il d’autres méthodes?

[quote=“limax”]deuxième question:
[…]
Comment appliquer decode() à tous les éléments du tuple?
J’ai bien une solution avec [i.decode() for i in t] mais y a t il d’autres méthodes?[/quote]
À mon avis c’est la meilleure solution.
Je pensais à un map mais en Python c’est horrible :

Si il existait une fonction decode (et non pas une méthode objet) on pourrait au moins se passer du lambda :

Et de toutes façons cette fonction hypothétique n’existe pas, il faudrait l’écrire toi-même :

def decode(i): return i.decode()

Tiens je ne connais pas. Ça correspond à quoi ?

Pour map face aux comprehension list, c’est les comprehension list qui sont recommandées face aux fonctions map/filter (perso je ne suis pas un grand habitué des comprehension list qui me semble plus verbeuses bien que plus flexibles).

Perso j’utiliserais :

print('%s et %s' % t)

Mais je crois que ce n’est ni python 3, ni très recommandé :033

Usti

C’est l’équivalent de APPLY en Lisp :

[code]# en Python
fonction(arg1, arg2, arg3)

équivalent à

fonction(*[arg1, arg2, arg3])

; en Lisp
(fonction arg1 arg2 arg3)
; équivalent à
(apply #'fonction (list arg1 arg2 arg3))[/code]
Tout l’intérêt c’est évidemment d’avoir la liste d’arguments dans une variable, ce qui permet d’avoir un nombre d’arguments variable au moment de l’exécution.
Dans le cas que limax nous soumet c’est plus du sucre syntaxique qu’autre chose, histoire de pas indexer les arguments par soi-même (fonctionnellement ça ne change rien du tout). Par contre si la chaîne de format est elle-aussi variable, là ça reprend tout son intérêt (sélectionner dynamiquement la chaîne de format, entasser les arguments dans une liste, appliquer les arguments dynamiquement).

J’avoue que dans l’absolu je préfère aussi map/filter (je suis plus habitué à faire comme ça) mais faut bien avouer que dans le cas présent le map est plutôt moche en Python par rapport à la comprehension list. :unamused:

C’est l’équivalent de APPLY en Lisp :

[code]# en Python
fonction(arg1, arg2, arg3)

équivalent à

fonction(*[arg1, arg2, arg3])

; en Lisp
(fonction arg1 arg2 arg3)
; équivalent à
(apply #'fonction (list arg1 arg2 arg3))[/code]
Tout l’intérêt c’est évidemment d’avoir la liste d’arguments dans une variable, ce qui permet d’avoir un nombre d’arguments variable au moment de l’exécution.
Dans le cas que limax nous soumet c’est plus du sucre syntaxique qu’autre chose, histoire de pas indexer les arguments par soi-même (fonctionnellement ça ne change rien du tout). Par contre si la chaîne de format est elle-aussi variable, là ça reprend tout son intérêt (sélectionner dynamiquement la chaîne de format, entasser les arguments dans une liste, appliquer les arguments dynamiquement).
[/quote]
Pour compléter, il existe aussi l’éclatement des paires clé/valeur d’un dictionnaire avec ‘**’ pour exploiter les paramètres nommés par exemple :

[code]>>> def test(a, b):
… print(“a={}, b={}”.format(a, b))

test(**{‘a’: True, ‘b’: False})
a=True, b=False[/code]

super merci à vous