[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