Variablentypen für Funktionsargumente definieren?

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.
Antworten
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

Freitag 29. Juni 2007, 20:36

Hi.
Ich weiß wohl, dass es bei Python eine dynamische typisierung gibt und sich der Typ sozusagen immer an den Inhalt anpasst.
Aber es wäre doch praktisch, wenn man bei Funktionsdefinitionen die Typen angeben könnte ..
Also zB

Code: Alles auswählen

def blablubb(int foo, string bar):
Geht das vielleicht irgendwie? Oder muss man das dann umständlich über exceptions o.Ä regeln?
Benutzeravatar
tiax
User
Beiträge: 152
Registriert: Samstag 23. Juli 2005, 17:28
Kontaktdaten:

Freitag 29. Juni 2007, 22:08

Warum brauchst du das denn?

Reichts eventuell wenn sich das übergebene Objekt verhält wie ein Integer?
Ne invoces expellere non possis
[url=xmpp://florian@florianheinle.de]xmpp:florian@florianheinle.de[/url]
BlackJack

Samstag 30. Juni 2007, 07:51

@Karl: Nur um Missverständnisse zu vermeiden: Python ist dynamisch und stark typisiert. Der Typ ist nicht beim Namen gespeichert, sondern beim Objekt. Namen kann man also an verschiedenste Typen binden -> dynamisch typisiert. Der Typ eines Objekts ist aber fest, der ändert sich nicht auf magische Weise -> stark typisiert.

Falls Du jetzt mit "umständlich mit Exceptions […] regeln" meinst, ob Du überprüfen musst, ob `foo` ein `int` und `bar` ein `str` ist um dann Ausnahmen auszulösen: Nein das passiert automatisch wenn Du versuchst mit `foo` oder `bar` etwas anzustellen, was die daran gebundenen Objekte nicht unterstützen.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Samstag 30. Juni 2007, 15:03

In Python 3000 wird das gehen das man bestimmte Typen 'festsetzt'.

In der jetzigen Version fällt mir nur folgendes so auf die schnelle ein:

x = "string"
x.isdigit()
x.isalpha()
x.isalnum()

und man kann noch überprüfen ob ein variable ein string, int ...... ist das heißt aber nicht das in einem string in Wirklichkeit ein Zahl steht.
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

Samstag 30. Juni 2007, 15:40

BlackJack hat geschrieben:@Karl: Nur um Missverständnisse zu vermeiden: Python ist dynamisch und stark typisiert. Der Typ ist nicht beim Namen gespeichert, sondern beim Objekt. Namen kann man also an verschiedenste Typen binden -> dynamisch typisiert. Der Typ eines Objekts ist aber fest, der ändert sich nicht auf magische Weise -> stark typisiert.
Missverständnis erfolgreich vermieden ;)

BlackJack hat geschrieben:Falls Du jetzt mit "umständlich mit Exceptions […] regeln" meinst, ob Du überprüfen musst, ob `foo` ein `int` und `bar` ein `str` ist um dann Ausnahmen auszulösen: Nein das passiert automatisch wenn Du versuchst mit `foo` oder `bar` etwas anzustellen, was die daran gebundenen Objekte nicht unterstützen.
Ok, eigentlich hast du recht. Sogesehn macht es ja keinen Unterschied, ob die Argumente einen festgesetzten Typ haben oder nicht. Irgendwie kam mir das aber merkwürdig vor ... Ok, anscheinend ist das Problem damit gelöst :P
Sr4l hat geschrieben: und man kann noch überprüfen ob ein variable ein string, int ...... ist das heißt aber nicht das in einem string in Wirklichkeit ein Zahl steht.
Ok, das ist mir klar ;)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Samstag 30. Juni 2007, 16:01

Sr4l hat geschrieben:In Python 3000 wird das gehen das man bestimmte Typen 'festsetzt'.
Davon weiß ich nichts.
In der jetzigen Version fällt mir nur folgendes so auf die schnelle ein:

x = "string"
x.isdigit()
x.isalpha()
x.isalnum()

und man kann noch überprüfen ob ein variable ein string, int ...... ist das heißt aber nicht das in einem string in Wirklichkeit ein Zahl steht.
Was hat das mit dem Thema zu tun?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Samstag 30. Juni 2007, 16:30

birkenfeld hat geschrieben:
Sr4l hat geschrieben:In Python 3000 wird das gehen das man bestimmte Typen 'festsetzt'.
Davon weiß ich nichts.
Schau mal hier in den Abschnitt "Overloading". Ist zwar nicht direkt festsetzen, sondern nur Dispatchen, aber ich denke, dass es das ist, was Sr4l meinte.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Samstag 30. Juni 2007, 16:36

EyDu hat geschrieben:
birkenfeld hat geschrieben:
Sr4l hat geschrieben:In Python 3000 wird das gehen das man bestimmte Typen 'festsetzt'.
Davon weiß ich nichts.
Schau mal hier in den Abschnitt "Overloading". Ist zwar nicht direkt festsetzen, sondern nur Dispatchen, aber ich denke, dass es das ist, was Sr4l meinte.
Schau mal in den Header, da steht "Draft" und nicht "Accepted", und "This PEP proposes a new standard library module, overloading". Das ist also keineswegs eine Feature der Sprache, sondern ein Zusatzmodul.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Antworten