2017-08-30 4 views
0

je joue un peu avec les structures 2.0.2 package pour créer des structures de données dans python3. Si j'écris le code suivant, il s'assurera que la variable i est un entier lorsqu'il sera défini ultérieurement.Comment puis-je assurer un tableau ou d'une liste type de données dans python3 en utilisant le paquet structures

from structures import * 
class S(Structure): 
    i = Integer 

Test = S() 
Test.i = 4 
print (Test.i) 
Test.i = 4.18 
print (Test.i) 
Test.i = 'A string' 
print (Test.i) 

Cela donnera 4 pour les deux premières déclarations d'impression et une erreur pour la troisième parce que j'ai essayé de changer le type de données à quelque chose qui ne pouvait pas être arrondi au type de données correct.

Cependant, disons que je veux la variable i à une liste ou un tableau chaotique peuplé uniquement avec des entiers. J'essaie ce qui suit:

Test.i = [45,37.8,14.3] 

et je reçois une erreur me disant que je ne peux pas tourner la i variable dans une liste. Si j'essaie ce qui suit

from structures import * 
class S(Structure): 
    i = [Integer] 

Test.i = [45,37.8,14.3] 

Le code s'exécutera et créera une liste, mais les valeurs ne sont pas contraintes à un nombre entier. Comment puis-je obtenir le paquet de structures pour contraindre les types de données dans les listes et les tableaux cahoteux à un type statique?

+0

La bibliothèque que vous ' L'utilisation de re a été mise à jour pour la dernière fois il y a 3 ans et pour autant que je sache, elle ne répond pas à vos exigences. Vous pouvez soit accéder à une bibliothèque similaire développée activement et prendre en charge des fonctionnalités similaires, soit utiliser des analyseurs statiques tels que [Mypy] (http://mypy.readthedocs.io/) pour cela. Pour Mypy, vous pouvez le définir comme 'List [int]', où 'List' vient du module [' typing'] (https://docs.python.org/3/library/typing.html). –

Répondre

0

Ce n'est pas possible en utilisant des structures. Vous devrez construire votre propre custom type. Le type de liste fait juste un list() cast avant d'assigner la valeur, donc si vous voulez faire un casting de liste faire un cast int pour chaque item de la liste, vous devrez l'implémenter;)