58 votes

Pourquoi est-il possible de remplacer parfois set () par {}?

Dans PyCharm, quand j'écris:

 return set([(sy + ady, sx + adx)])
 

il dit "L'appel de fonction peut être remplacé par set literal" , il est donc remplacé par:

 return {(sy + ady, sx + adx)}
 

Pourquoi donc? Un set() en Python n'est pas la même chose qu'un dictionnaire {} ?

Et s'il souhaite optimiser cela, pourquoi est-ce plus efficace?

86voto

snakecharmerb Points 8425

Python ensembles et les dictionnaires peuvent être construits en utilisant des accolades:

my_dict = {'a': 1, 'b': 2}

my_set = {1, 2, 3}

L'interprète (et les lecteurs) peut les distinguer en fonction de leur contenu. Cependant, il n'est pas possible de faire la distinction entre un ensemble vide et vide dict, donc ce cas, vous devez utiliser set() de vide ensembles de lever l'ambiguïté.

Une épreuve très simple suggère que le sens littéral de la construction est plus rapide (python3.5):

>>> timeit.timeit('a = set([1, 2, 3])')
0.5449375328607857
>>> timeit.timeit('a = {1, 2, 3}')
0.20525191631168127

Cette question traite de certains problèmes de performances de littéral des constructions plus de fonctions internes, mais pour les listes et les dicts. Le résumé semble que littérale constructions nécessitent moins de travail de l'interprète.

4voto

C Panda Points 1983

set([iterable]) est le constructeur qui crée un ensemble à partir de l'itéré optionnel iterable . Et {} consiste à créer des littéraux d'objet set / dict. Donc, ce qui est créé dépend de la façon dont vous l’utilisez.

 In [414]: x = {}

In [415]: type(x)
Out[415]: dict

In [416]: x = {1}

In [417]: type(x)
Out[417]: set

In [418]: x = {1: "hello"}

In [419]: type(x)
Out[419]: dict
 

4voto

Emanuel Points 82

Autre exemple, comment set et {} ne sont pas interchangeables (comme mentionné par jonrsharpe):

 In: f = 'FH'

In: set(f)
Out: {'F', 'H'}

In: {f}
Out: {'FH'}
 

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