Trzeci Python

Subskrybuj RSS A A A
16 grudnia 2008
Marcin Marciniak

Bardzo popularny język programowania Python, razem z wersją 3, został mocno zmieniony. Jest to pierwsza zmiana w historii projektu, która łamie zasadę zgodności wstecz.

Bardzo popularny język programowania Python, razem z wersją 3, został mocno zmieniony. Jest to pierwsza zmiana w historii projektu, która łamie zasadę zgodności wstecz.

Stworzony w 1990 r. Python jest interpretowanym językiem programowania, który - podobnie jak C++ - nie wymusza jednego stylu programowania. Możliwe jest programowanie obiektowe, strukturalne i funkcyjne. Język ten posiada też dynamiczny system typów (podobnie jak w językach Tcl, Perl, Scheme czy Ruby) i automatyczne zarządzanie pamięcią za pomocą garbage collection. Python rozwijany jest w modelu open source i zarządzany przez Python Software Foundation.

Nowy wąż

Standardową implementacją języka Python jest tzw. CPython (pisany w C), ale istnieje też implementacja w języku Java (Jython), dla plarformy .NET (IronPython), a nawet napisana w Pythonie (PyPy). W tym języku są pisane różne programy, od prostych skryptów po całe pakiety (choćby MailMan, brazylijski program ERP Stoq czy serwer Zope). Obok języków Perl i PHP, Python często gra rolę składnika popularnego stosu LAMP (Linux, Apache, MySQL) w wielu firmach związanych z Web 2.0, takich jak YouTube, Flickr, Digg czy deli.cio.us.

Python od wersji 3.0 zrywa jednak z niektórymi, dotychczasowymi praktykami programistycznymi. Celem zmian było usunięcie niedogodności przeszkadzających w programowaniu. Modyfikacje są dość znaczne, od popularnej instrukcji print, poprzez zmiany w składni, aż po zasady obsługi danych kodowanych w Unicode. Aby ułatwić pracę deweloperom dużych projektów, przygotowano specjalne narzędzie o nazwie 2to3, które ułatwia konwersję kodu programu pomiędzy wersjami.

Lista nowości

Dawna instrukcja print jest teraz funkcją (wywoływaną przez print()). Oprócz innego wywołania, można zdefiniować znak separatora. Narzędzie 2to3 dokonuje automatycznie odpowiednich zmian podczas konwersji kodu do nowej wersji. Z kolei zamiast list dostępne są widoki oraz iteratory. Przykładowo dict.keys() zwraca widok, zatem zamiast k = d.keys(); k.sort() należy użyć k = sorted(d). Podobnie map() zwraca iterator, więc do uzyskania listy można użyć (list(map(..)), ale lepszym rozwiązaniem będzie przepisanie kodu, tak by lista nie była potrzebna w ogóle. W dokumentacji są dobre przykłady, warto z nich skorzystać. Uproszczono też działanie operatorów porównania, wymuszając działanie tylko dla tych wartości, których porównywanie ma sens. Przykładowo wyrażenie 0 > None jest nieprawidłowe w myśl nowych reguł, None < None także zwraca błąd TypeError zamiast wartości fałsz (jak w wersji 2.x). Te zasady nie dotyczą operatorów porównania == oraz != , wartości różnych nieporównywalnych typów są zawsze różne.

Najpoważniejsze zmiany dotyczą sposobu traktowania danych binarnych i formatu Unicode. W nowej wersji używa się text oraz binary zamiast łańcuchów Unicode i ośmiobitowych. Tekst jest rozumiany jako Unicode, ale enkodowana zawartość Unicode jest reprezentowana jako dane binarne. Do obsługi tekstu używa się str, typem dla danych jest bytes. Najważniejsza różnica pomiędzy wersjami Pythona polega na tym, że obecnie każda próba mieszania tekstu i danych bez konwersji powoduje błąd TypeError. W poprzednich wersjach można było mieszać Unicode i łańcuchy 8-bit, jeśli tylko zawierały one znaki z podzbioru siedmiobitowego. W przeciwnym przypadku otrzymywano błąd UnicodeDecodeError. Zależność poprawnej pracy od tego, czy zawartość należy do pewnego podzbioru dopuszczalnych wartości była określana jako błąd.

Pliki otwierane jako tekstowe (nadal jest to opcja domyślna dla open()), zawsze podlegają enkodowaniu pomiędzy string (w pamięci) i bytes (na dysku). Pliki binarne (otwierane z parametrem b) zawsze używają bytes w pamięci. Zatem przy otwarciu pliku w niewłaściwym trybie lub enkodowaniu, proces transferu danych najpewniej zgłosi błąd, zamiast po cichu produkować nieprawidłowe dane. Z tego wynika także to, że nawet użytkownicy systemów typu UNIX, muszą określić właściwy tryb otwierania pliku.

Zmiana dotyczy także formatu danych używanych jako nazwy plików przy pobieraniu i zwracaniu za pomocą API. Od teraz jest to wyłącznie Unicode, co może powodować pewne problemy w niektórych platformach bez zmiany kodu. Oprócz nazw plików, zmiany związane z obsługą znaków spoza ASCII objęły nawet kod źródłowy oraz identyfikatory. Od teraz można korzystać ze znaków spoza ASCII w nazwach oraz identyfikatorach, chociaż standardowa biblioteka nadal jest siedmiobitowa, z wyjątkiem nazwisk autorów w komentarzach.

Nawet składnia języka Python uległa zmianie, szczegóły są dostępne w dokumentacji języka. Niestety najnowsza wersja jest jeszcze mało wydajna (nawet do 10-12% mniej w stosunku do wersji 2.5). Niedogodność ta ma jednak zostać usunięta.

Oceń artykuł

średnio: 0 liczba ocen: 0

Komentarze (0)

Najnowsze

MAC, czyli ministerstwo reformowania rządzenia

Premier wspiera lojalnie w kryzysie najbliższego współpracownika, Michała Boniego, przyjmując na siebie atak oburzonych internautów podczas debaty o ACTA.

Nowe, unijne zamówienia publiczne

Komisja Europejska proponuje ważne zmiany prawa wspólnotowego w obszarze zamówień publicznych. Warto im się przyjrzeć bo to jeden z elementów nowej perspektywy finansowej UE. Warto zatem przyjrzeć się owej propozycji bliżej.

Bezpieczeństwo rządowych stron - analiza

Zespół zadaniowy ds. ochrony portali rządowych opublikował wytyczne. Trudno stwierdzić, że to najlepsze rekomendacje, jakie można było przy okazji zaistniałych ataków wypracować.

DEBATA: Kiedy walka polityczna w sieci przemienia się w cyberterroryzm?

Skuteczny atak cybernetyczny przyniesie opłakane skutki dla państwa i gospodarki. Boleśnie się o tym przekonaliśmy, gdy nie można było dostać się na strony internetowe najważniejszych instytucji w Polsce.

Czy MSW chce unieważnienia przetargu na pl.ID?

Rośnie ryzyko całkowitego unieważnienia przetargu na nowe dowody osobiste. Krajowa Izba Odwoławcza odrzuciła odwołanie firmy Sygnity, która nie zgadzała się na wydłużenie o trzy miesiące terminu składania ofert na dostawę blankietów nowych dowodów osobistych. Wydłużenie całego postępowania o trzy miesiące może spowodować skargi uczestniczących w nim firm, a w konsekwencji unieważnienie przetargu.

Garść rad dla roztropnego szefa IT

Trudne czasy w gospodarce to okres, kiedy szczególnego znaczenia nabiera hasło: Jak cię widza, tak cię piszą. Osłabienie rynku przekłada się na oszczędności w przedsiębiorstwie, a oszczędności najłatwiej szukać w działach, które, w opinii zarządu, nie są bezpośrednio związane z prowadzoną działalnością - czyli również w dziale IT.

Sprzeczne wizje e-dowodu

Koncepcja elektronicznego dowodu osobistego powstała w Polsce wiele lat temu. Starsze są koncepcje elektronicznego systemu świadczeń ochrony zdrowia. Mimo to, nadal są w trakcie budowy.

Rekomendacje

Serwisy IDG - Warunki obsługi - Kontakt - Redakcja - Regulamin - O nas - Polityka prywatności - Serwis zgodny z ASME
Reklama - Licencjonowanie treści
Computerworld Polska i Computerworld Polska online są znakami towarowymi IDG Poland SA.
© Copyright 2012 International Data Group Poland S.A. 04-204 Warszawa ul. Jordanowska 12 tel.(+4822)321-78-00 fax(+4822)321-78-88