Integrierte Funktion überschreiben [duplizieren]

8

Ich habe einen großen Teil des Codes, der die Anweisung "print" verwendet. Um so zu sagen:

%Vor%

und nicht

%Vor%

Ich möchte die Ausgabe ändern. Kann ich dies tun, ohne alle Zeilen mit Drucken zu ändern? Zum Beispiel durch Überschreiben der Funktion / Aussage?

    
user3099519 13.12.2013, 13:17
quelle

4 Antworten

6

Dies ändert das Verhalten der print -Anweisung, ohne dass Sie gezwungen sind,

zu ändern

print "foo"

bis

%Vor% %Vor%

ergibt

%Vor%

Dies könnte mit einem Kontext-Manager behoben werden. Wenn Sie jedoch Ihre print -Anweisungen nicht in print -Funktionen ändern möchten, möchten Sie Ihre print -Anweisungen wahrscheinlich nicht in einen Kontext einbinden Manager entweder.

Also wäre ein besserer, zivilisierterer Weg,

zu verwenden %Vor%

, um alle print -Anweisungen in Ihrem Code (z. B. test.py oben) automatisch in print -Funktionen zu ändern. Dann können Sie das Verhalten ändern, indem Sie die Funktion print neu definieren:

%Vor%

ergibt

%Vor%     
unutbu 13.12.2013, 13:32
quelle
13

Python direkt unterstützt, was Sie tun möchten:

%Vor%

Jedes Modul mit dieser Zeile oben behandelt stattdessen die print -Anweisung als Funktion und macht den Code kompatibel mit Python 2 und 3.

Dies gilt nur für die print -Anweisung; Sie können andere Anweisungen nicht überschreiben.

Dies bedeutet, dass Sie dann print() als Funktion überall in diesem Modul verwenden müssen, aber Sie können dann auch Ihre eigene Implementierung bereitstellen, wenn Sie dies wünschen:

%Vor%

Eine weitere Option ist die Verwendung eines Kontextmanagers zur Erfassung gedruckter Anweisungen, wobei die Ausgabe von sys.stdout in ein speicherinternes Dateiobjekt Ihrer Wahl geleitet wird:

%Vor%

und umschließen Sie alle Blöcke, für die Sie print output mit dem Kontextmanager erfassen möchten. Hier ist ein Beispiel, das gedruckten Zeilen vorangestellt ist:

%Vor%

oder sogar einen Wrapper bereitstellen:

%Vor%

und verwenden Sie als:

%Vor%

Beachten Sie aber, dass print -Anweisungen normalerweise Daten in stdout in separaten Blöcken schreiben; Der Zeilenende am Ende ist ein separater Write.

    
Martijn Pieters 13.12.2013 13:25
quelle
4

In% Python 2.x ist print eine Anweisung und kann daher ohne Parens aufgerufen werden. Anscheinend verwendest du das.

Sie können die integrierte Druckanweisung nicht überschreiben.

Allerdings schreibt es seine Ausgabe in sys.stdout . Vielleicht können Sie sys.stdout mit einem Objekt überschreiben, das eine .write-Methode hat, etwa so:

%Vor%     
RemcoGerlich 13.12.2013 13:24
quelle
2

In Python 2 gibt es die print -Anweisung , die ein Sprachkonstrukt ist. Daher können Sie sein Verhalten nicht überschreiben.

In Python 3 und in Python 2, wenn Sie es explizit aktivieren, haben Sie die print Funktion . Es erfordert die Klammern, damit print "foo" nicht funktioniert, aber Sie können neu definieren, was es tut:

%Vor%     
poke 13.12.2013 13:27
quelle

Tags und Links