2016-05-05 7 views
1

Würde Studentenname eine Konstante sein oder nicht ??Konstanten - Woher weißt du, was eine Konstante ist?

student_name = "" 

while len(student_name) > 1: 
    int(input(User input name of student and store this in variable student_name)) 
+0

Nein, es wäre keine Konstante, da sich der Wert vermutlich ändert ... obwohl es etwas unklar ist, weil der Code, den du zeigst, den Wert nicht ändert, es einfach _implys_ dass der Wert sich in der while ändern sollte Schleife. – mgilson

Antwort

1

Es hängt davon ab, was Sie eine Konstante nennen würden. Python hat unveränderliche Objekte. wie Saiten. Denken Sie daran, dass Variablen in Python im Grunde Etiketten für Objekte sind. Also, wenn Sie

x = 'foo' 

das Label x für den unveränderlichen String 'foo' schreiben verwendet. Wenn Sie es dann tun würden:

Sie haben die Zeichenfolge nicht geändert, Sie haben nur die Beschriftung an einer anderen Zeichenfolge aufgehängt.

Aber unveränderlich Objekte sind nicht, was wir allgemein als Konstanten denken. In Python könnte man sich eine Konstante als unveränderliches Etikett vorstellen; eine Variable (Label), die nach der Zuweisung nicht mehr geändert werden kann.

Bis vor kurzem hatte Python diese nicht wirklich. Durch Konvention signalisiert ein Name in Großbuchstaben, dass es nicht geändert werden sollte. Aber das wird nicht durch die Sprache erzwungen.

Aber seit Python 3.4 (und auch zurück zu 2.7) haben wir das enum Modul, das verschiedene Arten von Aufzählungsklassen definiert (Singletons wirklich). Eine Aufzählung kann grundsätzlich als eine Gruppe von Konstanten verwendet werden.

Hier ist ein Beispiel, wo eine Funktion zum Vergleichen von Dateien eine Aufzählung zurückgibt;

from enum import IntEnum 
from hashlib import sha256 
import os 

# File comparison result 
class Cmp(IntEnum): 
    differ = 0 # source and destination are different 
    same = 1 # source and destination are identical 
    nodest = 2 # destination doesn't exist 
    nosrc = 3 # source doesn't exist 


def compare(src, dest): 
    """ 
    Compare two files. 

    Arguments 
     src: Path of the source file. 
     dest: Path of the destination file. 

    Returns: 
     Cmp enum 
    """ 
    xsrc, xdest = os.path.exists(src), os.path.exists(dest) 
    if not xsrc: 
     return Cmp.nosrc 
    if not xdest: 
     return Cmp.nodest 
    with open(src, 'rb') as s: 
     csrc = sha256(s.read()).digest() 
    if xdest: 
     with open(dest, 'rb') as d: 
      cdest = sha256(d.read()).digest() 
    else: 
     cdest = b'' 
    if csrc == cdest: 
     return Cmp.same 
    return Cmp.differ 

Dies erspart Ihnen, was der Rückgabewert von compare eigentlich bedeutet, jedes Mal wenn Sie es verwenden, um nachschlagen zu müssen.

Sie können vorhandene Attribute des enum nicht ändern, nachdem es definiert wurde. Es gibt eine Überraschung hier; Sie können später neue Attribute hinzufügen, und diese können geändert werden.

+0

Vielen Dank für Ihre Hilfe: D – Izzy

0

Nein, gibt es nicht. Sie können eine Variable oder einen Wert in Python nicht als Konstante deklarieren. Ändere es einfach nicht.

Wenn Sie in einer Klasse sind, wäre das Äquivalent sein:

class Foo(object): 
    CONST_NAME = "Name" 

wenn nicht, ist es nur

CONST_NAME = "Name" 

Der folgende Codeausschnitt können Sie Link helfen.

+0

Vielen Dank – Izzy

Verwandte Themen