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ď č. 1Nie 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ú:
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ý.
deklarujte zoznam ako súčasť modulu konštánt a importujte ho že miesto.
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]:
...