Seite 1 von 1
del == del()?
Verfasst: Montag 5. September 2011, 11:31
von Gregorrr
Hallo, ich habe eventuell eine komische Frage, aber ich konnte dazu irgendwie rein gar nichts finden:
machen das Gleiche. Was ist zu bevorzugen. Bei print ist ja print() wegen der Umstellung zu Python 3 zu bevorzugen. ("Guter Stil?").
Ich konnte del() auch nicht bei den built-ins finden:
http://docs.python.org/py3k/library/functions.html
Re: del == del()?
Verfasst: Montag 5. September 2011, 11:43
von DasIch
Lass () bei Statements einfach weg, dass gilt für del übrigens genauso wie für print.
Re: del == del()?
Verfasst: Montag 5. September 2011, 11:57
von cofi
Weil es eben keine Funktion ist, Statements sind in der Sprachreferenz dokumentiert:
http://docs.python.org/reference/simple ... n-del_stmt
Bei `print` sollte man wie DasIch schon sagte Klammern auch weglassen. Teste zum Beispiel mal `print 1,2` und `print(1,2)`
Re: del == del()?
Verfasst: Montag 5. September 2011, 12:28
von Gregorrr
cofi hat geschrieben:
Weil es eben keine Funktion ist, Statements sind in der Sprachreferenz dokumentiert:
http://docs.python.org/reference/simple ... n-del_stmt
Bei `print` sollte man wie DasIch schon sagte Klammern auch weglassen. Teste zum Beispiel mal `print 1,2` und `print(1,2)`
Ahso. print ist bei dem Wechsel von 2 => 3 von einem Statement zu einer Funktion geworden, deswegen braucht man die runden Klammern in Python 3. del ist aber ein Statement geblieben.
Nun kann man auch z.B. bei return() klammern setzen. Es ist aber keine Funktion, sondern auch ein Statement, d.h. bei Statements am besten die Klammern weglassen.
OK. Vielen Dank für die Antworten!!!
Re: del == del()?
Verfasst: Montag 5. September 2011, 13:12
von pillmuncher
Gregorrr hat geschrieben:Ahso. print ist bei dem Wechsel von 2 => 3 von einem Statement zu einer Funktion geworden, deswegen braucht man die runden Klammern in Python 3. del ist aber ein Statement geblieben.
Nun kann man auch z.B. bei return() klammern setzen. Es ist aber keine Funktion, sondern auch ein Statement, d.h. bei Statements am besten die Klammern weglassen.
Es geht sogar bei if- und while-Statements:
Der Grund, warum man bei Statements Klammern setzen kann ist, dass runde Klammern um Ausdrücke lediglich der Gruppierung dienen. Wie hier:
Generell hat ein Ausdruck expr denselben Wert wie derselbe Ausdruck in Klammern:
Rund Klammern haben aber noch weitere Funktionen: zB. zur Erzeugung von Tupeln:
und auch bei der Definition und beim Aufruf von Funktionen:
Parameter- bzw. Argument-Listen mit weniger oder mehr als einem Argument kann man nicht zusätzlich nochmal einklammern, weil zB.
etwas anderes ist, als
Im ersten Fall wird eine Funktion mit drei Argumenten aufgerufen, im zweiten Fall wird sie mit nur einem Argument aufgerufen, welches jedoch ein Tuple mit drei Elementen ist.
Re: del == del()?
Verfasst: Montag 5. September 2011, 13:16
von deets
pillmuncher hat geschrieben:
Rund Klammern haben aber noch weitere Funktionen: zB. zur Erzeugung von Tupeln:
Nein, haben sie nicht, wie dieses simple Beispiel zeigt:
Tupel werden durch Kommata erzeugt. Die Klammern sind nur - wie von dir ja schon richtig bemerkt - disambiguierung notwendig.
Re: del == del()?
Verfasst: Montag 5. September 2011, 14:04
von pillmuncher
deets hat geschrieben:pillmuncher hat geschrieben:
Rund Klammern haben aber noch weitere Funktionen: zB. zur Erzeugung von Tupeln:
Nein, haben sie nicht, [...]
Du hast recht. Allerdings kann man ein leeres Tupel nicht ohne Klammen erzeugen:
Code: Alles auswählen
>>> x = ,
File "<stdin>", line 1
x = ,
^
SyntaxError: invalid syntax
Gruß,
Mick.
Re: del == del()?
Verfasst: Montag 5. September 2011, 14:24
von DasIch
Leere Tupel sind aber prinzipiell ein Sonderfall und machen semantisch nur ganz selten Sinn.
Re: del == del()?
Verfasst: Montag 5. September 2011, 14:26
von deets
[quote="pillmuncher"][quote="deets"][quote="pillmuncher"]
Du hast recht. Allerdings kann man ein leeres Tupel nicht ohne Klammen erzeugen:
Code: Alles auswählen
>>> x = ,
[/quote][/quote][/quote]
Hach, immer diese Sonderfaelle. Ja, hatte ich vergessen :)
Re: del == del()?
Verfasst: Montag 5. September 2011, 14:42
von lunar
@pillmuncher: Formal ist ein leeres Tupel ein Sonderfall einer
parenthesized form, gilt als Literal und kann daher nicht mit einem Komma erzeugt werden (auch nicht mit "(,)").
Re: del == del()?
Verfasst: Dienstag 6. September 2011, 10:13
von Gregorrr
Danke für die ausführlichen Antworten!
Re: del == del()?
Verfasst: Dienstag 6. September 2011, 20:37
von bords0
@pillmuncher: hinter del steht keine expression, sondern eine target_list. Die erlaubt zwar "zufällig" auch Klammern (runde und eckige), das hat aber nichts mit Ausdrücken zu tun.
Re: del == del()?
Verfasst: Dienstag 6. September 2011, 21:39
von pillmuncher
bords0 hat geschrieben:@pillmuncher: hinter del steht keine expression, sondern eine target_list. Die erlaubt zwar "zufällig" auch Klammern (runde und eckige), das hat aber nichts mit Ausdrücken zu tun.
Du hast recht.
Hier der Link der alles erklärt. Es wäre auch nicht gar sinnvoll, den Wert von Ausdrücken zu löschen:
Code: Alles auswählen
>>> del 1 + 2
File "<stdin>", line 1
SyntaxError: can't delete operator
>>> def foo():
... return 7
...
>>> del foo()
File "<stdin>", line 1
SyntaxError: can't delete function call
Gruß,
Mick.