Follow

>>> [0xfor x in (1, 2, 3)]
[15]

Thanks, , I hate it.

(reposted from nedbat on Twitter: twitter.com/nedbat/status/1382)

· · Web · 3 · 6 · 8
@rixx hm, das ist blöd zu lesen aber doch richtig? Oder hab ichs nicht verstanden? 0xf verodert mit irgendwas anderem ist doch immer 0xf?

@ckeen @rixx vom lesen würde ich als Ergebnis [15, 15, 15] erwarten

@xor

Ja, es ist eben kein Iterator im Spiel hier, es wird nur ein wert der Liste [1,2,3] (die 1) mit 0xf ver-odert und das ist das Ergebnis.

@rixx

@ckeen Natürlich ist es "richtig". Was der Interpreter zurückgibt, ist per Definition richtig. Der "Witz" ist, dass Menschen da ein "for" lesen und dadurch verwirrt sind, insbesondere weil Python normalerweise Wert auf Whitespace legt.

Ich wollte den Witz nicht erklären, aber 🥴

@rixx Musste gerade mal kurz python fragen was es da eigentlich liest. Weil WTF.

Um anderen die Arbeit zu sparen, für python steht da:
[0xf or (x in (1, 2, 3))]

0xf ist nicht False also wird 0xf zurück gegeben und (x in (1, 2, 3)) wird nie evaluiert. (x in (1, 2, 3)) ansonsten wäre das ja ein NameError.

Damit hat ma [0xf] oder [15].

Spannend, dass der parser da nicht über den fehlenden Leerzeichen stolpert.
Würde das für einen Bug halten wollen.

@rixx Okay. Krass. Kennst du da einen usecase oder einen guten Grund zu?

Weil das geht ja nur mit Zahlen. Und dann auch nicht mit 0. Damit ist <zahl>or <irgendwas> doch quasi immer das Selbe wie <zahl>.

@rixx Es macht halb Sinn wenn man and/or ähnlich wie andere infix operatoren in der Grammatik aufhängt. Ich will ja potentiell auch das 4+5 das gleiche ist wie 4 + 5. Aber dann müsste 5or6 gehen. Und das ist ein Fehler.

@rixx From the comments on Twitter:
>>> 0xfor-d*University
15

Sign in to participate in the conversation
chaos.social

chaos.social – a Fediverse instance for & by the Chaos community