Python jest językiem ogólnego zastosowania. Tzn. można w nim napisać zarówno samodzielny program jak i stworzyć potężny serwis internetowy. Jest to język charakteryzujący się wielką czytelnością kodu jak i ponadprzeciętnymi możliwościami. Z najbardziej rzucających sie na początek cech dla osoby, która pierwszy raz styka się z tym językiem jest używanie wcięć do zaznaczania bloków kodu. Na początku trudno mi było się do tego przyzwyczaić ze względy na nawyki wyniesione z innych języków programowani. I właściwie to był główny powód dla którego na początku nie interesowałem się tym językiem. Przekonały mnie jednak b. dobre recenzje ze strony autora Thinking in Java czy niektórych guru od Perla (zobacz wywiad z Brucem Eckelem). Stosowanie wcięć do zaznaczania bloków teraz mi się podoba, bo wymusza czytelne pisanie kodu i z tej opcji korzystają wszystkie edytory do Pythona (można zwijać bloki do jednego wiersza). (Nazwa języka pochodzi od Latającego Cyrku Monty Pythona).

Kod Pythona jest nieporównywalnie czytelniejszy od Perla, Ruby czy PHP. Wymaga 5x mniej pisania niż Java oraz 15x mniej pisania niż C/C++ aby uzyskać podobny efekt. A czytelniejszy, krótszy kod to mniejsze prawdopodobieństwo potencjalnych błędów oraz tańsze utrzymanie kodu. Python uchodzi za bardzo dobrze zaprojektowany język. Jest przejrzysty i spójny (czego np. nie można powiedzieć o PHP, który jest językiem bardzo bałaganiarskim i pełnym niespójności). Spójny i przejrzysty język łatwiej się zapamiętuje i mniej trzeba wertować po książkach i manualach aby odnaleźć odpowiednią funkcję.

Python jest językiem mocno obiektowym, wpiera wielokrotne dziedziczenie (czego nie potrafi Java), obsługuje przestrzenie nazw (do czego nadal nie dorósł nowy PHP5). Wszystkie obiekty Pythona są przekazywane przez referencje (czego nie ma w PHP4). Wszystkie funkcje są polimorficzne. Pozwala dosyć elastycznie przeciążać operatory (co tylko częściowo potrafi PHP5). Python ma wbudowane silne mechanizmy introspekcji co ułatwia debugowanie programu.

Za pomocą Jythona można stworzyć 100% aplety Javy. Jython to Python napisany całkowicie w Javie. Możliwe jest więc tworzenie Javy bez Javy. :) Czytelniej i krócej (ok 5x). Python jest interpreterem co powoduje unikalną możliwość krokowego odpalania apletów Javy za pomocą Jythona. Python można dosyć prosto rozszerzać za pomocą modułów napisanych w języku C.

W ciekawy sposób radzi sobie z ładowanymi modułami. Otóż kod źródłowy wciąganych plików (*.py) jest automatycznie kompilowany do bytecodu (*.pyc). Za następnym razem wczytywany jest już ten skompilowany plik co przyśpiesza działanie programu. Bytecode Pythona to kod pośredni, skompilowany do wirtualnej maszyny Pythona (analogicznie jak to jest w Javie). Pliki *.pyc są multiplatformowe, tzn. powinny bez żadnych zmian działać równoczesnie na Windows, Linuksie i Macintoshu.

Jako ciekawostkę warto dodać, że Python operuje na liczbach całkowitych o nieskończonej dokładności. Tzn. tak dużej na ile pozwala pamięć operacyjna komputera. Nadaje się świetnie do obliczeń inżynierskich i naukowych. Warto wspomnieć o jeszcze jednym, ważnym zastosowaniu Pythona: prototypowanie. W Pythonie tak szybko się pisze kod i łatwo wyłapuje jego błędy, że warto algorytmy, które docelowo mają być napisane np. w C++ napisać w Pythonie a potem tylko przepisać do języka docelowego. Większą bowiem część czasu traci się zwykle na testowanie i poprawianie błędów. Szybkość tworzenia kodu w Pythonie jest tak wielka, że praktycznie zamiast tracić czas na mozolne wstępne zaprojektowanie całej aplikacji, można od razu wszystkie pomysły testować od ręki.

Python trzyma się zasady "bateries included". Standardowe biblioteki wchodzące w skład każdej dystrybucji Pythona są tak elastyczne i potężne, że rzadko kiedy istnieje potrzeba aby sięgać po jakieś zewnętrzne moduły. Python ma genialnie rozwiązane konwertowanie znaków (PHP ma w ogóle problemy przekształceniami między utf-8, mac-ce, cp1250 i iso-8859-2).

To, co zupełnie przeważyło szalę, że np. machnąłem ręką na Perla (który swego czasu b. mi się podobał za swoją elastyczność) to bardzo wygodne narzędzia z grupy RAD (Rapid Development Application). Python ma cały szereg darmowych edytorów IDE (zintegrowanych z graficznym debuggerem). Tworzenie aplikacji w tym języku to po prostu przyjemność.

Z polskich książek warto zwrócić uwagę właściwie tylko na te pozycje (reszta jest fatalnej jakości, z móstwem błędów):

Książki w pozostałych językach.

Linki

    Serwery aplikacyjne
  • Zope & Plone
  • CherryPy - Ciekawy i niesamowicie prosty (pythonowy) serwer aplikacyjny. Automatycznie wiąże fragmenty wirtualnej ścieżki w URL do odpowiedniej klasy która to obsługuje. Obsługuje procesy, wątki, pulę procesów, pulę wątków, sockety TPC oraz sockety uniksowe (co pozwala na łatwe znalezienie stosunkowo niedrogiego hostingu).Może korzystać z własnych szablonów oraz innych, np. Cheetah. CP2 od wersji 2.1 wprowadza WSGI i może teraz pracować pod mod_python czy fastcgi. To duży krok naprzód. W wersji 2.1 wprowadzono także wiele inny7ch poprawek. Od wersji 2.0 CP2 pracuje tylko w trybie wątkowym (porzucono model forkowy). Nowy CP2.1 można podpiąć pod mod_python'a.
  • Webware - Webware to wielowątkowy serwer aplikacyjny konkurencyjny wobec Zope (jest znacznie prostszy, modularny i łatwiejszy w opanowaniu). Jest szybszy od CherryPy ok 2x (mod_webkit), jego wbudowany httpd jest szybszy od CherryPy ok 50%. Jest trochę szybszy od SkunkWeb'a, ale wolniejszy od najszybszego frameworka: Myghty. No i niestety Webware ma koszmarną stronę www i równie fatalną dokumentację. A na domiar złego, nie ma wersji stabilnej tylko przedpotopowa 0.8.1 oraz SVN. Można też przyczepić się że rózne "kity" nie są zes sobą kompatybilne i panuje tu ogólny chaos projektowy. Jednakże autorzy Webware są mocno zaangażowani w WSGI i to jest b. dobry kierunek!
  • SkunkWeb - bardzo szybki serwer aplikacyjny z bardzo rozbudowanymi mechanizmami cache i opierający się na idei komponentów podobnie jak perlowy Mason (pozwala to bardzo zmodularyzować aplikację). Skunkweb intensywnie wykorzystuje cache komponentów i wykorzystuje w pełni wiele procesorów na serwerze. W odróżnieniu od Webware (który jest serwerem wielowątkowym) Skunkweb jest serwerem wieloprocesowym (wykorzystuje forks a nie threads), co stanowi problem z uruchomieniem go na Win32 (zobacz też moduł POSH na systemy POSIX, który daje wspólną pamięć dla procesów). Posiada wbudowany mechanizm wielojęzyczny (catalogs). Dokumentacja, podobnie jak w przypadku Webware jest nieduża i niekompletna zmuszając użytkownika do czytania źródeł i docstringów, ale te są w miarę dobrze opisane.
  • Twisted - to właściwie nie serwer aplikacyjny ale duży framework oparty na zdarzeniach i asynchronicznej pracy. Posiada spore możliwości i wygląda na dojrzały projekt. Zobacz Nevow oraz jego przykłady. Twisted 2.0 korzysta z interfejsów Zope3. Niestety jest trudny do nauki ze wzgl na koniecznośc uwzględniania specyfiki pracy asynchronicznej. Dokumentacja też jest za słaba, a do Nevow (szablonów które są zalecane w miejsce poprzednich Woven) to prawie nie istnieje! Quixote - wydajny serwer aplikacji ale nie do końca ma dopracowaną pracę pod win32 i obsługę wątków.
  • Python Servlet Engine - system podobny (celowo) do PHP, choć wydaje mi się, że Spyce jest dojrzalszym produktem
  • Maki - nie tyle serwer aplikacyjny, co kompletny framework do budowania stron internetowych opartych na czystym XML i XSLT. Pythonowy odpowiednik xmlowo-javowego duetu Tomcat + Cocoon.
    Szablony
    Cheetah - bardzo wygodne o czytelnej składni, z własnym cachem i co ciekawsze można tworzyć kolejne szablony za pomocą mechanizmów przeciążania szablonów potomnych. Cheetah moga współpracować z Webware, Spyce lub działać jako samodzielny parser. Ma niedopracowany cache (nie ma zapisu na dysku i co gorsze Cheetah nie jest w ogóle odporny na wątki. Ma też słabe możliwości includowania (np. nie można przekazac parametrów). Poza tymi wadami jest bardzo wygodnym systemem szablonów. Kompiluje szablony do modułow pythona, można tworzyć nowe szablony nna bazie obiektowego dziedziczenia po starych.
  • STML - bardzo wygodne komponenty-szablony z potężnymi możliwościami cacheowania. Bardzo elastyczne możliwości includowania. Są częścią serwera aplikacji SkunkWeb i nie można ich użyc (na razie) w sposób niezależny.
    Kid - wzorowany na ZPT, TAL i PHP prosty język szablonów. Bardzo interesujący projekt! Przetwarza xml/xhtml za pomocą ElementTree, działa jako servlet w Webware.
  • Nevow - rozbudowany framework do Twisted z zaimplementowanym dwukierunkowym Ajaxem. Zobacz WIKI, manual oraz przykłady.
  • ZPT - szablony z których korzysta serwer aplikacyjny Zope. Charakterystyczne jest to, że logika szablonów jest ukryta w atrybutach kodu html dzięki czemu szablony te są przezroczyste dla edytorów wizualnych takich jak Dreamweawer. ZPT doczekało się więcej implementacji: OpenTal, SimpleTal. Zobacz też implementacje ZPT w innych językach, m.in. Java, PHP i Perl.
  • SimpleTAL - SimpleTAL is a stand alone Python implementation of the TAL, TALES and METAL specifications used in Zope to power HTML and XML templates. SimpleTAL is an independent implementation of TAL; there are no dependencies on Zope nor is any of the Zope work re-used.
  • CherryTemplate - podobne do ZPT ale prostsze.
  • Webware/PSP - język szablonów warstwy prezentacyjnej osadzający Pythona w HTML. Część serwera aplikacyjnego Webkit wchodzącego w skład większego pakietu: Webware. Podobnie jak Cheetah, pozwala tworzyć szablony metodami obiektowymi. Najlepiej uruchamiać Webkita za pomocą modułu Apache mod_webkit (najszybciej) lub webkit/webkit.exe - b. szybkiego i małego adaptera w C++ który jest szybszy nawet od Webkita korzystającego z mod_python. Mimo, że webkit.exe odpala się jako CGI to ma bardzo dużą wydajność, bo to tylko adapter do nasłuchującego na jakimś porcie (domyślnie 8086) Webkita.
  • mod_python/PSP - moduł mod_python od wersji 1.3 potrafi przeplatać pythona z HTML i stanowić będzie chyba najprostszą formę (poza CGI) udostępnienia Pythona przez providerów. Zobacz też Vampire, moduł rozszerzający mod_pythona. Pliki binarne do python 2.4/win32 są tutaj. Tu są ciekawe artykuły o mod_python.
  • HTMLTemplate - converts HTML/XHTML templates into simple Python object models that can be manipulated through callback functions in your scripts. Fast, powerful and easy to use.
  • ClearSilver - szablony iezależne od językam,. Używa ich Trac.
  • PyMeld - A simple, lightweight system for manipulating HTML (and XML, informally) using a Pythonic object model.
  • StringTemplate - szablony do Javy, C# i Pythona
    Frameworki, systemy komponentowe i szablonowe
  • Django - Wcześniej przez parę lat rozwijany jako projekt komercyjny, reklamowany jako profesjonalny framework dla Pythona. Dostępny jest kanał RSS i irc://irc.freenode.net/django który też jest logowany. Podobnie jak Rails używa ActiveRecord, a Subway SQLObject, tak i Django używa własnego ORM'a. Można powiedzieć, że Django w zamierzeniu ma być jest pythonową alternatywą dla Ruby on Rails
  • Myghty - pythonowa implementacja systemu komponentowego wzorowanego na Perl:Mason. Myghty posiada duże możliwości, cache, filtry, rozbudowane includowanie jak i dziedziczenie komponentów. Projektowany do ciężkich, biznesowych zastosowań. Projekt wygląda na znacznie lepiej dopracowany od strony implementacji w porównaniu do CherryPy. Myghty jest najszybszym pythonowym frameworkiem. Jest szybszy nawet od Webware i SkunkWeb. Wymaga tylko mod_python'a ale działa także w trybie CGI, WSGI i jako standalone serwer. Posiada także zaimplementowany moduł Ajax Zobacz dodatkowe komentarze. Zobacz też artykuł na temat Ajax'a oraz przykładowy kod. Zobacz też Ajax
  • Pylons - zbudowany na Myghty z uwzględnieniem Routes i Paste.
  • Blog. Zobacz ostatni artykuł o Myghty.
  • Spyce2 -z wyglądu wydaje się byc pythonowym odpowiednikiem PHP, gdyż łatwo można przeplatać kod Pythona z kodem HTML. Unikalną cechą Spyce jest możliwość tworzenia biblioteki własnych tagów tak jak w JSP który to robi w Javie. Spyce 2, który niedawno wyszedł dodał kilka dodatkowych możliwości, np. handlery do formularzy, co (w połączeniu z aktywnymi tagami)daje mu możliwości jakie reklamuje środowisko ASP.NET. Trzeba dodac, że Spyce uchodzi za bardzo stabilny projekt. Szkoda, że brakuje mu mechanizmu cache do fragmentów stron. To, moim zdaniem, jego główna wada. Przeplatanie pythona z html jest też kontrowersyjne, ale np. świetnie nadaje się za to do zastosowań gdzie głównie używa się php, np. integracja z Red Dot'em.
  • Subway - projekt będący odpowiedzią na Rails dla języka Ruby. Korzysta z CherryPy oraz Cheetah. Subway korzysta z nowej, ciekawej wersji CherryPy i Cheetah, FormEncode do zarządzania formularzami. Bardzo przejrzysty kod.
  • TurboGears - nowy framework oparty na CheeryPy, Kid, SQLObject i MochiKit (AJAX).
  • PEAK - The Python Enterprise Application Kit
  • Python Paste - framework implementujacy WSGI. Zobacz art. Python, FastCGI, WSGI, and lighttpd.
  • WSGI
  • Twisted Matrix - kompletny sieciowy framework z obsługą serwera www, ftp, newsów, ssh, irc. Obsługuje asynchroniczne sockety.
  • OSE - generic application framework suitable for constructing general purpose applications, distributed systems and web based services.
  • Scarab - open source communcations library implementing protocols, formats, and interfaces for writing distributed applications, with an emphasis on low-end and lightweight implementations.
  • pythonweb - web modules, sql snakes itp. Właściwie to nie framework ale nie wiem gdzie to lepiej podpiąć. ;)

artykuły

    RAD (Rapid Application Development)
  • Eric3 - rozbudowany IDE ze wsparciem bibliotek QT (zobacz też wersję dla win32!)
  • Wing IDE - niezły IDE, b. dobrze podpowiada kod (ale jest płatny)
  • Eclipse - edytor uniwersalny (obsługuje wiele języków) ale w połączeniu z modułem pydeb, pylint o SQLExploer stanowi niezły IDE do Pythona. Zobacz pluginy do Eclipse.
    • TrueStudio - PHP and Python IDE built on Eclipse
  • PythonWin - PythonWin wchodzi w skład pakietu rozszerzeń Mark Hammonda o nazwie win32all, obowiązkowa instalka dla użytkowników Windozy. PythonWin oraz win32all (plus więcej dokumentacji) są dostępne w pakiecie ActivePython. PythonWin to nie tylko edytor ale także zintegrowany debugger graficzny.
  • SPE - bardzo fajny edytor, ciekawa opcja wielokorowych zakładek. Nowa wersja obsługuje już polskie znaki.
  • Boa Constructor - IDE wzorowany na Delphi. Korzysta z biblioteki wxPython. Używaj wersji CVS, bo jest dużo lepsza.
  • Eric3 - ładny IDE z dużymi możliwościami, działa tylko pod Linuksem :(
  • PIDA - Pida stands for Python Integrated Development Application. It is essentially an IDE, but one that is slightly different in that you supply your own editor. Rather than attempting to write a set of development tools of its own, Pida uses tools that the developer has available.
  • PythonCard - wzorowany na macintoshowym HyperCard. Opiera się na bibliotece wxPython. Chyba już prościej się nie da. :)
  • PythonWorks - ciekawy IDE, ale niestety komercyjny.
  • jEdit + JpyDbg plugin
  • VisualWX - wizualne tworzenie komponentów wxWidgets
  • wxGlade - wizualne tworzenie komponentów wxWidgets
    Akceleratory, *.exe itp
  • Psyco - akcelerator JIT (Just in Time) podobny w swej idei do JIT dla Javy.
  • Pyrex - zezwala na pisanie kodu mieszającego Pythona z typami danych języka C w celu stworzenia rozszerzena do Pythona. Zobacz artykuł pt. Pyrex extends and speeds Python apps.
  • modpython - moduł Pythona do Apache'a. Uwaga, dla Webware lepiej korzystać z jego własnego modułu do Apache'a - mod_webkit.
  • py2exe - przekształca skrypty Pythona do postaci *.exe + *.dll.
  • cx_Freeze - j.w.
  • McMillan installer - j.w.
  • Squeeze - simple utility which compiles your Python program into a bytecode package, allowing you do distribute Python programs as one or two files.
  • Stackless Python - Python bez stosu pamięci.
  • Decompyle - dekompilator bytecodu Pythona.
    Bazy danych
  • SIG (Special Interest Group) do baz danych
  • SQL Relay - bardzo ciekawy projekt, implementuje rozproszony cache, load balancing, ma kod klienta do wielu języków programowania.
  • Python DB-API v2.0 - specyfikacja uniwersalnego API, zalecanej abstrakcji łączenia się z bazami danych. W Pythonie wszystkie moduły starają się trzymać tej specyfikacji. Nie ma tu więc takiego bałaganu jak w PHP.
  • Python Tutorials: ADO and Python
  • MySQLdb - moduł do MySQL
  • APE - Adaptable Persistence Engine. Ape, the Adaptable Persistence Engine, adapts Python objects to storage on the filesystem, in relational databases, or practically anywhere else. It combines the advantages of transparent object persistence with arbitrary databases and formats. It is especially designed to work with ZODB, but can work independently of both Zope and ZODB.
  • pySQlite - moduł do SQLite
  • APSW - Another Python SQLite Wrapper
  • psycopg - najlepszu moduł do PostgreSQL. Tutaj masz binarki do win32. Dla formalności wspomnę o innych modułach do Posgresql'a: PyGresQL i pyPgSQL
  • adodbapi - moduł do MS SQL 2000. W wypadku używania MSSQL'a polecam korzystać z tej biblioteki, bo inne robią rożne problemy (np. nie kopiują pola blob, albo nie przenoszą poprawnie polskich ogonków) Niestety, wbrew twierdzeniom autora, biblioteka nie ma zaimplementowanego pełnego Python DB-API 2.0, tzn. nie ma cursor.scroll().
  • pymmssql - moduł do MS SQL 2000 który podobno implementuje pełne DB API 2.0
  • SQLObject - obiektowa obsługa relacyjnych baz danych
  • Plikowe bazy danych (nierelacyjne)