Zapowiada się na to, że znowu będę musiał przysiąść nad programowaniem w Pythonie. Z tej okazji, jak zawsze, robię rundę zwiadowczą w poszukiwaniu darmowych (z mojego punktu widzenia) usprawnień. Dzisiaj postanowiłem przyjrzeć się Pythonowi w wersji trzeciej. No i znalazłem kilka powodów, dla których jest on niemal niczym Perl 6 ;)

Lista wyrywkowo-przypadkowa. Tylko te rzeczy, które mnie ugryzły przy tym jednym projekcie w momencie, gdy chciało mi się pisać.

Ogólna niekompatybilność: główny powód, dla którego zmieniono numerek na 3. Niby nie boli, bo dali od razu narzędzie do automatycznej konwersji. Oczywiście nie działa ono zawsze, ale cóż, nie ma nic za darmo. No i niektórych potworków z języka fajnie było się pozbyć. Poniżej jednak wymienię kilka zmian moim zdaniem na gorzsze.

Usunięcie cmp: kiedyś, by uczynić obiekty jakiejś klasy porównywalnymi według własnej semantyki, wystarczyło nabazgrać jedną metodę o tejże nazwie. Dziś, dzięki genialnej decyzji o jej usunięciu, potrzebne są trzy metody: lt, le, eq. Ot tak, żeby uprościć życie. Ponadto ja osobiście zawsze najpierw piszę lte, dopiero jak interpreter zapłacze zmieniam na le. Ale to pewnie moja wina, że nie dostrzegam konsekwencji w nazewnictwie ;)

Zmiana znaczenia operatora /: wcześniej był on jak w C, teraz jest jak w Perlu… Oczywiście chodzi o to, że przy dzieleniu dwóch liczb całkowitych większość popularnych języków zwraca liczbę całkowitą, zaokrągloną w stronę zera. Jest to o tyle naturalne, że dokładnie takie działanie jest zaimplementowane sprzętowo w procesorach x86. Python od teraz zwraca jednak liczbę zmiennoprzecinkową, by uniknąć zaokrąglenia. Zupełnie jak Perl… Tylko o Perlu nikt nigdy nie mówił, że nadaje się do obliczeń.

Wydajność: dodatkowe 10% czasu działania za darmo. Jest to liczba obwieszczona w dokumentacji do Pythona 3.0, otrzymana z syntetycznych benchmarków. Potwierdzona przeze mnie na Pythonie 3.1.3. Python 3.2, po odtrąbieniu kolejnej rundy optymalizacji, działa 20% wolniej od Pythona 2.7.1. W obu przypadkach testuję na swoim projekcie w pracy. Oczywiście wszystko to smutny żart w porównaniu z wydajnością 2.6 + Psyco (które sprawuje mi się lepiej niż PyPy).

Wywalenie niekoszernych builtinów: w większości do osobnych modułów, jak choćby reduce. W tym konkretnym przypadku dlatego, że pętla for czytelniejsza. A map czy filter zostanie, bo tak… Niektóre rzeczy zniknęły całkowicie, jak choćby czasem użyteczne callable. Sugerowane obejście, isinstance(f, collections.Callable), trudno uznać za krok naprzód.

Brak “niektórych” 3rd party modułów: najlepiej pokazał to już kto inny - Python 3 wall of shame.

Komentarze

  • pecet (2011-02-21 18:18:22):

    Dzięki za kolejny powód, dla którego wystarczy mi PHP do pisania skryptów :)

  • Stanisław ‘dozzie’ Klekot (2011-02-21 18:21:00):

    To jeszcze przeczytaj artykuł “Python 3: The Good, the Bad, and the Ugly”. Tak jak autor, David Beazley, mam wrażenie, że Python 3 nie nadaje się właściwie do używania.

    http://www.usenix.org/publications/login/2009-04/index.html

  • Remigiusz ‘lRem’ Modrzejewski (2011-02-21 18:26:53):

    Jakoś wątpię, by istniał odpowiednik pylab dla php…

  • Krystian (2011-02-21 18:51:53):

    Jestem inżynierem, korzystam ze Pythona+NumPy+SciPy+matplotlib+Mayavi2 i bardzo sobie cenię to rozwiązanie. Nie mam potrzeby inwestowania w Matlaba, a Octave, Scilab wypadają średnio przy pylabie.

    Mógłbyś rozwinąć kwestię

    “Python od teraz zwraca jednak liczbę zmiennoprzecinkową, by uniknąć zaokrąglenia. Zupełnie jak Perl… Tylko o Perlu nikt nigdy nie mówił, że nadaje się do obliczeń.” ?

  • pecet (2011-02-21 18:57:43):

    lRem – Do obliczeń numerycznych i naukowych lepiej użyć C i GSL IMHO ;)

  • Krystian (2011-02-21 19:08:31):

    @pecet

    Najlepiej użyć Fortrana;) Gdyby nie brak porządnego darmowego kompilatora pod Windows + Intel MKL to pewnie bym wybrał to rozwiązanie.

    Podobnie wygląda sprawa z C/C++. Próbowałem C++ i Armadillo - wyglądało zachęcająco, ale znowu problemy z LAPACK-iem mnie przerosły, a sama wydajność tego rozwiązania (bez MKL) wypadła gorzej przy prostych obliczeniach na macierzach niż Python+NumPy.

    Python z NumPy (za ohloh: Mostly written in C) jest wystarczająco szybki, a przy tym bardzo wygodny i łatwo dostępny.

  • Remigiusz ‘lRem’ Modrzejewski (2011-02-21 19:09:55):

    Auuu, I/O prawie jak w Javie… Do tego według tego artykułu (dzięki Dozzie!) 40x wolniejsze. No i te nowe problemy z UTF…

    @Krystian: Do czego w tym kombo służy Mayavi2?

    Co do liczb zmiennoprzecinkowych, chodzi mi o to:

    Python 2.7:

    >>> 173 5 

    Python 3.2:

    >>> 173 5.666666666666667 

    Dodatkowe cudo przy zaokrągleniach:
    Python 2.7:

    >>> round(1.5) 2.0 >>> round(2.5) 3.0
    

    Python 3.2:

    >>> round(1.5) 2
    >>> round(2.5) 2 

    Teraz dla odmiany nagła miłość do intów, do tego z dziwnym kierunkiem zaokrągleń…

    @pecet: Jesteś pewien, że wiesz o czym mówisz?

  • Remigiusz ‘lRem’ Modrzejewski (2011-02-21 19:19:10):

    Wspomnę jeszcze jeden ciekawy dla naukowca pakiet (jedno wielkie kombo): http://www.sagemath.org/

  • Krystian (2011-02-21 19:37:17):

    @Remigiusz ‘lRem’ Modrzejewski

    Na czym polegają różnice to wiem, ale czy wynikają z tego jakieś konsekwencje? Pomijając ten round, który może zwyczajnie wprowadzić w błąd.

    BTW: Sam Python nie służy do obliczeń, do tego celu lepiej skorzystać z Numpy.

    Python 2.7:

    >>> round(1.5)  2.0  >>>
    round(2.5)  3.0  

    Python 3.2:

    >>> round(1.5)  2  >>> round(2.5)  2
    

    Wszystko się zgadza. Liczba x.5 zaokrąglana jest do wartości parzystej.

    http://docs.scipy.org/doc/numpy/reference/genera ted/numpy.around.html#numpy.around

    “For values exactly halfway between rounded decimal values, Numpy rounds to the nearest even value. Thus 1.5 and 2.5 round to 2.0, -0.5 and 0.5 round to 0.0, etc. Results may also be surprising due to the inexact representation of decimal fractions in the IEEE floating point standard [R9] and errors introduced when scaling by powers of ten.”

    Myślę, że zmiana w Pythonie 3 to ukłon w stronę scientific computing, w końcu SciPy jest jednym z najbardziej pożądanych pakietów http://www.python.org/3kpoll.

    “Do czego w tym kombo służy Mayavi2?”

    Do wykresów 3D. Mayavi2 wykorzystuje OpenGL i znacznie lepiej sobie radzi z wykresami 3D, chociaż z wykresów 3D matplotlib korzystam często do generowania EPS-ów do druku.

  • Remigiusz ‘lRem’ Modrzejewski (2011-02-21 21:36:33):

    Niby racja, da się to ładnie uzasadnić. Nie wiedziałem nawet, że zaokrąglanie w stronę parzystej również jest w IEE 754. Ale od zawsze popularniejszym sposobem jest zaokrąglanie z dala od zera, które poza IEE 754 jest też w ISO 9899. Tak więc ta zmiana jest co najmniej zadziwiająca.

  • PiotrLegnica (2011-02-21 21:58:29):

    To zachowanie / jest od dawna (w 2.x jako future, bo kompatybilność) w PEP 238, do floor division jest //.

  • Remigiusz ‘lRem’ Modrzejewski (2011-02-21 22:59:56):

    event.cpython-32.pyc

    Czyżby bajtkod nie był już przenośny między różnymi kompilacjami interpretera? Przedtem tak było chyba tylko między wersjami.

  • Remigiusz ‘lRem’ Modrzejewski (2011-02-21 23:50:13):

    Ale za to nie jest tak źle już z tym I/O. Z chałupniczych testów wychodzi mi, że różnica nie jest nawet trzykrotna.

  • PiotrLegnica (2011-02-22 06:24:57):

    Also, 3.2 przywrócił callable, http://bugs.python.org/issue10518

    Czyżby bajtkod nie był już przenośny między różnymi kompilacjami interpretera?

    cpython-32 to tag dla CPythona 3.2, nie 32-bitowego. PEP 3147.

  • Remigiusz ‘lRem’ Modrzejewski (2011-02-22 09:18:43):

    A, niegłupie. Tylko trochę przy tej wersji mylące.

    Perełka z podlinkowanej dyskusji:

    I don’t like that we’re heading into Perl’s direction. that’s all.

    Well, please deal with it.

    :D

  • Game Compass (2014-09-26 06:18:37):

    Grandioser Artikel. Genau so schön, wie zocken an sich.
    So verschrieen spielen auch sei, so ist experimentell erwiesen worden, dass daddeln, ein dem Alter des Spielers angemessenes
    Spiel vorausgesetzt, förderlich für die Stressbewältigungskapazität des Spielers ist.
    Beim Spielen lernt der Spielende in höherer Frequenz zu Entscheiden und seine
    Handlungen zu priorisieren. Einige Videospiele vermitteln überdies auch noch Basics
    über Wirtschaftlichkeit und fördern die Logik des Spielers.
    Selbst die verschrieen Multiplayer können doch manchmal
    den falsch vermittelten Effekt der Abwendung von der Realität} umkehren.
    Der Spielende wird zwar schon vielen verkommenen Subjekten begegnen, jedoch findet der Spielende
    häufig just in seinem Favoriten Gleichgesinnte.
    Alles in allem: zocken ist genial! Ungeachtet des
    Games und ob PC,Konsole,Handy,etc. , Spielen ist Kultur.

  • jak najlepiej inwestowac pieniądze (2015-01-17 21:07:33):

    When sweating don’t be suprised if it doesn’t work every time,
    usually when sweating only one out of ten attempts on average will begin the sweating process.

    Some of the investors might also go into gold and silver funds because they are better
    diversified and better managed. The leasee must
    pay monthly installments until the end of the
    lease.

  • jak najlepiej inwestowac pieniądze (2015-01-17 21:22:59):

    When sweating don’t be suprised if it doesn’t work every time,
    usually when sweating only one out of ten attempts on average will begin the sweating process.
    Some of the investors might also go into gold and silver
    funds because they are better diversified and better managed.
    The leasee must pay monthly installments until the end of the
    lease.

  • singing lessons london (2015-01-19 09:47:16):

    Terl’s boys were inspired to work even harder to honor the small part of the story they were telling and to
    send their own message of gratitude and a ‘break a leg’ back across the pond.
    ‘So-and-so is such a disappointment to her parents,’ or ‘So-and-so is such a disappointment
    to his fans. otherwise you may use Alum and rub it over the armpits with or while not the
    lemon.

  • singing lessons london (2015-01-19 09:55:46):

    Terl’s boys were inspired to work even harder to honor the small
    part of the story they were telling and to send their own message of gratitude and
    a ‘break a leg’ back across the pond. ‘So-and-so is such a disappointment to her parents,
    ‘ or ‘So-and-so is such a disappointment to his
    fans. otherwise you may use Alum and rub it over the armpits
    with or while not the lemon.

  • windows 8 activation key (2015-02-25 18:10:44):

    It’s remarkable to visit this web page and reading
    the views of all colleagues concerning this piece of writing, while I am also eager of getting
    experience.

  • best web host (2015-04-29 23:24:40):

    Hello there! This post could not be written much better!
    Looking at this article reminds me of my previous roommate!

    He always kept preaching about this. I am going to forward this post to him.
    Fairly certain he’s going to have a great read.
    I appreciate you for sharing!

  • therx per head (2015-05-25 09:56:50):

    For over 15 years Real Bookies has pph therx effectively assisted bookmakers from all over the world to take wagers from a large number of players on the pay per head
    time frame.

    Our cutting edge bookie software program and the commitment from all of our clerks, outlines people,
    supervisors and partners have made our price per head sportsbook solution among
    the fastest developing and most dependable bookmaking service
    agency names in the industry.

    Word of mouth may be the number cause new here for the rx agencies sign up at RealBookies, which usually speaks towards
    the high quality associated with service offered to both agents and their
    players.

    Upon signing up for the Realbookies family, you are going to receive your own personal assistant who will be there
    to answer any queries you may have about the company
    and how to grow your business using our pay per head sportsbook.

    Joining Realbookies will make your own operation become par plus level the
    playing therx per head field with the greatest online
    video gaming companies in the world. The gambling software you and your players will be getting may
    be the same from the biggest on the web sportsbooks today.

  • как сделать протеиновый коктейль (2015-05-26 02:35:21):

    Протеин является самой пользующейся
    популярностью протеиновые коктейли для роста спорт
    добавкой посреди культуристов, бодибилдеров.
    Протеиновые комплексы представляют с лица провиантскую присадку с
    высоким содержанием белка, сосредоточение что достигает 70–95%.
    Эффект протеина состоит в том, что перевариваясь в организме, протеин распадается возьми аминоксилоты, изо каких именно синтезируются белковые молекулы
    организма, в том числе и мышечная ткань.
    Аминокислоты изо протеина предупреждают поражение мускул в период
    интенсивных занятий и способствуют активному
    мышечному росту.

    на данный момент сывороточный
    протеин является самой популярной протеиновой добавкой для набора массы.

    Сывороточный протеин снабжает индивидуум такими неподменными
    аминокислотами, будто аминокислота, изолейцин и аминокислота,
    которые участвуют в синтезе мускульного белка опосля тяжелых
    физических нагрузок. Протеин снежной сыворотки, главная сочиняющая данного
    вида протеинов, является одним из самых
    значимых белков и владеет воплощенными иммунными качествами.

    Сообразно технологии производства и концентрации белка
    сывороточный созин можно разделить
    на два вида: концентрат сывороточного протеина и изолят протеина.
    Данные виды алейроновых
    добавок различаются друг от друга
    концентрацией белка и, соответственно, своей
    ценою. В экстракте оглавление белка доходит
    80%, а в изоляте до 90-95%.

    Среди протеинов про роста мышц также очень распространены белок, канареечный протеин,
    которые на протяжении длинного медли могут подпитывать организм, мышцы аминокислотами.
    Про вегатарианцев создают соевый протеин, кой сообразно многим параметрам не уступает иным протеинам.

  • healthy weight loss tips after pregnancy (2015-06-16 22:23:17):

    Many people while attempting to lose weight should
    remember fondly the significance of having a healthy diet
    since it accelerates the process of slimming down while supplying one’s body with all the current necessary nutrient elements and
    vitamins any particular one should keep on together with his daily life.
    Losing weight and not regaining it is incredibly difficult for most people.
    With so many programs how we discover the engineered to be befitting for us.