Thread Was bedeutet das "-" ? (19 answers)
Opened by hlubenow at 2009-02-22 22:54

hlubenow
 2009-02-24 21:24
#119117 #119117
User since
2009-02-22
875 Artikel
BenutzerIn
[default_avatar]
LanX-+2009-02-24 17:06:01--
Na jetzt must du uns aber erklären was "gewöhnliche Funktions-Argumente" in Python/Tkinter sind. Nur positional oder auch benannt?

Aber gern! Ich wollte euch halt nicht gleich ungefragt mit Code in anderen Sprachen belästigen.

Mit denen von http://www.python-forum.de/ hatte ich leider auch Ärger (die sind im allgemeinen schon recht kompetent, aber mehrere von ihnen sind leider sehr unhöflich, ich weiß nicht, warum). Vielleicht ist das auch einer der Gründe, warum ich jetzt mal hier auftauche.

Also: In Python heißt das Schlüsselwort für Funktionen "def" (statt in Perl: "sub").
Bei der Funktionsbeschreibung gibt man an, welche Argumente die Funktion erhalten soll.
Das ist ähnlich wie in C, aber man muß (und kann) nicht den Datentyp angeben.
Man kann also folgendes machen:
Code: (dl )
1
2
3
4
5
6
def myFunc(a, b):

print a
print b

myFunc(5, 7)

(Bitte aufrufen mit "python script.py".)

Beim Funktionsaufruf kann man zudem festlegen, auf welche Argumente sich die Übergabewerte beziehen sollen. Man braucht dann auch die Reihenfolge der Übergabewerte nicht einzuhalten:
Code: (dl )
1
2
3
4
5
6
def myFunc(a, b):

print a
print b

myFunc(b = 7, a = 5)

Außerdem kann man bei der Funktionsbeschreibung zusätzlich Default-Werte für die Argumente angeben:
Code: (dl )
1
2
3
4
5
6
def myFunc(a = 1, b = 2):

print a
print b

myFunc(b = 7)

Ein Klassenkonstruktor ist in Python im Prinzip genau so eine "def"-Funktion (mit dem festgelegten Namen "__init__" und der Klasse selbst als erstem Argument (self)). Man kann dem Konstruktor also auch auf die oben beschriebene Weise Werte übergeben (übrigens auch direkt Listen, Hashes oder sogar größere Objekte, ohne daß diese plattgedrückt werden, so daß man mit ihnen direkt weiterarbeiten kann).

Die Perl/Tk-Zeile
Code (perl): (dl )
my $label = $main->Label(-text => 'Hello, world!');

sähe in Python/Tkinter dann also so aus:
Code: (dl )
label = Tkinter.Label(master = main, text = 'Hello, world!')

Lauffähiger Code dann insgesamt:
Code: (dl )
1
2
3
4
5
6
import Tkinter 

main = Tkinter.Tk()
label = Tkinter.Label(master = main, text = 'Hello, world!')
label.pack()
main.mainloop()

Da die Werte in der Weise wie oben angegeben übergeben werden müssen, muß man hier "master = main" und "text = 'Hello, world!'" schreiben (oder schlicht "main, 'Hello, world!'). Sowas wie "-master => main" geht aber nicht. Also kein Bindestrich.

Hmm, ich hoffe, ich habe mich klar genug ausgedrückt.

Viele Grüße

View full thread Was bedeutet das "-" ?