# \[python3\] problème format avec tuple

**URL:** <https://www.debian-fr.org/t/python3-probleme-format-avec-tuple/56312>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 2:05 UTC](https://www.debian-fr.org/t/python3-probleme-format-avec-tuple/56312 "2016-02-21T14:05:33Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![limax](https://www.debian-fr.org/user_avatar/www.debian-fr.org/limax/32/3886_2.png) [@limax](https://www.debian-fr.org/u/limax)\
**Post date:** [Février 21, 2016, 2:05 UTC](https://www.debian-fr.org/t/python3-probleme-format-avec-tuple/56312/1 "2016-02-21T14:05:33Z")

</div>

Bonjour

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

```auto

```

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:

```auto

```

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?

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 2:05 UTC](https://www.debian-fr.org/t/python3-probleme-format-avec-tuple/56312/2 "2016-02-21T14:05:33Z")

</div>

> [@limax](#):
>
> Il n’y a pas moyen de faire un print(‹&nbsp;{} et {}&nbsp;›.format(t) ) ?

```auto
print('{} et {}'.format(*t))
```

[quote=«&nbsp;limax&nbsp;»]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 :

```auto
list(map(lambda i: i.decode(), t))
```

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

`list(map(decode, t))` Mais même comme ça, de mon point de vue ça reste moins lisible que le [i.decode() for i in t]  
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()`

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:05 UTC](https://www.debian-fr.org/t/python3-probleme-format-avec-tuple/56312/3 "2016-02-21T14:05:34Z")

</div>

> [@syam](#):
>
> [quote=«&nbsp;limax&nbsp;»]Il n’y a pas moyen de faire un print(‹&nbsp;{} et {}&nbsp;›.format(t) ) ?

`print('{} et {}'.format(*t))`[/quote]  
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).

---

<div class="post-metadata">

**Author:** ![Ustilago](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/u/bcef8e/32.png) [@Ustilago](https://www.debian-fr.org/u/Ustilago)\
**Post date:** [Février 21, 2016, 2:05 UTC](https://www.debian-fr.org/t/python3-probleme-format-avec-tuple/56312/4 "2016-02-21T14:05:35Z")

</div>

Perso j’utiliserais :

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

Mais je crois que ce n’est ni python 3, ni très recommandé ![:033](https://www.debian-fr.org/uploads/default/original/1X/42cd8bd0447ecac24cdff1e26fa990a5c8442791.gif "petard")

Usti

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 2:05 UTC](https://www.debian-fr.org/t/python3-probleme-format-avec-tuple/56312/5 "2016-02-21T14:05:35Z")

</div>

> [@MisterFreez](#):
>
> Tiens je ne connais pas. Ça correspond à quoi ?

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).

> [@MisterFreez](#):
>
> 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)

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. 😒

---

<div class="post-metadata">

**Author:** ![Keldath](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/f17d59/32.png) [@Keldath](https://www.debian-fr.org/u/Keldath)\
**Post date:** [Février 21, 2016, 2:05 UTC](https://www.debian-fr.org/t/python3-probleme-format-avec-tuple/56312/6 "2016-02-21T14:05:35Z")

</div>

> [@syam](#):
>
> [quote=«&nbsp;MisterFreez&nbsp;»]Tiens je ne connais pas. Ça correspond à quoi ?

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 ‹&nbsp;\*\*&nbsp;› pour exploiter les paramètres nommés par exemple :

[code]\>\>\> def test(a, b):  
… print(«&nbsp;a={}, b={}&nbsp;».format(a, b))  
…

> > > test(\*\*{‹&nbsp;a&nbsp;›: True, ‹&nbsp;b&nbsp;›: False})  
> > > a=True, b=False[/code]

---

<div class="post-metadata">

**Author:** ![limax](https://www.debian-fr.org/user_avatar/www.debian-fr.org/limax/32/3886_2.png) [@limax](https://www.debian-fr.org/u/limax)\
**Post date:** [Février 21, 2016, 2:05 UTC](https://www.debian-fr.org/t/python3-probleme-format-avec-tuple/56312/7 "2016-02-21T14:05:37Z")

</div>

super merci à vous
