1275 Stimmen

Wie erstelle ich eine Konstante in Python?

Wie deklariere ich eine Konstante in Python?

In Java machen wir:

public static final String CONST_NAME = "Name";

5voto

Lym Zoy Punkte 931

Hier ist ein Trick, wenn Sie Konstanten haben möchten und deren Werte nicht wichtig sind:

Definieren Sie einfach leere Klassen.

z. B.:

class ROT: 
    pass
class BLAU: 
    pass

4voto

n8boyd Punkte 49

Python-Wörterbücher sind veränderbar, daher scheinen sie nicht wie eine gute Möglichkeit, Konstanten zu deklarieren:

>>> konstanten = {"foo":1, "bar":2}
>>> print konstanten
{'foo': 1, 'bar': 2}
>>> konstanten["bar"] = 3
>>> print konstanten
{'foo': 1, 'bar': 3}

4voto

innov8 Punkte 1799

In Python ist eine Konstante einfach eine Variable mit einem Namen in Großbuchstaben, wobei Wörter durch das Unterstrichzeichen getrennt sind,

z.B.

DAYS_IN_WEEK = 7

Der Wert ist veränderlich, denn du kannst ihn ändern. Aber wenn die Regeln für den Namen dir sagen, dass es eine Konstante ist, warum würdest du das tun? Ich meine, es ist schließlich dein Programm!

Dies ist der Ansatz, der in Python durchgehend verfolgt wird. Es gibt kein private Schlüsselwort aus demselben Grund. Setze den Namen mit einem Unterstrich davor und du weißt, dass es als privat gedacht ist. Code kann die Regel brechen...genau wie ein Programmierer das private Schlüsselwort sowieso entfernen könnte.

Python hätte ein const Schlüsselwort hinzufügen können... aber ein Programmierer könnte das Schlüsselwort entfernen und dann die Konstante ändern, wenn er möchte, aber warum das tun? Wenn du die Regel brechen willst, könntest du die Regel sowieso ändern. Aber warum die Regel brechen, wenn der Name die Absicht klar macht?

Vielleicht gibt es einen Unittest, bei dem es sinnvoll ist, einen Wert zu ändern? Um zu sehen, was passiert, wenn es eine 8-Tage-Woche gibt, obwohl in der realen Welt die Anzahl der Tage in der Woche nicht geändert werden kann. Wenn die Sprache dich daran hindern würde, eine Ausnahme zu machen, wenn es nur diesen einen Fall gibt, in dem du die Regel brechen musst...dann müsstest du aufhören, es als Konstante zu deklarieren, obwohl es immer noch eine Konstante in der Anwendung ist, und es gibt nur diesen einen Testfall, der sieht, was passiert, wenn es geändert wird.

Der Name in Großbuchstaben zeigt dir, dass es als Konstante gedacht ist. Das ist wichtig. Nicht eine Sprache, die Einschränkungen für Code erzwingt, den du sowieso ändern kannst.

Das ist die Philosophie von Python.

4voto

sim Punkte 41

Vielleicht hilft Ihnen die pconst-Bibliothek (github).

$ pip install pconst

from pconst import const
const.APPLE_PRICE = 100
const.APPLE_PRICE = 200

[Out] Konstantenwert von "APPLE_PRICE" ist nicht bearbeitbar.

4voto

John Punkte 41

Es gibt keinen perfekten Weg, um das zu tun. Soweit ich weiß, werden die meisten Programmierer einfach den Bezeichner groß schreiben, so dass PI = 3.142 leicht als Konstante verstanden werden kann.

Andererseits, wenn Sie etwas möchten, das sich tatsächlich wie eine Konstante verhält, bin ich mir nicht sicher, ob Sie es finden werden. Bei allem, was Sie tun, wird es immer eine Möglichkeit geben, die "Konstante" zu bearbeiten, so dass es nicht wirklich eine Konstante ist. Hier ist ein sehr einfaches, schmutziges Beispiel:

def define(name, value):
  if (name + str(id(name))) not in globals():
    globals()[name + str(id(name))] = value

def constant(name):
  return globals()[name + str(id(name))]

define("PI",3.142)

print(constant("PI"))

Dies scheint eine Konstante im PHP-Stil zu machen.

Im Grunde genommen reicht es aus, dass jemand den Wert ändern kann:

globals()["PI"+str(id("PI"))] = 3.1415

Dies gilt für alle anderen Lösungen, die Sie hier finden werden - selbst für die cleveren, die eine Klasse erstellen und die Methode zum Festlegen des Attributs neu definieren - es wird immer einen Weg geben, sie zu umgehen. So ist Python einfach.

Meine Empfehlung ist, all den Ärger zu vermeiden und einfach Ihre Bezeichner groß zu schreiben. Es wäre dann zwar keine richtige Konstante, aber dann wäre nichts eine.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X