Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un fichier .py pour déclarer des constantes ?

13 août 2018 à 18:26:11

Bonjour tout le monde,

J'ai acheté il y a peu un scanner d'empreinte digitale. Je travaille dessus en python. Un petit projet test à été fait par un membre de la communauté où j'ai acheté ce capteur et j’essaie d'analyser son code. Dans le projet il y a 3 fichiers, dont un nommé "contstants".

Voici le contenu du fichier :

#FPSconstants.py
fingerID = 0xffff
confidence = 0xffff
templateCount = 0xffff
packageSum = 0x0000

FINGERPRINT_OK = 0x00
FINGERPRINT_PACKETRECIEVEERR = 0x01
FINGERPRINT_NOFINGER = 0x02
FINGERPRINT_IMAGEFAIL = 0x03
FINGERPRINT_IMAGEMESS = 0x06
FINGERPRINT_FEATUREFAIL = 0x07
FINGERPRINT_NOMATCH = 0x08
FINGERPRINT_NOTFOUND = 0x09
FINGERPRINT_ENROLLMISMATCH = 0x0A
FINGERPRINT_BADLOCATION = 0x0B
FINGERPRINT_DBRANGEFAIL = 0x0C
FINGERPRINT_UPLOADFEATUREFAIL = 0x0D
FINGERPRINT_PACKETRESPONSEFAIL = 0x0E
FINGERPRINT_UPLOADFAIL = 0x0F
FINGERPRINT_DELETEFAIL = 0x10
FINGERPRINT_DBCLEARFAIL = 0x11
FINGERPRINT_PASSFAIL = 0x13
FINGERPRINT_INVALIDIMAGE = 0x15
FINGERPRINT_FLASHERR = 0x18
FINGERPRINT_INVALIDREG = 0x1A
FINGERPRINT_ADDRCODE = 0x20
FINGERPRINT_PASSVERIFY = 0x1

FINGERPRINT_STARTCODE = 0xEF01

FINGERPRINT_COMMANDPACKET = 0x01
FINGERPRINT_DATAPACKET = 0x02
FINGERPRINT_ACKPACKET = 0x07
FINGERPRINT_ENDDATAPACKET = 0x08

FINGERPRINT_TIMEOUT = 0xFF
FINGERPRINT_BADPACKET = 0xFE

FINGERPRINT_GETIMAGE = 0x01
FINGERPRINT_IMAGE2TZ = 0x02
FINGERPRINT_REGMODEL = 0x05
FINGERPRINT_STORE = 0x06
FINGERPRINT_LOAD = 0x07
FINGERPRINT_UPLOAD = 0x08
FINGERPRINT_UPLOADIMAGE = 0x0A
FINGERPRINT_DOWNLOADIMAGE = 0x0B
FINGERPRINT_DELETE = 0x0C
FINGERPRINT_EMPTY = 0x0D
FINGERPRINT_VERIFYPASSWORD = 0x13
FINGERPRINT_HISPEEDSEARCH = 0x1B
FINGERPRINT_SEARCH = 0x04
FINGERPRINT_WRITENOTEPAD = 0x18
FINGERPRINT_READNOTEPAD = 0x19
FINGERPRINT_TEMPLATECOUNT = 0x1D
FINGERPRINT_COMMLINK = 0x17
DEFAULTTIMEOUT = 5.0

J'ai une question :

    Est-ce que c'est une pratique courante d'avoir toute ses constantes dans un fichier .py à part ? C'est plus ergonomique niveau perf ? Est-ce qu'il suffit d’exécuter le fichier .py sur sa machine une seule fois pour que les constantes deviennent globale ou alors il faut faire appel au fichier à chaque fois ? (Ça fais plus d'une question ça finalement :D)

Merci d'avoir pris le temps de me lire :)

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
13 août 2018 à 18:44:35

Mojo_CC a écrit:

Est-ce que c'est une pratique courante d'avoir toute ses constantes dans un fichier .py à part ?

Oui, ça permet d'éviter les conflits des noms de variables en les appelant de cette manière

import FPSconstants as FPS

print(FPS.FINGERPRINT.TIMEOUT) # par exemple

Mojo_CC a écrit:

C'est plus ergonomique niveau perf ? Est-ce qu'il suffit d’exécuter le fichier .py sur sa machine une seule fois pour que les constantes deviennent globale ou alors il faut faire appel au fichier à chaque fois ? (Ça fais plus d'une question ça finalement :D)

Rien à voir avec les perfs, c'est plus une question d'organisation pour rendre le code compréhensible et lisible par tous.

Je ne comprend pas la dernière question, une fois qu'on a importé le module FPSconstants, on peut utiliser dans le programme principal autant de fois qu'on souhaite ses constantes. Une fois le programme terminé, et redémarré, l'importation devra se refaire afin de charger l'ensemble des constantes du module FPSconstants.

  • Partager sur Facebook
  • Partager sur Twitter
13 août 2018 à 18:44:50

Salut :)

Ça me fait penser à l'organisation de pygame.

On importe le module puis, des constantes du modules on importe tout :

import module
from module.constants import *

Dans ce cas, pour manipuler le module on tapera :

module.methode
module.attribute

variable_1 = constant_1

Personnellement, je n'importe que le module avec un alias si son nom est long :

import module as md

Pour les constantes, ce sont aussi des alias. Toujours avec pygame, l'événement quitter la fenêtre s'appelle pygame.QUIT. Dans la première méthode, il suffira de taper QUIT. Dans la méthode que j'utilise, si j'ai mis pg comme alias de pygame, je taperais pg.QUIT

Maintenant, je pense que c'est davantage une question d'organisation qu'autre chose.

-
Edité par Le Cobriste 128 13 août 2018 à 18:51:22

  • Partager sur Facebook
  • Partager sur Twitter
13 août 2018 à 18:48:38

Je m'étais dit qu'une fois le fichier contenant les constantes exécuté, on aurait pas à faire d'import, elles auraient pu être stockées dans une sorte de cache, et il aurait alors suffit de les appeler simplement par leurs nom, comme des globales.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
13 août 2018 à 19:17:14

Le cache n'est applicable qu'à partir du moment où ton programme est exécuté. Si le programme est arrêté, le cache disparaît...
  • Partager sur Facebook
  • Partager sur Twitter