[python] Pulnocni rozjimani :-)
Vláďa Macek
macek na sandbox.cz
Čtvrtek Duben 6 00:22:36 CEST 2017
Dik. Jiny pohled, protoze to je zajimave. :-)
>>> {0, False, 0.0, 0j}
set([0j])
>>> {0, 0j, 0.0, False}
set([False])
>>> {True, 1, -1j*1j, 1.0}
set([1.0])
Hint:
>>> map(hash, (True, 1, -1j*1j, 1.0))
[1, 1, 1, 1]
BTW, PyPy vezme naopak prvni prvek z literalu.
Pritom jeste jedna zajimava vec:
>>> a = 'ahoj'
>>> b = -1425894204
>>> hash(a), hash(b), hash(a) == hash(b)
(-1425894204, -1425894204, True)
>>> {a, b}
set(['ahoj', -1425894204])
A taky:
>>> {1j*1j, -1}
set([-1])
>>> {-1, 1j*1j}
set([(-1+0j)])
>>> map(hash, (1j*1j, -1))
[-2, -2]
Nabizim vysvetleni: Hesovani slouzi pouze k rychlemu prvotnimu vyberu
pomyslneho kbeliku, kde se daji cekat stejne hodnoty. Pak uz se linearne
testuje klasicka rovnost. Proto i kdyz jsou vysledky hash() stejne, klice
nemusi byt vyhodnocene jako stejne.
>>> True == 1 == -1j*1j == 1.0
True
Zajimave taky je cteni o tom, ze CPython implementuje methodu __hash__()
pro ruzne zakladni datove typy ruzne.
BTW, prosim postujte ozobackovane radky odsazene. Diky. :-)
V.
On 5.4.2017 22:20, Petr Přikryl wrote:
> Chlapi, co jste pili? S džusem, nebo jen tak? :)
>
> Ale nevidíte v tom žádnou záhadu, že ne? ;)
>
> Přidám tohle...
>
>>>> m = set()
>>>> m
> set()
>>>> m.add('a')
>>>> m
> {'a'}
>>>> m.add(2)
>>>> m
> {2, 'a'}
>>>> m.add(1)
>>>> m
> {1, 2, 'a'}
>>>> m.add(True)
>>>> m
> {1, 2, 'a'}
>>>> m.add(1.0)
>>>> m
> {1, 2, 'a'}
>>>> m.add(False)
>>>> m
> {False, 1, 2, 'a'}
>>>> m.add(0)
>>>> m
> {False, 1, 2, 'a'}
>>>> m.add(0.0)
>>>> m
> {False, 1, 2, 'a'}
>
> Mějte se fajn,
> Petr
>
> ______________________________________________________________
>> Od: Pavel Schön <pavel na schon.cz>
>> Komu: python na py.cz
>> Datum: 11.05.2015 12:46
>> Předmět: Re: [python] Pulnocni rozjimani :-)
>>
>> $ python
>> Python 2.6.6 (r266:84292, Nov 21 2013, 10:50:32)
>> [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
>>>>> a = 256
>>>>> b = 256
>>>>> a is b
>> True
>>>>> a = 257
>>>>> b = 257
>>>>> a is b
>> False
>>
>>
>> On Sunday, May 10, 2015 at 1:05:58 AM UTC+2, Vladimir Macek wrote:
>>> Just having fun.
>>>
>>> $ python
>>> >>> a = {}
>>> >>> b = {'a': a}
>>> >>> a['b'] = b
>>> >>> a
>>> {'b': {'a': {...}}}
>>> >>> b
>>> {'a': {'b': {...}}}
>>> >>> import cPickle
>>> >>> ap = cPickle.dumps(a)
>>> >>> del a, b
>>> >>> len(ap)
>>> 26
>>> >>> a = cPickle.loads(ap)
>>> >>> a
>>> {'b': {'a': {...}}}
>>> >>> a['b']
>>> {'a': {'b': {...}}}
>>> >>> a['b']['a']
>>> {'b': {'a': {...}}}
>>> >>> a['b']['a']['b']
>>> {'a': {'b': {...}}}
>>> >>>
>>>
>>> Navaze nekdo? :-)
>>>
>>> V.
>>>
>>>
>>> --- news://freenews.netfront.net/ - complaints: news na netfront.net ---
>> _______________________________________________
>> Python mailing list
>> python na py.cz
>> http://www.py.cz/mailman/listinfo/python
>>
>> Visit: http://www.py.cz
>>
Další informace o konferenci Python