Gibt es in Python ein Analogon zur C
Präprozessoranweisung wie?:
#define MY_CONSTANT 50
Außerdem habe ich eine große Liste von Konstanten, die ich in mehrere Klassen importieren möchte. Gibt es ein Analogon zum Deklarieren der Konstanten als lange Folge von Anweisungen wie oben in einer .py
Datei und zum Importieren in eine andere .py
Datei?
Bearbeiten.
Die Datei Constants.py
lautet:
#!/usr/bin/env python
# encoding: utf-8
"""
Constants.py
"""
MY_CONSTANT_ONE = 50
MY_CONSTANT_TWO = 51
Und myExample.py
liest:
#!/usr/bin/env python
# encoding: utf-8
"""
myExample.py
"""
import sys
import os
import Constants
class myExample:
def __init__(self):
self.someValueOne = Constants.MY_CONSTANT_ONE + 1
self.someValueTwo = Constants.MY_CONSTANT_TWO + 1
if __name__ == '__main__':
x = MyClass()
Bearbeiten.
Vom Compiler,
NameError: "Der globale Name 'MY_CONSTANT_ONE' ist nicht definiert."
Funktion init in myExample in Zeile 13 self.someValueOne = Constants.MY_CONSTANT_ONE + 1 Ausgabe kopieren Programm mit Code # 1 nach 0,06 Sekunden beendet.
python myExample.py
sollte einen Traceback für Fehler geben, der Dateinamen enthält und<module>
als oberste Ebene. AußerdemMY_CONSTANT_ONE
sind Referenzen nicht als globaler Name - wirklich seltsam. Überprüfen Sie dreimal, ob dies wirklich die Dateien sind, die Sie ausführen (und konvertieren Sie sie möglicherweise in ASCII und entfernen Sie das# encoding: utf8
Bit).Antworten:
Python ist nicht vorverarbeitet. Sie können einfach eine Datei erstellen
myconstants.py
:Und das Importieren funktioniert einfach:
quelle
MAX_FIVE_FLUSH_KEY_INT
). Poste den Traceback.Python hat weder einen Präprozessor noch Konstanten in dem Sinne, dass sie nicht geändert werden können - Sie können sie jederzeit ändern (fast können Sie konstante Objekteigenschaften emulieren, dies jedoch aus Gründen der Konstanz selten tun getan und nicht als nützlich angesehen) alles. Wenn wir eine Konstante definieren, definieren wir einen Namen, der mit Unterstrichen in Großbuchstaben geschrieben ist, und nennen ihn einen Tag - "Wir stimmen hier allen Erwachsenen zu", kein vernünftiger Mann würde eine Konstante ändern. Es sei denn natürlich, er hat sehr gute Gründe und weiß genau, was er tut. In diesem Fall können (und sollten) Sie ihn auf keinen Fall aufhalten.
Natürlich können Sie einen Namen auf Modulebene mit einem Wert definieren und in einem anderen Modul verwenden. Dies ist nicht spezifisch für Konstanten oder irgendetwas, lesen Sie auf dem Modulsystem nach.
quelle
Und natürlich können Sie Folgendes tun:
quelle
import *
ist vom Teufel.Natürlich können Sie Ihre Konstanten in ein separates Modul einfügen. Beispielsweise:
const.py:
main.py:
Beachten Sie, dass, wie oben deklariert
A
,B
undC
Variablen sind, dh zur Laufzeit geändert werden können.quelle
Versuchen Sie, Konstanten mit einem "Einstellungs" -Modul zu erstellen? und Kann ich verhindern, dass ein Objekt in Python geändert wird?
Ein weiterer nützlicher Link: http://code.activestate.com/recipes/65207-constants-in-python/ informiert uns über die folgende Option:
Sie können also eine Klasse wie diese erstellen und sie dann aus Ihrem contants.py-Modul importieren. Auf diese Weise können Sie sicher sein, dass der Wert nicht geändert oder gelöscht wird.
quelle
Schauen Sie sich alternativ zur Verwendung des in mehreren Antworten beschriebenen Importansatzes das configparser- Modul an.
Die ConfigParser-Klasse implementiert eine grundlegende Parser-Sprache für Konfigurationsdateien, die eine ähnliche Struktur bietet wie Microsoft Windows INI-Dateien. Sie können dies verwenden, um Python-Programme zu schreiben, die von Endbenutzern einfach angepasst werden können.
quelle
Wenn Sie wirklich Konstanten wollen, nicht nur Variablen, die wie Konstanten aussehen, verwenden Sie standardmäßig unveränderliche Wörterbücher. Leider ist es noch nicht eingebaut, so dass Sie Rezepte von Drittanbietern (wie dieses oder jenes ) verwenden müssen.
quelle
Erstellen Sie eine konstante Datei mit einem beliebigen Namen wie my_constants.py. Deklarieren Sie eine solche Konstante
Für den Zugriff auf eine Konstante in Ihrer Code-Importdatei
und greifen Sie auf den konstanten Wert zu als -
quelle