/ Pythonic spôsoby prechodu importovaných konštánt - python

Pythonic spôsoby prechodu importovaných konštánt - python

Importujem z môjho súboru niektoré konštanty constants.py ako toto:

from constants import (SOME_CONST, OTHER_CONST, ANOTHER_ONE)

Tieto konštanty sú názvy súborov a čítam údaje z nich, čo chcem dosiahnuť, je toto:

for filename in [SOME_CONST, OTHER_CONST, ANOTHER_ONE]:
# process file

constants.py

SOME_CONST = "filename.txt"
OTHER_CONST = "myfile.xml"
ANOTHER_ONE = "file.csv"

Ale chcem vedieť, či existuje spôsob, ako sa tomu vyhnúťdeklarovanie zoznamu v prehľade, ako je posúvanie alebo vytvorenie zoznamu importovaných konštánt, pretože tam môže byť veľa konštánt nielen 3 ako príklad a je to náchylná k chybám, keďže by som musel importovať konštantu a pridať ju do zoznamu, Chcem to len importovať a pracovať s tým, čo sa dováža.

odpovede:

5 pre odpoveď č. 1

Nie je možné zadať "všetky importované konštanty", nie. Sú vo vašom súčasnom module iba globálne.

Vaše možnosti sú:

  1. uveďte všetky mená na constants modul:

    import constants
    
    for name in dir(constants):
    const = getattr(constants, name)
    

    Tieto mená môžete filtrovať, ak sa riadia vzorom:

    for name in dir(constants):
    if name.startswith("FOO_"):
    

    Filter môže byť jednoduchý ako kontrola toho, či je názov veľký.

  2. deklarujte zoznam ako súčasť modulu konštánt a importujte ho že miesto.

  3. deklarujte zoznam názvov v aktuálnom module a použite ho na importovanie konštánt:

    import constants
    
    const_names = ["SOME_CONST", "OTHER_CONST", "ANOTHER_ONE"]
    for const_name in const_names:
    const = getattr(constants, const_name)
    

2 pre odpoveď č. 2

Ak rešpektujete pythonskú konvenciu pomenovania globálov veľkými písmenami (a len ich), môžete to urobiť, ako to navrhuje Davidmh:

for filename in [i for i in dir(constants) where i.upper() == i]:
...