3 votes

Peut-on en Python instancier une variable et retourner sa valeur ou sa référence en même temps?

Est-ce que Python peut instancier une variable et renvoyer sa valeur ou sa référence en même temps ?

Quelque chose qui fonctionnerait comme ceci

fruits = list()
fruits.append(pomme = Fruit()) # (pomme = Fruit()) <= Renvoierait une référence/valeur
fruits.append(orange = Fruit())

pomme.faire_quelque_chose()
fruits[1].faire_quelque_chose()

De toute évidence, vous pourriez simplement accéder aux objets avec fruits[n], mais Python peut-il le faire ? Pourquoi ?

8voto

ShadowRanger Points 44

Dès la version 3.8, oui, en utilisant l'opérateur "morse", := (officiellement appelé une "expression d'affectation") :

fruits = list()
fruits.append(apple := Fruit())
fruits.append(orange := Fruit())

apple.do_something()
fruits[1].do_something()

:= permet l'affectation en tant qu'expression, plutôt que comme une déclaration, et l'expression évalue la chose affectée.

Avant la 3.8, cela n'était pas possible ; vous auriez dû diviser ça en plusieurs parties. La modification la moins verbeuse de votre code existant serait quelque chose comme :

fruits = list()
fruits.append(Fruit())
fruits.append(Fruit())
apple, orange = fruits   # Déballe la liste en plusieurs noms en une seule fois

ou assigner à des noms et construire la liste :

apple = Fruit()
orange = Fruit()
fruits = [apple, orange]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X