Slicing & Copy

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

CPython 2.7.2:

Code: Alles auswählen

>>> "foo" is "f"+"o"+"o"
True
Pypy 2.7.1:

Code: Alles auswählen

>>>> "foo" is "f"+"o"+"o"
True
BlackJack

@snafu: Innerhalb einer Python-Implementierung und Version gibt es da sicher ein System hinter, aber es ist eben implementierungsabhängig und etwas worauf man sich nicht verlassen kann. Mein letztes `id()`-Beispiel würde unter Jython zum Beispiel `False` ergeben, weil die IDs dort anders zustande kommen als bei CPython. Das gleiche gilt bei der Frage unter welchen Umständen gleiche Zeichenketten auch die selben Zeichenketten sind.
bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

In der Doku steht die Funktion "intern" erklärt: http://docs.python.org/library/function ... ern#intern. Nur Python < 3.0.

("f" + "o" + "o" wird übrigens schon vom Compiler zum Literal "foo" optimiert (je nach Python-Version), deshalb kommt etwa anderes heraus als bei "".join("foo").)
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Was für ein Compiler? Interpreter meinst du wohl … ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

nomnom hat geschrieben:Was für ein Compiler? Interpreter meinst du wohl … ;)
Vorsicht! Python hat natürlich auch eine Compiler-Komponente - denn der Interpreter liest und versteht lediglich speziellen Bytecode. Man spricht idR. einfach vom Python-"Interpreter", wenn man ein Python-Programm ausführen möchte. Intern wird dieses vor dem eigentlichen Abarbeiten (="interpretieren") in Bytecode übersetzt. Tatsächlich ist also anzunehmen, dass die Compiler-Komponente an dieser Stelle optimiert und optimierten Bytecode erzeugt, der dann von der eigentlichen Interpreter-Komponente ausgeführt wird.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Hyperion hat geschrieben:Vorsicht! Python hat natürlich auch eine Compiler-Komponente - denn der Interpreter liest und versteht lediglich speziellen Bytecode. Man spricht idR. einfach vom Python-"Interpreter", wenn man ein Python-Programm ausführen möchte. Intern wird dieses vor dem eigentlichen Abarbeiten (="interpretieren") in Bytecode übersetzt. Tatsächlich ist also anzunehmen, dass die Compiler-Komponente an dieser Stelle optimiert und optimierten Bytecode erzeugt, der dann von der eigentlichen Interpreter-Komponente ausgeführt wird.
Das war mir beim Schreiben auch bewusst, aber bei Python „vom Compiler“ zu sprechen war mir nicht spezifisch genug …
bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

@nomnom: Wenn es dir bewusst war, dass das beim Compilieren passiert, warum willst du dann, dass man Interpreter dazu sagt? Versteh ich nicht.
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

bords0 hat geschrieben:@nomnom: Wenn es dir bewusst war, dass das beim Compilieren passiert, warum willst du dann, dass man Interpreter dazu sagt? Versteh ich nicht.
Das habe ich nie behauptet. Allerdings war es mir klar, dass der Interpreter auch erstmal das Programm zu Bytecode kompiliert.
Antworten