indem du sie bei eval als dictionaries mitgibst (2. und 3. parameter).bei meinen Einzeilern was das bisher kein problem, aber wie lasse ich einen String interpretieren, der auf Variablen zugreift die vorher definiert wurden?
Python-Statement in String
Wollte meinen Beitrag gerade noch editieren, weil folgendes Beispiel geht antürlich wenn ich es hintereinander weg schreibe:
Bei mir werden die "eval" aber ja durch ein externe Programm erzeugt, was die Python Datei nur einließt, und darum natürlich keinen Zugriff auf die vorher erzeugten Instanzen hat.
Jetzt muss ich nur noch sehen ob ich das ganze auch einbaue, mein eigentlich Mini-Parser-Programm artet so langsam aber sicher etwas aus
Danke erst mal bis hierhin
Grüße
D
Code: Alles auswählen
x=10
print eval('x+5')
So gehts hatte es in der API scheinbar überlesen, obwohl ich bei meiner Lern-Lektüre gerade exakt an der Stelle bei "dictionaries" angekommen binkeppla hat geschrieben:indem du sie bei eval als dictionaries mitgibst (2. und 3. parameter).bei meinen Einzeilern was das bisher kein problem, aber wie lasse ich einen String interpretieren, der auf Variablen zugreift die vorher definiert wurden?
Jetzt muss ich nur noch sehen ob ich das ganze auch einbaue, mein eigentlich Mini-Parser-Programm artet so langsam aber sicher etwas aus
Danke erst mal bis hierhin
Grüße
D
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Suchst du vielleicht sowas?
Code: Alles auswählen
exec "print a + b" in {'a': 23, 'b': 42}
TUFKAB – the user formerly known as blackbird
ach du grüne neune...das geht ja...sehr schick.mitsuhiko hat geschrieben:Suchst du vielleicht sowas?Code: Alles auswählen
exec "print a + b" in {'a': 23, 'b': 42}
*schwindeligWerd* ich seh schon hab noch einen langen Weg vor mir bis ich behaupten kann das ich ein bisschen Pyhton beherrsche :/
Danke für die Variante...
D
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Spielt doch keine Rolle. Das tolle an Python ist doch gerade, dass man mit wenig Wissen schon weit kommt und immer was neues entdecken kannda.dom hat geschrieben:*schwindeligWerd* ich seh schon hab noch einen langen Weg vor mir bis ich behaupten kann das ich ein bisschen Pyhton beherrsche :/
TUFKAB – the user formerly known as blackbird
Herzlichen Glückwunsch, dann kannst du jetzt Java in Python programmieren Über die vorherschende Meinug über das Buch in diesem Forum muss glaube ich nichts weiter gesagt werden.da.dom hat geschrieben:das hört sich gut an werde dann erst mal mein Galileo OpenBook weiterlesen, fand ich für dein grundierten Einstieg ganz gut....
Für mich scheinbar schon ... warum Java in Python, was ist an Java so schlecht? Das Buch für den Einstieg nicht empfehlenswert?EyDu hat geschrieben:Herzlichen Glückwunsch, dann kannst du jetzt Java in Python programmieren Über die vorherschende Meinug über das Buch in diesem Forum muss glaube ich nichts weiter gesagt werden.da.dom hat geschrieben:das hört sich gut an werde dann erst mal mein Galileo OpenBook weiterlesen, fand ich für dein grundierten Einstieg ganz gut....
Java? Bevor'n Flamewar ausbricht:da.dom hat geschrieben:Für mich scheinbar schon ... warum Java in Python, was ist an Java so schlecht? Das Buch für den Einstieg nicht empfehlenswert?EyDu hat geschrieben:Herzlichen Glückwunsch, dann kannst du jetzt Java in Python programmieren Über die vorherschende Meinug über das Buch in diesem Forum muss glaube ich nichts weiter gesagt werden.da.dom hat geschrieben:das hört sich gut an werde dann erst mal mein Galileo OpenBook weiterlesen, fand ich für dein grundierten Einstieg ganz gut....
An Java ist nichts schlecht... Wenn man in Java programmieren will. Wenn man in Python programmieren will... Ist man in Rom, mach's wie die Römer.
Ich komme zufällig aus der Java Ecke darum wäre ich wohl nie darauf gekommen das etwas schlechtes daran wäre es in python ähnlich zu machen... also lieber Finger weg von dem Galileo Buch? Hatte bisher ein sehr gutes Gefühl bei der Lektüre (bin allerdings auch erst bei "9 Benutzerinteraktion und Dateizugriff")...
Jap, feiii böses Buch. Such einfach im Forum nach "Galileocomputing + python" oder nach dem Buchtitel...da.dom hat geschrieben:Ich komme zufällig aus der Java Ecke darum wäre ich wohl nie darauf gekommen das etwas schlechtes daran wäre es in python ähnlich zu machen... also lieber Finger weg von dem Galileo Buch? Hatte bisher ein sehr gutes Gefühl bei der Lektüre (bin allerdings auch erst bei "9 Benutzerinteraktion und Dateizugriff")...
Dive into python find ich toll... oder einfach das offizielle Tut ;3
Zumindest was die Autoren über Objektorientierung vom Stapel lassen taugt aus Python-Sicht nicht viel, und zeigt eher wie man es in Python nicht machen sollte. Das ist auch nicht "Java", weil man sich auch in Java nicht auf Destruktoren verlassen kann, die Autoren aber fröhlich `__del__()` erklären und verwenden, ohne den Hinweis, dass man das nicht wirklich verwenden kann/sollte. Das Pendant zu `__del__()` heisst in Java `finalize()`.
mhh das ist ja schade, das sie mit dem Buch so daneben gehauen habe...ist das Buch denn zu 100% nicht zu gebrauchen und der Leser als angehender (möchtergern) PythonProgrammier hoffnungslos verloren mit dieser Lektüre oder nur in bestimmten Bereichen? OOP hatte ich schon in anderen Threads gelesen das sie da ihre "eigene" Art haben und man das lieber nicht übernehmen sollte. Fand das Buch eigentlich bisher relativ gut beschrieben, wie gesagt so furchtbar kompliziert ist es bisher ja auch nicht...tue mich englischer Lektüre in diesen Zusammen hängen immer etwas schwer...nicht das ich der englischen Sprache nicht mächtig bin, aber bei einer neuen Sprache die ich lernen will, finde ich Einführungen in meiner Muttersprache immer etwas angenehmer...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich glaube nicht dass irgendwer von uns mehr gelesen hat, weil warum sollte man schlechte Bücher mehr als nötig lesen? Was dir aber gefallen könnte ist die deutsche Übersetzung von "A Byte of Python".da.dom hat geschrieben:mhh das ist ja schade, das sie mit dem Buch so daneben gehauen habe...ist das Buch denn zu 100% nicht zu gebrauchen und der Leser als angehender (möchtergern) PythonProgrammier hoffnungslos verloren mit dieser Lektüre oder nur in bestimmten Bereichen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
hatte ich mir gestern schon mal runter gezogen wie "umfassend" würdest du das Buch denn nennen, 115Seiten sind auf den ersten Blick für mich erst mal nicht so viel? Reicht das an Lektüre fürs erste als angehender Pythoner und danach eher richtung selbst gestellte Projekte?Leonidas hat geschrieben: die deutsche Übersetzung von "A Byte of Python".
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Also ganz ehrlich muss ich sagen dass ich kürzere Bücher besser finde. Das OpenBook hat meiner Meinung nach eben auch das als großen Nachteil (und das müsste man Learning Python inzwischen auch vorwerfen, weil es sehr langatmig geworden ist) dass es unfassbar breit ist. MySQLdb, SAX alle möglichen Netzwerkapis das interessiert doch alles nur einen Bruchteil der Leser. Wenn die was dazu wissen wollen, können sie auch in die Dokumentation schauen, da brauchen sie kein Buch zu nehmen mit dem man Leute problemlos erschlagen kann. Das Frozenset vor Funktionen vorgestellt wird ist meiner Meinung nach auch eher blöd. Eine Referenz kann meinetwegen so strukturiert sein, aber ich denke ein Einsteigerbuch sollte Dinge immer nur soweit beschreiben bis man damit Erfolgsergebnisse verbuchen kann und dann diese Dinge immer weiter verfeinern, statt erst alle Details hinzuwerfen und die Grundlegenden Sachen nach hinten verschieben, weil man erst sagen muss wie ein frozenset funktioniert (was man übrigens mit zwei Sätzen beschrieben kann: "Ein frozenset ist ein Set, das nicht veränderlich ist. Beim versuch es zu verändern wirft es Exceptions - versuchen Sie es selbst im Interpreter."da.dom hat geschrieben:hatte ich mir gestern schon mal runter gezogen wie "umfassend" würdest du das Buch denn nennen, 115Seiten sind auf den ersten Blick für mich erst mal nicht so viel? Reicht das an Lektüre fürs erste als angehender Pythoner und danach eher richtung selbst gestellte Projekte?
Python-Programmieren wirst du nicht durch lesen eines X Kiloseiten-Werkes lernen. Du wirst die Theorie verstehen, aber für die Praxis musst du selbst Code schreiben und diesen immer weiter verbessern. Es ist klar, dass der Code anfangs suboptimal ist, wenn ich mir alten Code von mir ansehe ist der auch fürchterlich, aber durch stetige Selbstverbesserung geht es durchaus bergauf. Oft ist es hilfreich, wenn erfahrene Programmierer deinen Code öffentlich zerlegen und an ihm rumkritisieren - so siehst du schnell was man besser machen kann und bekommst Ansatzpunkte warum es besser ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hmm, ich bin jetzt zwar auch alles andere als ein Python-Profi, aber ich finde, man kann das Buch schon gebrauchen, um sich einen Überblick zu verschaffen.da.dom hat geschrieben:mhh das ist ja schade, das sie mit dem Buch so daneben gehauen habe...ist das Buch denn zu 100% nicht zu gebrauchen und der Leser als angehender (möchtergern) PythonProgrammier hoffnungslos verloren mit dieser Lektüre oder nur in bestimmten Bereichen? OOP hatte ich schon in anderen Threads gelesen das sie da ihre "eigene" Art haben und man das lieber nicht übernehmen sollte. Fand das Buch eigentlich bisher relativ gut beschrieben, wie gesagt so furchtbar kompliziert ist es bisher ja auch nicht...tue mich englischer Lektüre in diesen Zusammen hängen immer etwas schwer...nicht das ich der englischen Sprache nicht mächtig bin, aber bei einer neuen Sprache die ich lernen will, finde ich Einführungen in meiner Muttersprache immer etwas angenehmer...
Wenn man dann zusätzlich hier im Forum mitliest, erfährt man auch, was man nicht machen sollte. Also wenn man sich nicht zu sehr an's Buch hält und auch mal ein paar Einwände und Anregungen dieses Forums oder anderen guten Quellen holt, finde ich, kann man das Buch ruhig lesen.
Ich hab's auch nicht ganz durchgelesen und bin wie gesagt kein Profi, aber das ist meine Meinung
Wobei wenn du eh schon Java kannst, brauchst du doch gar kein so dickes Buch, die Grundlagen kannst du dir auch viel knapper zusammengepackt aus anderen Quellen holen, damit wirst du als "erfahrener" (keine Ahnung inwieweit das zutrifft) wohl keine Probleme haben.
So, dann hier mal meine allerersten beiden Scripte in Python *mirAufDieSchulterKlopf* weiss zwar nicht ob jemand durch meinen suboptimalen Code durchfindet, aber wenn es jemand tut und bessere Ideen hat, immer mal her damit, fange ja gerade erst an und will was lernen. Irgendwie hab ich das Gefühl das mein Code zimlich hässlich ist aber naja... Hab 2 funktionen geschrieben.
Funktion 1: formatiert eine Python Datei (sehr!) einfach in eine HTML Datei, dabei hab ich einige Formatierungen für mich definiert
""" einzeiliges Kommentar """ in kursiv
""" Mehrzeiliges Kommenar als Überschrift
- Info
- Info
"""
CodeBlöcke in Grün
## definiert am Ende einer CodeZeile das der String interpretiert werden soll
- Ein Kritikpunkt hab ich schon ich fange zwei sehr globale Fehler ab, die beim parsen der Strings vorkommen können, die ich aber nicht weiter behandel, weil es nicht lebendsbedrohlich ist, wenn mal ein Kommentar nicht interpretiert wird, vielleicht bügel ich das mal ordentlich aus
Funktion 2: formatiert meine Quellcode Datei nur um, damit die Kommentare alle auf derselben Höhe sind
Funktion 1: formatiert eine Python Datei (sehr!) einfach in eine HTML Datei, dabei hab ich einige Formatierungen für mich definiert
""" einzeiliges Kommentar """ in kursiv
""" Mehrzeiliges Kommenar als Überschrift
- Info
- Info
"""
CodeBlöcke in Grün
## definiert am Ende einer CodeZeile das der String interpretiert werden soll
- Ein Kritikpunkt hab ich schon ich fange zwei sehr globale Fehler ab, die beim parsen der Strings vorkommen können, die ich aber nicht weiter behandel, weil es nicht lebendsbedrohlich ist, wenn mal ein Kommentar nicht interpretiert wird, vielleicht bügel ich das mal ordentlich aus
Funktion 2: formatiert meine Quellcode Datei nur um, damit die Kommentare alle auf derselben Höhe sind
Code: Alles auswählen
# coding=UTF8
import sys
import os
def generateHTML(fileOut,fileIn):
fileObjectIn=open(fileIn, "r")
fileObjectOut=open(fileOut+".html", "w")
fileObjectOut.write("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><title>"+ fileOut +"</title></head><body>")
comment=False
code=True
fileObjectOut.write("<br><table bgcolor=#90ee90 width=80%><tr><td><pre><i>")
argsList={}
for line in fileObjectIn:
if (comment and line.count("\"\"\"")==1): #Kommentar beendet
fileObjectOut.write("<br>")
comment=False;
code=True
fileObjectOut.write("<br><table bgcolor=#90ee90 width=80%><tr><td><pre><i>")
elif (line.count("\"\"\"")==1): #KommentarBlock
if (code):
fileObjectOut.write("</i></pre></td></tr></table><br>")
code=False
line=line.replace("\"\"\"", " ")
fileObjectOut.write("<b>" + line + "</b><br>")
comment=True
code=False
elif (line.count("\"\"\"")==2): #einzeiliger Kommentar
if (code):
fileObjectOut.write("</i></pre></td></tr></table><br>")
code=True
line=line.replace("\"\"\"", "")
fileObjectOut.write("<i>" + line + "</i><br>")
fileObjectOut.write("<br><table bgcolor=#90ee90 width=80%><tr><td><pre><i>")
else:
if code and line.count("=")==1 and not line.startswith("#"): #der schwirige teil: Code interpretation, a) Zuweisungen Filtern und dem dict hinzufügen
try:
if line.find("#")!=-1:
codeLine=line.partition("#")[0]
commentLine=line.partition("#")[2]
else:
codeLine=line.rstrip()
commentLine="";
codeSequenz=codeLine.split("=")[1].strip()
returnValue=eval(str(codeSequenz),argsList)
argsList.update({codeLine.split("=")[0]:returnValue})
except SyntaxError:
print "Error in Line",line
except NameError:
print "Error in Line", line
elif code and line.count("##")== 1: #print Anweisungen ausführen und in die HTML Datei schreiben
try:
if line.find("#")!=-1:
codeLine=line.partition("#")[0]
commentLine=line.partition("#")[2]
else:
codeLine=line.rstrip()
commentLine="";
codeSequenz=codeLine.strip().replace("print","")
returnValue=eval(codeSequenz,argsList)
newComment=" ".join(("#>>",str(returnValue)," : ",commentLine))
line= codeLine + newComment
except ValueError:
print "Error in Line",line
except SyntaxError:
print "Error in Line",line
fileObjectOut.write(line+"<br>")
fileObjectOut.write("</body></html>")
fileObjectIn.close()
fileObjectOut.close()
def CommentFormatter(fileName):
fileIn=open(fileName,"r")
fileOut=open(fileName +".temp","w")
CODELENGTH=75
for line in fileIn:
if line.startswith("#"):
if line.count("#")>1:
lineList=line.split("#",2)
fileOut.write("#" + lineList[1].rstrip().ljust(CODELENGTH-1) + "#" + lineList[2])
else:
fileOut.write(line)
elif line.find("#")!=-1:
lineList=line.partition("#")
fileOut.write(lineList[0].rstrip().ljust(CODELENGTH) + "#" + lineList[2])
else:
fileOut.write(line)
fileIn.close()
fileOut.close()
inName=fileIn.name.replace("\\","/")
outName=fileOut.name.replace("\\","/")
try:
os.remove(inName+"_save")
except WindowsError:
pass
os.rename(inName,inName+"_save")
os.rename(outName,inName)
So kurz drübergeschaut sieht's mir zu komplex aus. Und die Namensgebung ist teilweise nicht so toll. Zum Beispiel `fileIn` und `fileObjectIn`. Das etwas ein Objekt ist, braucht man nicht im Namen erwähnen, denn in Python ist *alles* was an einen Namen gebunden werden kann ein Objekt. Im Quelltext ist `fileIn` auch kein "file" sondern ein Name. Dann könnte man es also auch `input_filename` nennen und das Dateiobjekt dann `input_file`.
Man kann Zeichenketten auch in ' einfassen, dann braucht man die " nicht zu "escapen" und kann auch beim HTML die Attributwerte in " setzen.
Kann es sein, das `comment` und `code` die gleiche Information speichern, nur eben mit "umgedrehten Vorzeichen"?
`dict.update()` mit einem Dictionary mit einem Eintrag zu verwenden, um das Dictionary um eben diesen einen Eintrag zu erweitern, ist reichlich umständlich.
Die `replace()`-Geschichte mit den Dateinamen in der zweiten Funktion ist ziemlich abenteuerlich und sicher nicht portabel.
Man kann Zeichenketten auch in ' einfassen, dann braucht man die " nicht zu "escapen" und kann auch beim HTML die Attributwerte in " setzen.
Kann es sein, das `comment` und `code` die gleiche Information speichern, nur eben mit "umgedrehten Vorzeichen"?
`dict.update()` mit einem Dictionary mit einem Eintrag zu verwenden, um das Dictionary um eben diesen einen Eintrag zu erweitern, ist reichlich umständlich.
Die `replace()`-Geschichte mit den Dateinamen in der zweiten Funktion ist ziemlich abenteuerlich und sicher nicht portabel.