Zweck der aufrufenden Funktion ohne Klammern python
Folgendes:
class objectTest():
def __init__(self,a):
self.value = a
def get_value(self):
return self.value
class execute():
def __init__(self):
a = objectTest(1)
b = objectTest(1)
print(a == b)
print(a.get_value() == b.get_value)
print(a.get_value() == b.get_value())
print(a.get_value == b.get_value)
if __name__ == '__main__':
execute = execute();
Dieser code return
>>>
False
False
True
False
Gegeben, dass get_value ist eine Funktion, ich würde erwarten, dass die Ausführung zu stoppen und einen Fehler zurückgeben, aber es funktioniert nicht. Kann jemand erklären, warum der python-interpreter erlauben diese Art der syntax anstatt ein Attribut Fehler, die in meinem Fall würde gespeichert haben mir wertvolle Zeit.
- Versuchen Sie, zu bleiben, um zu PEP 8 Konventionen mit variable/Klasse/Methode zu benennen. Die oben aus meinem Gehirn zu tun, klappt für ein paar Sekunden, bis ich erkannte einige Ihrer Sachen, die genannt wurden, wie Funktionen waren in der Tat die Klassen.
- Alle Recht.. ich werde das nächste mal. Dank
- Nur im Fall, dass Sie hier angekommen sind, weil Sie wirklich wollen, um eine Funktion aufzurufen, ohne paranetheses beachten ist, ist möglich, manchmal über hacky decators. z.B.
>>> f = lambda *args: print('hi') >>> @f ... class _: pass ... hi
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bereits erwähnt, Funktionen und Methoden sind first-class Objekte. Sie nennen durch das werfen ein paar Klammern (Klammern) am Ende. Aber wie es aussieht willst du noch mehr motivation, warum sich python selbst lässt uns tun, dass. Warum sollten wir uns sorgen machen, wenn Funktionen sind first-class-oder nicht?
Manchmal wollen Sie nicht, Sie zu nennen, Sie wollen, übergeben Sie einen Verweis auf das callable selbst.
Wenn du Klammern nach oben, es läuft Ihr
my_long_running_function
in deinem Haupt-thread; kaum, was Sie wollte! Sie geben wollteProcess
einen Verweis auf Ihre callable, dass es sich selbst in einem neuen Prozess.Manchmal wollen Sie nur angeben, callable und lassen Sie etwas anderes...
(
map
in diesem Fall) auszufüllen, die in seinen Argumenten.Vielleicht möchten Sie einfach fallen eine Reihe von callables in eine Sammlung, und Holen die, die Sie wollen in einer dynamischen Art und Weise.
Oben ist eine Methode zum zuordnen von string-Darstellungen von Operatoren auf Ihre eigentliche Handlung.
assert do_something
im code, was würde das bedeuten? In kurze was würdeassert
ing eine Funktion erreichen?Funktionen und Methoden in Python sind auch die Objekte selbst. Also vergleichen kann man Sie genauso wie jedes andere Objekt.
Normalerweise natürlich würden Sie nicht vergleichen mit Methoden, die untereinander alles andere, weil es ist nicht sonderlich hilfreich. Ein Ort ist es sinnvoll, wenn Sie möchten, übergeben Sie eine Funktion in eine andere Funktion.
a.get_value
ohne die Klammern am Ende. Du bist nur verweisen auf das verknüpfte Objekt mit der Methode.1) Ist der Rückgabewert der Aufruf einer.get_value() entspricht die Methode b.get_value ?
2) ist.get_value() zurück, das gleiche wie b.get_value() ?
3) Ist die Methode-Referenz ein.get_value gleich die Methode-Referenz b.get_value ?
Dies ist durchaus gültig Python 🙂
Mehrere Kommentatoren wollen ein Beispiel, wo dies nützlich ist. Eine Anwendung ist in threading. Wir übergeben zu müssen, das Ziel der Faden ohne die Verwendung von Klammern. Ansonsten ist der Gegner in der main-thread, das ist, was wir versuchen zu vermeiden.
Beispiel:
In test1.py ich nenne ThreadTest ohne die Verwendung von Klammern. test_thread beginnt im thread und ermöglicht test1.py weiter ausgeführt werden.
In test2.py ich pass ThreadTest() als Ziel. In diesem Fall ist der thread nicht erlaubt test2.py weiter ausgeführt werden.
test1.py
test2.py
test_thread.py
Ausgabe von test1.py:
Ausgabe von test2.py:
Ich bin mit Python ist3.5 auf Linux Mint.