Hallo,
ich habe eine Frage. Warum ist 2**10 is 2**10 false.
und z.B 2**5 is 2**5 true?
2**10 is 2**10?
-
- User
- Beiträge: 424
- Registriert: Montag 28. Juli 2003, 16:19
- Wohnort: /dev/reality
Kleiner Tipp: Rechengenauigkeit, bzw. Darstellung von Zahlen.
I'm not getting paid for being Mr. Nice Guy!
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Ganz falsche Richtung. Das sind Ganzzahlen.querdenker hat geschrieben:Kleiner Tipp: Rechengenauigkeit, bzw. Darstellung von Zahlen.
CPython erzeugt beim Start die Zahlen 0 bis 2^8 und verwendet sie danach wieder. Fuer andere Zahlen gilt das nicht.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 2
- Registriert: Sonntag 31. Oktober 2010, 12:28
aha. der python-interpreter "rechnet" 2**10 gar nicht aus?
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Aeh doch?
Das gilt auch fuer den Zahlenbereich 0..2^8 den ich angesprochen habe, nur werden dort keine neuen Zahlenobjekte erzeugt sondern die bereits vorliegenden wiederverwendet.
http://www.python-forum.de/viewtopic.php?f=1&t=24369
Code: Alles auswählen
>>> 2 ** 10
1024
http://www.python-forum.de/viewtopic.php?f=1&t=24369
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ja eben doch! Nur tut er das zwei mal und hat damit zwei unterschiedliche Objekte!pythonsnake hat geschrieben:aha. der python-interpreter "rechnet" 2**10 gar nicht aus?
Bei Zahlen bis 255 liegen diese Objekte im Speicher und werden damit wie aus einem Cache benutzt. Damit ist das Ergebnis von 2**5 eben immer exakt dasselbe Objekt im Speicher und die Objektidentität ist eben gegeben!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Kann dir im Grunde genommen egal sein, da das Ergebnis deiner Ausdrücke nicht festgelegt ist und somit je nach Implementierung variieren kann.pythonsnake hat geschrieben:Hallo,
ich habe eine Frage. Warum ist 2**10 is 2**10 false.
und z.B 2**5 is 2**5 true?
Du stellst mit `is` die falsche Frage. Mit `is` testest ob zwei Objekte identisch sind. Interessieren wird dich aber nur, ob sie äquivalent sind. Dafür benutzt man `==` und damit kommt auch beide Male `True` raus.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Na, diese Frage kam aber noch nicht so oft, als das er nervte Zudem ist es eine der interessanteren.Py-Prog hat geschrieben:Teusche ich mich da oder werden in diesem Forum überwiegend gleiche Fragen gestellt?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
stimmt, ich wusste es auch noch nicht.Hyperion hat geschrieben:Na, diese Frage kam aber noch nicht so oft, als das er nervte Zudem ist es eine der interessanteren.
Ich weiß das doch auch nur weil ich einen Früheren Thread darüber gelesen habe.Xynon1 hat geschrieben:stimmt, ich wusste es auch noch nicht.Hyperion hat geschrieben:Na, diese Frage kam aber noch nicht so oft, als das er nervte Zudem ist es eine der interessanteren.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.