Python: Funktion und variable mit gleichen Namen
Meine Frage ist warum kann ich nicht die Funktion erneut aufrufen? Oder: wie macht man das?
Angenommen ich habe diese Funktion:
def a(x, y, z):
if x:
return y
else:
return z
und ich rufe es mit:
print a(3>2, 4, 5)
Bekomme ich 4.
Aber vorstellen, dass ich eine variable deklarieren, die mit dem gleichen Namen, die Funktion, die (durch Fehler):
a=2
Nun, wenn ich versuche zu tun:
a=a(3>4, 4, 5)
oder:
a(3>4, 4, 5)
Bekomme ich diese Fehlermeldung: "TypeError: 'int' - Objekt ist nicht aufrufbar"
Es ist nicht möglich, weisen Sie die variable 'a' in der Funktion?
- gut, der Fehler erklärt sich selbst. Sie haben neu definiert
a
eineint
statt einerfunction
; Jetzta
ist eine variable (anstelle der Funktion); folglich ist die Folge - Ich bin mir nicht sicher, was Sie Fragen. Sind Sie Fragen, warum kannst du nicht eine Nummer?
- Nein, was ich nur wissen will ist: wenn es möglich ist, nach zuweisen, "a=2", es ist ein Weg, um Punkt "a" erneut, um die Funktion.
- Während dies scheint offensichtlich für die Leute, die schreiben, Python ganzen Tag, aus einem C# - hintergrund das ist ärgerlich. Ich kann ein "private" variable mit dem Namen
self.a
, wollen aber eine 'öffentliche' Funktion, die aufgerufen wirda(units='g')
konvertiert die Einheiten, die auf die private variable 'a' zu, was der Anrufer will. Statt dessen finde ich, muss ich schreiben, meine 'öffentliche' Funktion alsdef format_a(units='g'):
- Gute Frage, am Ende, von den Antworten, die, im Gegensatz zu anderen Sprachen, die Sie nicht haben kann eine getter-wie
def x(self): return self.x
Sie brauchen, um den Namen der getter-anders, z.B.get_x(self)
. Ich kam hierher, weil Sie nach eine Umgestaltung meines get-name, ein code war einfach nicht mehr funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nachdem Sie dies tun:
a
ist nicht länger ein Funktion, es ist nur ein integer (Sie zugewiesen sind). So natürlich ist der interpreter wird sich beschweren, wenn Sie versuchen, um es aufzurufen, als wäre es eine Funktion, weil Sie das tun:Bottom line: man kann nicht zwei Dinge gleichzeitig mit dem gleichen Namen, werden Sie eine Funktion, die ein integer-oder ein beliebiges anderes Objekt in Python. Verwenden Sie einfach einen anderen Namen.
Namen in python sind in der Regel
identifiers
für eine bestimmte Art, mehr wie die Benennung einer box speichert eine variable/Funktion/Methode oder andere Objekte, die in python.Wenn Sie neu zuweisen, sind Sie nur umbenennen einer box .
Können Sie herausfinden, indem Sie die unten.
Zunächst
a
ist ein Wert zugewiesen9
, am Standort140515915925784
.Sobald ich die gleichen Bezeichner für eine Funktion
a
bezieht sich jetzt auf eine box mit die Adresse der Funktion in4512942512
Neuzuweisen
a
zu3
wieder Punktea
verweisen auf eine andere Adresse.Du bist die Zuweisung des namens ein, um die definition einer Funktion, und dann neu zugewiesen werden, sodass es zu einem integer.
Es ist syntaktisch korrekt, aber es ist nicht, was Sie wollen.
Es ist am besten zu geben, Funktionen, semantische Bezeichnungen, die beschreiben, was Sie tun, mit den Argumenten, die übergeben werden, um Sie, und geben Sie Variablen semantischen Namen, die beschreiben, welches Objekt Sie sind verweist. Wenn Sie das tun, haben Sie mehr lesbaren code, und Sie sicherlich wird nicht machen diesen Fehler wieder.