Python-Statement in String

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.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Freitag 13. Juni 2008, 10:32

da.dom hat geschrieben:uff und der Unterschied liegt wo?


Praktisch gesagt, alles was auf der rechten seine einer Zuweisung stehen kann, ist eine expression.
Ausnahme/Mehrdeutigkeit ist das if, als if,elif,else ists ein Statement, als = a if b else c eine expression.
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Freitag 13. Juni 2008, 10:33

da.dom hat geschrieben:uff und der Unterschied liegt wo?

Expressions geben was zurück. Und wenn es nur None ist. 1 + 1 gibt zb 2 zurück. int("42") gibt einen integer zurück, dict.update() verändert ein dict und gibt zumindest None zurück.

print kann nix zurückgeben, das ist ein Statement. wenn du "foo = print 42" machst bekommst du einen SyntaxError.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 13. Juni 2008, 10:34

da.dom hat geschrieben:uff und der Unterschied liegt wo?

Dass die Statements Keywords sind und du keine Objekte an ``print`` etc. binden kannst. Noch dazu haben Statements keinen Rückgabewert. Also Programmieranfänger ist der Unterschied zwischen Statement und Expression nicht besonders relevant, auch später ändert es sich nicht sonderlich.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Freitag 13. Juni 2008, 14:12

Statements geben keinen Wert zurück und können damit nicht Teil einer Expression sein.

Stell dir ein Python-Modul zusammengesetzt aus Statements vor, die beim Import oder direktem Ausführen eines nach dem anderen ausgeführt werden. Manche Statements, wie def, class, if oder with, enthalten (im Quellcode eingerückte) Blöcke mit Unterstatements, sog. Suiten. Fast alle Statements (außer z.b. pass) enthalten darüberhinaus auch Expressions, die als Teil der Ausführung des Statements ausgewertet werden.

Nicht jedes Statement muss übrigens mit einem Schlüsselwort eingeleitet werden -- eine Zuweisung ist auch ein Statement.

Und damit du auch so etwas problemlos schreiben kannst:

Code: Alles auswählen

def foo():
    "Docstring"

ist auch jede Expression für sich alleine ein gültiges Statement.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Beitragvon da.dom » Montag 16. Juni 2008, 09:53

HuHu..

erst mal danke für die vielen Antworten, in dem Fall sehe ich jetzt etwas klarer...ein Problem stellt sich bei meinem "komplexer" werdenden Übungen aber:

Code: Alles auswählen

map={1337:"leet",abc:123,123:XXX}
                 
#der Code der als String ausgeführt werden soll:   
print len(map)     


bei meinen Einzeilern was das bisher kein problem, aber wie lasse ich einen String interpretieren, der auf Variablen zugreift die vorher definiert wurden? Vorher ebenfalls durch eval ausführen kann ich ja nicht (map=.... ist ja ein Statement aber keine Expression (richtig :) ?))

Grüße
D
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Montag 16. Juni 2008, 10:04

bei meinen Einzeilern was das bisher kein problem, aber wie lasse ich einen String interpretieren, der auf Variablen zugreift die vorher definiert wurden?

indem du sie bei eval als dictionaries mitgibst (2. und 3. parameter).
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Beitragvon da.dom » Montag 16. Juni 2008, 10:13

Wollte meinen Beitrag gerade noch editieren, weil folgendes Beispiel geht antürlich wenn ich es hintereinander weg schreibe:

Code: Alles auswählen

x=10
print eval('x+5')


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.

keppla hat geschrieben:
bei meinen Einzeilern was das bisher kein problem, aber wie lasse ich einen String interpretieren, der auf Variablen zugreift die vorher definiert wurden?

indem du sie bei eval als dictionaries mitgibst (2. und 3. parameter).


So gehts :) hatte es in der API scheinbar überlesen, obwohl ich bei meiner Lern-Lektüre gerade exakt an der Stelle bei "dictionaries" angekommen bin :)

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
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Montag 16. Juni 2008, 10:20

Suchst du vielleicht sowas?

Code: Alles auswählen

exec "print a + b" in {'a': 23, 'b': 42}
TUFKAB – the user formerly known as blackbird
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Beitragvon da.dom » Montag 16. Juni 2008, 11:18

mitsuhiko hat geschrieben:Suchst du vielleicht sowas?

Code: Alles auswählen

exec "print a + b" in {'a': 23, 'b': 42}


ach du grüne neune...das geht ja...sehr schick.

*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
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Montag 16. Juni 2008, 11:54

da.dom hat geschrieben:*schwindeligWerd* ich seh schon hab noch einen langen Weg vor mir bis ich behaupten kann das ich ein bisschen Pyhton beherrsche :/

Spielt doch keine Rolle. Das tolle an Python ist doch gerade, dass man mit wenig Wissen schon weit kommt und immer was neues entdecken kann :-)
TUFKAB – the user formerly known as blackbird
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Beitragvon da.dom » Montag 16. Juni 2008, 12:48

das hört sich gut an :) werde dann erst mal mein Galileo OpenBook weiterlesen, fand ich für dein grundierten Einstieg ganz gut....
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Montag 16. Juni 2008, 13:00

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....


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
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Beitragvon da.dom » Montag 16. Juni 2008, 13:10

EyDu hat geschrieben:
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....


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.


Für mich scheinbar schon ... warum Java in Python, was ist an Java so schlecht? Das Buch für den Einstieg nicht empfehlenswert?
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Montag 16. Juni 2008, 13:14

da.dom hat geschrieben:
EyDu hat geschrieben:
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....


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.


Für mich scheinbar schon ... warum Java in Python, was ist an Java so schlecht? Das Buch für den Einstieg nicht empfehlenswert?
Java? Bevor'n Flamewar ausbricht:

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.
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

Beitragvon da.dom » Montag 16. Juni 2008, 13:21

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")...

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder