Pourquoi est - ' + ' non compris par le Python de jeux?
Je voudrais savoir pourquoi ce qui est valable:
set(range(10)) - set(range(5))
mais ce n'est pas valide:
set(range(10)) + set(range(5))
Est-ce parce que les " + " pourrait signifier à la fois d'intersection et d'union?
|
signifie l'union. Que demandez-vous?- C'est parce que Guido a choisi différents opérateurs pour l'intersection et d'union.
- Heffernan, Guido n'a pas l'habitude de faire les choses sans raison, ou au moins certains de principe - c'est ce que fait Python si grand.
- Oh, je suis tout à fait sûr, il l'a fait pour une bonne raison.
- Si seulement
~
étaient un opérateur binaire, alors vous pourriez avoir|
pour les + de l'union, et~
de la différence, qui est beaucoup plus équilibré.
Vous devez vous connecter pour publier un commentaire.
Python ensembles de ne pas avoir de mise en œuvre de la
+
opérateur.Vous pouvez utiliser
|
pour l'ensemble de l'union et&
pour l'ensemble de l'intersection.Les ensembles de mettre en œuvre
-
comme différence. Vous pouvez également utiliser^
pour symétrique différence (c'est à dire, il sera de retour une nouvelle série avec uniquement les objets qui apparaissent dans un jeu, mais n'apparaissent pas dans les deux ensembles).Python a choisi d'utiliser
|
au lieu de+
parce que l'ensemble de l'union est un concept qui est étroitement liée à booléenne disjonction; vecteurs de Bits (qui en python sont justeint
/long
) définissent cette opération à travers une séquence de valeurs booléennes et de l'appeler "ou binaire". En fait, cette opération est très similaire à l'ensemble de l'union que les binaires des entiers sont aussi parfois appelés "ensembles de Bits", où les éléments de l'ensemble sont les nombres naturels.Parce que
int
définit déjà défini-comme les opérateurs de|
,&
et^
, il était naturel pour le plus récentset
type à utiliser la même interface.Dans la théorie des ensembles le symbole + indique normalement le disjoints de l'union de deux ensembles. Si A et B sont des ensembles, leur disjoints de l'union est défini comme l'ensemble
c'est à dire, pour construire le disjoints de l'union, nous marquer tous les éléments de A et de tous les éléments de B avec différentes balises (dans l'exemple j'ai utilisé les numéros 1 et 2, mais tous les deux "choses" à faire le travail) et ensuite prendre l'union des deux ensembles. Dans l'exemple ci-dessus, j'ai utilisé le " U " pour l'ensemble de l'union pour la rendre plus semblable à l'habitude, la notation mathématique; ci-dessous-je utiliser le Python de la notation, c'est à dire '|' pour l'union, et "& " pour l'intersection.
Si A et B sont disjoints, le A + B a 1-de-1 correspondance avec A | B. Si elles ne sont pas, alors tous les éléments de x dans A & B apparaître deux fois dans A + B: une fois que (x, 1), et une fois que (x, 2).
Donc, puisque le symbole " + " est assez bien établie sens comme une opération de l'ensemble, je trouve ça très cohérent que Python ne pas utiliser ce symbole pour l'ensemble de l'union ou l'intersection. Probablement Python concepteur(s) avait ceci à l'esprit quand ils ont choisi ensemble des opérateurs.
|
opérateur pour l'ensemble des syndicats, mais a échoué à grok pourquoi Guido éviter de surcharger le+
opérateur pour l'ensemble des syndicats ainsi. Après tout, cela aurait préservé l'orthogonalité avec le+
opérateur surchargé pour la liste des ajouts. Depuis le Python de marque est la conformité avec la notation mathématique (p. ex.,j
indiquant le composant complexe de nombres complexes), Guido est curieux choix enfin un sens.Bien sûr, ils pourraient avoir utilisé
+
à faire une union, mais serait toujours besoin d'un symbole pour l'intersection.|
de l'union est symétrique avec&
pour l'intersection et permet donc un meilleur choix.Parce que
|
signifie l'union et&
signifie intersection. Il n'y a clairement aucune raison d'ajouter plusieurs opérateurs pour la même fonction.Raisons pour l'utilisation de
|
et&
remonte probablement à des opérations bit à bit. Si vous représentez un ensemble comme les bits d'un nombre, ce sont les opérateurs que vous pouvez utiliser pour faire de l'union et d'intersection.+
simple n'est-ce pas aussi lié à l'union et-
est de définir la différence.Parce que différence est très utile, et communément appelé concept, mais il n'y a pas (universel) la notion de "jeu de plus".
+
est défini comme membre-sage plus. Certains l'utilisent pour symétrique différence. De toute façon, tout le papier qui l'utilise soit l'appelle quelque chose d'autre ou la définit en premier.