Strenge Typisierung bei Python

Hi,

ich lerne gerade Python und verstehe die strenge Typisierung nicht ganz. Ich habe das so verstanden, dass wenn einer Variablen ein Wert zugewiesen wird, die Variable intern den Datentyp des Werts bekommt. Danach kann dieser Variablen kein Wert mehr zugewiesen werden, die einen anderen Datentyp hat.

Das ist aber anscheinend nicht korrekt, da folgendes funktioniert:

a = 1
a = „ein string“
print a

Könnte mir evtl. jemand die strenge Typisierung erklären ?

Danke.

Grüße,

Tris.

Hilft dir das?

http://www.voidspace.org.uk/python/articles/duck_typ…
http://en.wikipedia.org/wiki/Duck_typing

mfg.

Hallo

ich lerne gerade Python und verstehe die strenge Typisierung
nicht ganz. Ich habe das so verstanden, dass wenn einer
Variablen ein Wert zugewiesen wird, die Variable intern den
Datentyp des Werts bekommt. Danach kann dieser Variablen kein
Wert mehr zugewiesen werden, die einen anderen Datentyp hat.

Nee, das ist anders. ‚strong typing‘ bedeutet nur, daß
Dir bei Operationen mit unterschiedlichen Datentypen
starke Restriktionen auferlegt werden (strong).

Das ist aber anscheinend nicht korrekt, da folgendes
funktioniert:

Folgendes funktioniert in Perl (die $ Kennzeichnen nur skalare Typen)

 $a = "ein string ";
 $b = 3;
 $c = $a + $b; # numerische Addition, string wird interpretirert
 $d = $a . $b; # Stringverkettung, Zahl wird zu string

 print " a=$a, b=$b\n c=$c, d=$d\n";

Mit folgendem Resultat:

 a=ein string , b=3
 c=3, d=ein string 3

In Python würde das aus mehreren Gründen nicht gehen,
es gibt keine implizite Stringkonvertierung nach dem
DWIM-Prinzip (do what I mean) - und es gibt
keine getrennten Operatoren für Verkettung/Addition.

Beide Punkte wären (und waren tatsächlich u.a. auch)
zumindest für mich ein starkes Argument gegen Python.

Grüße

CMb

Hallo,

Das ist aber anscheinend nicht korrekt, da folgendes
funktioniert:

a = 1
a = „ein string“
print a

1 und „ein string“ sind beides Objekte. a ist ein Name, und dieser Name wird an eine anderes Objekt „gebunden“.

D.h. die Werte selbst sind stark typisiert, aber die „Container“, in denen du sie abspeicherst, sind es nicht.

Grüße,
Moritz

Hallo,

danke für Deine Hilfe.

Nee, das ist anders. ‚strong typing‘ bedeutet nur, daß
Dir bei Operationen mit unterschiedlichen Datentypen
starke Restriktionen auferlegt werden
(strong).

in Wikipedia steht, dass Java eine stark typisierte Sprache ist. Trotzdem ist aber in Java folgendes möglich:

String s = 3 + „3“;

3 ist vom Typ Integer
„3“ ist vom Typ String

In Python kann man folgendes machen:

a = 3 + 3.3

3 ist vom Typ integer
3.3 ist vom Type float (?)

Die Operanden haben unterschiedliche Datentypen und trotzdem kann man auf ihnen Operationen ausführen ohne explizites Casting.

Grüße,

Tris.

Hallo,

in Wikipedia steht, dass Java eine stark typisierte Sprache
ist. Trotzdem ist aber in Java folgendes möglich:

String s = 5 + „3“;

:wink:

System.out.println(s)

53

 int i = 5 + "3";

error: incompatible types

in Perl:

 $i = 5 + "3"; # ==\> 8
 $i = 5 . "3"; # ==\> 53

alles klar :wink:

Grüße

CMБ