BlackJack hat geschrieben:@NoPy: Du weisst schon das es Dokumentation gibt wo für Funktionen wie `compile()` steht was die machen und was für Argumente man übergeben kann‽ Und auch ``exec`` wird da beschrieben.
Nun ja, bislang hat mich die Dokumentation von python nicht wirklich begeistert. Vielleicht fehlen mir die Zusammenhänge, aber ohne Beispiel konnte ich allein mit der Doku (von den grundlegenden Dingen mal abgesehen, wie Tupel, strings und co) nie arbeiten. Siehe meine "dumme" Frage zum Thema reguläre Ausdrücke. An sich völlig klar, aber man muss es sich denken, geschrieben steht es nirgends so richtig (oder ich bin zu ...)
Und konkret zur compile- Funktion: Du meinst diese Doku?
http://docs.python.org/2/library/compiler.html
compile habe ich gefunden, zu formula finde ich nichts, was passt ...
BlackJack hat geschrieben:Das mit dem `__builtins__` ist vielleicht erklärungsbedürftig: Damit verhindert man das beim ``exec`` am Anfang Die „eingebauten” Objekte hinzugefügt werden, also alle Namen auf die man sonst so zurückgreifen kann ohne sie extra importieren zu müssen. Das ist sozusagen die Sicherheitsmasnahme dagegen wenn jemand als `formula` etwas wie '__import__("os").system("rm -rf ~")' eingibt, weil `__import__` dann nicht definiert ist.
tut mir leid, auch noch nicht klarer (und auch hier: kann in der doku nichts finden, freue mich über einen Link)
BlackJack hat geschrieben:Ansonsten verstehe ich die Fragen nicht so ganz, also woher weiss *wer* das `x` eine Variable ist? Wenn man in Python-Quelltext bei `formula` das `x` so hinschreibt dann ist das halt ein Name der zur Laufzeit zu einem Wert aufgelöst wird. Das ist so in der Sprachspezifikation festgelegt. Python muss dann nachschauen auf was die Zeichenkette 'x' abgebildet wird. In vielen Fällen steht das in irgendeinem Dictionary. Und nun schau Dir [26] an und rate einfach mal welches Dictionary das ist. Kannst auch in die Dokumentation schauen.
ICh weiß, klingt faul, ist es aber nicht. Link? Das Problem bei solch allgemeinen Bezeichnern, wie "exec" ist, dass man dann wieder so viele bekommt, dass man sich schwer tut, das richtige zu finden. Zum x:
Im Grunde steht in dem String x....y, Du sagst irgendwann in einem Dictionary x=42. Also ersetzt er x durch 42. Aber wieso weiß er beim compilieren, dass "math.sin" nicht in irgend einem dictionary steht? oder "y"? Wie gesagt, wenn ich eine Dokumentation zu "formula" finde, die ich verstehe, dann kann ich das vielleicht nachvollziehen. Aber im Moment kann ich nur raten.
BlackJack hat geschrieben:
Und Umgekehrt muss eine Zuweisung auch irgendwo als Abbildung von Name auf Wert gespeichert werden.
Die Vermutungen zu [27] sind ja total abstrus. Wie sollte das denn funktionieren? Python müsste dann zu *beliebigen* Code den man zum Beispiel auf Modulebene schreiben kann eine Art Umkehr*code* finden der genau das Gegenteil macht und darauf hin irgendwie rückwärts alle möglichen Werte ermittelt die zu einem bestimmten Wert hätten führen können und die dann… ja was eigentlich?
Das hat mich schon auch gewundert, aber im Moment traue ich python alles zu
Ich hatte mir mal den englischen Artikel zur list comprehension hereingeholfen und soviel ich verstanden habe, wird dabei die aus dem Mathematikunterricht bekannte Mengenbeschreibung "codiert", also so etwas, wie die Menge aller x, für die gilt x ist Element der natürlichen Zahlen und x² - 17<212
Und dann wird über x im Bereich der natürlichen Zahlen iteriert (kann eine Weile dauern) und alle passenden x werden ausgeworfen. Und in der Mathematik kann ich auch definieren: gesucht ist die Menge aller x, für die gilt y=-0.0007...=sin(x)*x usw. Dass das nicht immer trivial umformbar ist, ist mir klar. Aber weiß ich denn, ob python nicht auch backtracking oder so etwas im Programm hat? Sicher, das Abbruchkriterium wäre interessant, aber vielleicht kann man ja auch das vorgeben: Wenn Du 1000 Werte hast, dann gibt Dich zufrieden.
Aktuell weiß ich nicht, was python alles kann und was nicht. Ich weiß nur, dass ich noch ganz am Anfang stehe.