Ich habe mehrmals gehört, dass Drucken als Funktion (3.x) besser ist als als Anweisung (2.x). Aber wieso?
Ich war ein Fan davon, eine Aussage zu sein, hauptsächlich weil ich zwei Zeichen weniger eingeben konnte (dh die Klammern).
Es würde mich interessieren, in welchen Situationen die print-Anweisung sie einfach nicht schneidet und eine Funktion überlegen ist.
python
function
printing
python-3.x
python-2.x
Rechteck
quelle
quelle
Antworten:
Alles von Jochens Antwort und Svens Antwort plus:
Sie können
print()
es an Orten verwenden, an denen Sie es nicht verwenden könnenprint
, z.[print(x) for x in range(10)]
quelle
print()
eher als Ausdruck als als Aussage für empfehlen würde . In Ihrem Beispiel wird eine nicht benötigte Liste mit dem 10-fachen der Werte erstellt . DieNone
Verwendung ist sicherlich besserfor x in range(10): print(x)
.lambda x: print x
:(.quelle
lambda
.Ein Vorteil
print
einer Funktion ist die Konsistenz. Es gibt keinen Grund dafür, eine Aussage zu machen. Vergleichen Sie diese beiden Zeilen2.x: print >> my_file, x 3.x: print(x, file=my_file)
Die neue Version ähnelt viel mehr Python, nicht wahr?
Ein weiterer Vorteil der Funktionsversion ist die Flexibilität. Wenn Sie beispielsweise alle
print
Aufrufe zu Debugging-Zwecken abfangen möchten , können Sie jetzt einfach Folgendes neu definierenprint
:def print(*args, **kwargs): # whatever __builtins__.print(*args, **kwargs)
quelle
print
Funktion ist. (Die Delegation der Antwort an das OP ist für Psychologen und Manager, denke ich :)Ich dachte über diese Frage nach und hatte keine Ahnung von den Profis der Python 3-Version. Aber als ich die Spalten von
pandas.DataFrame
(ohneIndex([...])
) drucken musste , habe ich das herausgefundenlöst eine Ausnahme aus, während
funktioniert gut! Wenn Sie dieselben (konfigurierbaren) Druckoptionen in mehreren Anrufdrucken haben möchten, können Sie diese im Wörterbuch speichern und als übergeben
**print_options
So zumindest
*args
,**kw_args
Tricks sind ein guter Grund fürprint
eine Funktion zu sein!quelle
Sie können das eingebaute
print
durch ein benutzerdefiniertes ersetzen :import os import sys def print(s): sys.stderr.write('Will now print ' + str(s) + '.' + os.linesep) sys.stdout.write(str(s) + os.linesep) print(['A', 'list']) # Output: # stderr: Will now print ['A', 'list']. # stdout: ['A', 'list']
Sie können
print
innerhalb eines Lambda oder eines Funktionsaufrufs usw.: Verwenden .example_timeout_function(call=lambda: print('Hello world'), timeout=5) do_things(print_function=print)
quelle