[python-users] Fiese Falle
Daniel Hepper
daniel.hepper at gmail.com
Mo Jun 13 09:17:39 CEST 2016
Hallo zusammen,
Python ist nun mal eine dynamisch, strikt typisierte Sprache. Darum wird
"-1" nicht als Zahl behandelt, ausser man konvertiert es explizit in eine.
Unter Java (statisch, strikt typisiert) könnte man dank Generics in genau
die gleiche "fiese Falle" laufen.
public static <T extends Comparable<T>> T min( T m, T n )
{
return m.compareTo( n ) < 0 ? m : n;
}
System.out.println( min( "-1", "-2" ) ); // -1
System.out.println( min( -1, -2 ) ); // -2
Wirklich interessant wird es m.E. erst wenn man Typen mischt.
$ python
Python 2.7.10 (default, Jul 14 2015, 19:46:27)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> min(-1, '-2')
-1
$ python3.4
Python 3.4.3 (default, Aug 26 2015, 18:29:14)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> min(-1, "-2")
>>> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() < int()
Wer noch mehr solcher Kuriositäten sehen will dem sei der sehr
unterhaltsame Lightning-Talk "Wat" zu empfehlen:
https://www.destroyallsoftware.com/talks/wat
Viele Grüße,
Daniel
2016-06-13 8:13 GMT+02:00 Dirk Hünniger <python-users at uni-koeln.de>:
> ________________________________________
>
> Diese Mail erhalten Sie ueber die Mailingliste python-users der
> Universitaet zu Koeln
> Nachrichten an: python-users at uni-koeln.de
> Abonnement und Benutzereinstellungen:
> https://lists.uni-koeln.de/mailman/listinfo/python-users
> Listenarchiv: http://pycologne.de/mlsearch.html
>
> pyCologne Homepage: http://pycologne.de/
>
>
> ---------- Forwarded message ----------
> From: "Dirk Hünniger" <dirk.hunniger at googlemail.com>
> To: python-users at uni-koeln.de
> Cc:
> Date: Mon, 13 Jun 2016 08:13:13 +0200
> Subject: Re: [python-users] Fiese Falle
> Naja,
> ich bin ebenfalls der Ansicht, dass hier etwas mit den Typen nicht so ist
> wie man es vielleicht ohne nachzudenken erwarten würde. Man könnte explizit
> formulieren, dass es sich bei -1 und -2 jeweils um Integer handelt. Dies
> würde begünstigt, wenn man Typen immer vollständig ausschriebe, wie man es
> in z.B. in Java tut. In Python hat man allerdings durch den Aufruf der
> Funktion int ähnliche Möglichkeiten, wenn man auch selbst die volle
> Verantwortung trägt dies auch zu tun. Die Alternative die Ordnungsrelation
> auf Strings abzuschaffen, scheint mir weniger aussichtsreich, da man ja
> gelegentlich Dinge alphabetisch sortieren möchte und ferner Strings in AVL
> o.ä. Bäumen verwalten möchte.
> Viele Grüße Dirk
>
> On 12.06.2016 23:14, Michael Kesper wrote:
>
>> Hallo Dirk, hallo zusammen,
>>
>> in der Tat:
>>
>> Python 2.7.9 / Python 3.4.2:
>> >>> print(min("-1","-2"))
>> -1
>> >>> print(max("-1","-2"))
>> -2
>>
>> Erwartet hätte ich eigentlich eine TypeError Exception.
>>
>> Viele Grüße
>> Michael
>> ________________________________________
>>
>> Diese Mail erhalten Sie ueber die Mailingliste python-users der
>> Universitaet zu Koeln
>> Nachrichten an: python-users at uni-koeln.de
>> Abonnement und Benutzereinstellungen:
>> https://lists.uni-koeln.de/mailman/listinfo/python-users
>> Listenarchiv: http://pycologne.de/mlsearch.html
>>
>> pyCologne Homepage: http://pycologne.de/
>>
>
>
>
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.uni-koeln.de/pipermail/python-users/attachments/20160613/7eebe671/attachment.html>
Mehr Informationen über die Mailingliste python-users