2016-04-28 11 views
0

Ich schreibe eine formale Semantik für Python. Hoffentlich können mir einige Python-Gurus helfen. Wenn sich die Programmausführung durch eine Liste von Anweisungen bewegt, trifft jede Zuweisungsanweisung (oder Ausdruck), auf die sie trifft, den Typ basierend auf Kontext. Aber speichert sie diesen Typ dann irgendwo (so kann sie das nächste Mal in Begegnungen den Speicher überprüfen und Überprüfen Sie den Typ), oder führt er die Operation aus, dann den Typ wegwerfen und dann den Typ erneut ableiten, wenn er das nächste Mal auf die Variable trifft? Dies ist für Python 3+ btw (hoffentlich habe ich das klar gemacht)Python Semantik und Status

+3

Was meinst du mit * es leitet den Typ basierend auf Kontext *? – bereal

+0

gut, wenn es eine Variable a .. und die Aussage ist a = 2 .. dann leitet es ein ist vom Typ Integer .. oder wenn es "a = 2 + 2.2" dann durch den Kontext ist es ein ist vom Typ Float –

+0

Nun, es ist nicht viel von einem Schluss auf eine ganze Zahl als eine ganze Zahl zu denken. Es bedeutet nicht so sehr, dass Integer in python definiert sind, sondern genauso stark definiert ist wie "int a = 10;" Wenn Sie möchten, dass es etwas anderes als eine ganze Zahl ist, müssen Sie es wie in jeder anderen Sprache deklarieren . Nur Floats, Integers, Strings, Bytes, Tupel, Listen, Wörterbücher und imaginäre Zahlen haben Kurzschreibdeklarationen – joojaa

Antwort

1

Python verwendet dynamische Typisierung. Der Typ ist Teil des Werts. Wohin auch immer ein Wert geht, sein Typ passt dazu. (Sie können einen unabhängigen Wert erhalten, der diesem Typ mit der type()-Funktion entspricht.) Der Wert eines Werts wird nur verworfen, wenn der gesamte Wert verworfen wird. Eine Variable ist nur ein Verweis auf einen Wert: Jede Variable bezieht sich auf genau einen Wert, und im Allgemeinen kann es sich um einen beliebigen Wert ohne Einschränkungen für den Typ handeln.

Zum Beispiel in

a = 2 

Python machen nicht a eine int Variable; 2 hat was der Typ int. a ist nur eine Referenz auf 2, die eine Ganzzahl ist. Wenn Sie dann

schreiben
b = a + 3 

Python wird die Art der a durch einfach den Wert von a bezeichnet bekommen, und dann die Art der, dass zu bekommen. Der Ausdruck wird ausgewertet und das Ergebnis in b gespeichert.

Vom Standpunkt einer statisch typisierten Sprache ist es so, als hätte jede Variable in Python den gleichen Typ Wert, so dass jeder einen Wert enthält. Weitere Informationen zur statischen und dynamischen Eingabe finden Sie unter this other question.

+0

Also gibt es in Java einen Speicher oder einen Zustand, der den Typ eines Objekts kennt. Sie können also nicht "int i = 1 .... i = true" sagen, weil der Typ von i int ist ... In Python können Sie das tun, weil es die Variable deklariert. Also gibt es keinen solchen Zustand, aus Ihrer Antwort bekomme ich die Idee "a = 2" .. 2 ist in der Speicheradresse a Punkte gespeichert. und dann, wenn ich eine Operation an a ausführe, sieht es die Adresse nach, siehe ist ein ist vom Typ Integer, dann wertet die Operation aus? –

+0

Richtig, Variablen haben in Python keine Typen wie in Java. Sie müssen auch nicht deklariert werden, bevor sie festgelegt werden. Die Menge der Variablen verhält sich sehr ähnlich wie eine 'Map ' in Java. (In der Tat können Sie einen sehr ähnlichen Wert erhalten, indem Sie 'vars()' 'nennen.) –

+0

Diese Verwirrung ist der Grund, warum ich in Python dem Begriff" name "den Vorzug vor" Variable "gebe. Das Wort "Variable" lässt es eher als etwas erscheinen als als Verweis auf etwas. –