Viele Programmiersprachen, einschließlich Python, unterscheiden zwischen Anweisungen und Ausdrücken. Ich werde die Details an andere weitergeben (weil ich mit der Sprache nicht so vertraut bin), aber sehr grob.
Es kann gesagt werden.
Wenn Sie nicht den Wunsch haben, Ihren Code kurz zu schreiben, spielt es keine Rolle, welchen Sie verwenden, aber um ihn kurz zu schreiben, ist es besser, so viele Ausdrücke wie möglich zu haben, da Sie so viele Ausdrücke in einen Ausdruck einfügen können.
Wenn Sie dagegen alles zu einem Ausdruck machen, können Sie leicht komplizierten und seltsamen Code schreiben, und ich hasse ihn in einigen Sprachen.
Python ist eine Sprache, die es nicht mag. Zuweisungen sind beispielsweise eher Anweisungen als Ausdrücke. Sie können also keinen Code wie "a = (b = 1) + (c = 2)" schreiben. Es gibt keinen Ausdruck wie "a = i ++". Funktionen können auch mit Lambda-Ausdrücken erstellt werden, aber Anweisungen können nicht in Lambda-Ausdrücken geschrieben werden, und es können nur Funktionen erstellt werden, die mit einem einzelnen Ausdruck ausgedrückt werden können. Die Idee ist, wenn Sie eine so komplizierte Funktion erstellen möchten, definieren Sie sie richtig mit def hogehoge ():
.
Es gibt viele. Über 2 Fälle.
python
try:
process(dic[key])
except KeyError:
process(None)
python
try:
process(int(s))
except ValueError:
process(0)
Die Wörterbuchreferenz von 1 kann mit if umgeschrieben werden.
if key in dic:
process(dic[key])
else:
process(None)
Es kann auch als Ausdruck mit dem ternären Operator geschrieben werden.
process(dic[key] if key in dic else None)
Wenn Sie die Zeichenfolge 2 int konvertieren möchten, können Sie sie mit if umschreiben.
process(int(s) if s[0] in '-0123456789' and all(c in '0123456789' for c in s) else 0)
Aber machst du das? Ich fühle mich. Es wäre noch ärgerlicher, wenn es float statt int wäre.
Daher wurde im März 2014 ein PEP vorgeschlagen, um einen Ausnahmeausdruck hinzuzufügen. http://legacy.python.org/dev/peps/pep-0463/
lst = [1, 2]
value = (lst[2] except IndexError: "No value")
Jep. Das ist leicht zu verstehen. Damit int Konvertierung von Zeichenketten
process(int(s) except IndexError: 0)
Kann einfach geschrieben werden.
Guido, der Schöpfer von Python, sagte jedoch, dass das PEP ab März 2014 gut studiert und die Grammatik gut entwickelt war, aber der Vorschlag selbst würde abgelehnt. https://mail.python.org/pipermail/python-dev/2014-March/133118.html
But the thing I can't get behind are the motivation and rationale. I don't think that e.g. dict.get() would be unnecessary once we have except expressions, and I disagree with the position that EAFP is better than LBYL, or "generally recommended" by Python.
(Sonstige Übersetzung) Was ich jedoch nicht zustimme, ist das Motiv und die Begründung. Zum Beispiel glaube ich nicht, dass dict.get unnötig war, wenn es einen Ausnahmeausdruck gab. Ich bin auch nicht einverstanden mit der Idee, dass EAFP (\ * 1) besser als LBYL (\ * 2) ist oder in Python "allgemein empfohlen" wird.
(\ * 1) Es ist einfacher, um Vergebung zu bitten als um Erlaubnis (Es ist einfacher, um Erlaubnis zu bitten, als um Erlaubnis zu bitten). Mit anderen Worten, wie bei der Try-Except-Syntax, verwenden Sie eine andere Methode, wenn Sie versuchen, einen Fehler zu machen. (\ * 2) Schauen Sie, bevor Sie springen: Der Stock, der nicht fällt, das heißt, stellen Sie sicher, dass er nicht im Voraus versagt, bevor Sie es tun.
Ich denke, es wäre bequem, es zu haben. Ist es nicht adoptiert?
Recommended Posts