Est-il un Python équivalent à Ruby symboles?
Est-il un Python équivalent à Ruby symboles?
-
Si oui, alors c'est quoi?
-
Si non, alors nous sommes coincés avec l'aide de chaînes que notre clés dans les dictionnaires seulement?
- Suite à votre commentaire cette réponse ci-dessous: Si vous voulez quelque chose où vous pouvez taper
d.b
au lieu ded['b']
, vous pouvez simplement utiliser un videclass D(object): pass
pour créer une instanced = D()
pour lesquelles vous pouvez ensuite affecter des valeurs aux attributs que vous faites, commed.a=1
etd.b=2
et de cours obtiennent leurs valeurs commeprint(d.a + d.b)
. Pas sûr que ce serait plus lent qu'une simple recherche dans le dictionnaire comme led['b']
dans la réponse.
Vous devez vous connecter pour publier un commentaire.
Non, python n'est pas un type de symbole.
Cependant les littéraux de chaîne sont internés par défaut et d'autres chaînes peuvent être internés à l'aide de la
stagiaire
fonction. Donc, en utilisant les littéraux de chaîne comme clés dans les dictionnaires n'en est pas moins performant que l'utilisation de symboles en ruby.Comme d'autres l'ont dit, il n'y a pas de symbole dans Python, mais les chaînes fonctionnent bien.
Pour éviter citant les chaînes de caractères comme des touches, utilisez le dict() constructeur syntaxe:
Aussi pour ceux qui sont intéressés: les symboles dans Ruby dans le cas de hachage sont très similaires à vide objets en python. Par exemple, vous pourriez faire:
puis de définir une clé de dictionnaire comme some_var:
et puis faire un standard de récupération:
Cependant, comme sepp2k de noter il n'y a pas d'avantage de performance dans ce domaine. En fait j'ai fait un test rapide et a noté peu ou pas de gain de performances:
Vitesse testé dans ipython:
Donc dans mon cas le 'symboles' exécuter plus lentement! (pour le plaisir des chiffres, pas précis). Toutefois, il est à noter qu'il y a probablement de la mémoire des avantages à le faire de cette façon. Si vous n'avez pas de soins sur le type de clé objets ont une empreinte plus petite que les chaînes de caractères.
Bien que cela soulève la question de savoir comment python traite de la mémoire de la variable nom de some_var.
k = "key"; d[k] = "value"
est stupide (mais pasfor k in keys: d[k] = "default"
, bien qu'il existe de meilleures façons), mais comme déjà dit, la plupart du temps, vous utilisez l'exécution valeurs clés.Pas comme un type de classe, mais il n'existe pas https://pypi.python.org/pypi/SymbolType.