No właśnie… Dlaczego ?

Z Pythonem w wersji trzeciej zetknąłem się jakieś 3-4 lata temu. Potrzebowałem narzędzia, które w szybki sposób będę mógł zmusić do skutecznego przetwarzania dużej ilości danych tekstowych. Wybór okazał się trafny, ponieważ już w ciągu kilku dni zacząłem pisać dość nietrywialne skrypty, korzystające intensywnie z biblioteki standardowej Pythona.

Wtedy jednak zaledwie liznąłem ogromu możliwości, jakie stały za tym językiem programowania i całym jego środowiskiem. W ciągu kolejnych 2-3 lat wykorzystywałem Pythona raczej sporadycznie, do krótkich, celowych działań. Kluczową zaletą było to, że można było zaimplementować i uruchomić potrzebną funkcjonalność w dość krótkim czasie, nie zwracając jednocześnie uwagi na mniej istotne szczegóły.

W pewnym momencie zauważyłem, jak wielki potencjał ma ta technologia. Ogromna biblioteka standardowa. Niesamowita społeczność. Ciekawe i popularne projekty open-source. Ale przede wszystkim to, jak przyjemnie tworzy się coś w Pythonie i jak szybko można osiągać wymierne rezultaty.

Jednocześnie filozofia Pythona jest dość odległa od tego, co prezentuje dziś C++. Oba języki uważam za genialne w swoich dziedzinach i zastosowaniach. Na obu technologiach chciałbym skupić swoją uwagę w najbliższych latach.

Tym wpisem zaczynam serię dotyczącą języka Python 3 – od podstaw. Zanim jednak przejdę do konkretów, ten wpis poświęcę na przybliżenie podstaw języka oraz jego najważniejszych cech…

Czym jest Python ?

Python został stworzony przez Guido van Rossum’a, około 25 lat temu. Od tego czasu, dzięki coraz większej społeczności skupionej wokół rozwoju języka oraz swoich niewątpliwych zalet, stał się jedną z najpopularniejszych technologii w świecie tworzenia oprogramowania.

Sam Python jest:

  • wysokopoziomowym,
  • wieloparadygmatowym,
  • dynamicznie i silnie typowanym,
  • interpretowanym,
  • wieloplatformowym

językiem programowania ogólnego przeznaczenia. Ładna zbitka, ale postaram się w paru zdaniach opisać te własności.

Wsparcie dla wielu paradygmatów programowania.

Python wspiera programowanie obiektowe, strukturalne oraz funkcyjne. Oznacza to, że nie narzuca jednego stylu, ale daje wybór użytkownikowi. Jednym słowem – dostosowuje się do sytuacji i wymagań. Jest w tym bardzo podobny do języka C++ (istnieje o wiele więcej podobieństw pomiędzy tymi językami, mimo, że na pierwszy rzut oka nikt nie postawiłby Pythona obok C++).

Dynamiczne i silne typowanie.

W Pythonie nie deklaruje się typów. Zmienna przechowa wszystko, co jej przypiszemy. Mimo bycia dynamicznie typowanym, język jest jednocześnie silnie typowany, co oznacza, że Python zaakceptuje tylko dobrze zdefiniowane operacje (nie możemy np. dodać liczby do ciągu znaków). W Pythonie typ posiadają obiekty (wartości), a nie zmienne.

Kolejną sprawą związaną z tym tematem jest brak potrzeby (i możliwości) zarządzania pamięcią. Python posiada własny odśmiecacz (ang. garbage collector), który zajmuje się zwalnianiem nieużywanej i niepotrzebnej pamięci. CIekawostka: wewnętrznie wszystkie wartości przekazywane są przez referencje.

Język interpretowany.

Po napisaniu kodu w języku Python, możemy natychmiast go uruchomić – nie ma tutaj etapu kompilacji do kodu natywnego. Podczas uruchamiania naszego kodu, interpreter Pythona tłumaczy go do tzw. kodu pośredniego (kodu bajtowego), który jest następnie wykonywany przez tzw. wirtualną maszynę Pythona (ang. PVM, Python Virtual Machine) – jest ona dostarczana w jednym pakiecie instalacyjnym, wraz z samym językiem i jego biblioteką. Tak w dużym skrócie wygląda uruchomienie i wykonanie kodu w Pythonie od wewnątrz. Na pewno będę jeszcze wracał do tego tematu.

Wieloplatformowość.

Wsparcie przez Pythona wielu platform (systemów operacyjnych) łączy sie z poprzednim punktem. Dla każdej wspieranej platformy istnieje implementacja wirtualnej maszyny Pythona, która jest pośrednikiem pomiędzy naszym kodem a daną platformą i jej API. Dzięki temu raz napisany kod może być bez zmian uruchamiany na różnych systemach. W tej chwili Python wspiera wszystkie główne systemy (Linux, UNIX, Windows, Mac OS X, Android, iOS) oraz wiele mnie popularnych / starszych (Solaris, VMS, MS-DOS, Symbian).

Zastosowania oraz biblioteki.

Pomimo tego, że wcześniej Python kojarzony był głównie z kilkoma zastosowaniami (np. web-development: istnieje dużo ciekawych frameworków napisanych w Pythonie), jest to język ogólnego przeznaczenia. Jego największą siłą są biblioteki dostarczane razem z implementacją języka (tzw. biblioteka standardowa), jak również niezliczona ilość bibliotek zewnętrznych.

Jest to jedna z części filozofii Pytona. Sama definicja języka jest dość mała i niezależna. Natomiast oficjalnie wspierana biblioteka standardowa jest bardzo duża i razem z zewnętrznymi modułami, dostarczanymi przez społeczność, wspiera wszystkie aspekty nowoczesnego tworzenia oprogramowania, niemal we wszystkich dziedzinach.

Według indeksu TIOBE, Python jest w tej chwili 4. najpopularniejszym językiem programowania na świecie (po Javie, C oraz C++). Trudno powiedzieć, kto nie używa tego języka, ale można wymienić kilkanaście firm, organizacji oraz technologii, które intensywnie korzystają z Pythona i jednocześnie działają na wyobraźnię. Są to:

  • Google
  • Wikipedia
  • CERN
  • NASA
  • Yahoo!
  • Red Hat
  • Dropbox
  • GIMP
  • Blender
  • Reddit
  • Raspberry Pi
  • Libre Office
  • Django
  • Google App Engine

oraz wiele, wiele, wiele innych 🙂

Struktura przez wcięcia.

Chciałem o tym wspomnieć, ponieważ jest to chyba najbardziej charakterystyczna cecha języka. Otóż kod w języtku Python używa wcięć (zamiast np. nawiasów klamrowych, znanych z C++) w celu podziału kodu na logiczne bloki. Oznacza to wymuszenie na użytkowniu, by stosował jednolite wcięcia, jeśli chce zachować logikę działania np. instrukcji warunkowej. Wrócimy do tego w kolejnych wpisach, bo jest to moim zdaniem również wielka zaleta tego języka – niesamowicie poprawia czytelność i spójność kodu. Uprzedzając pytania – nie jest to uciążliwe i nie generuje żadnych problemów 🙂

Skąd się wzięła nazwa języka ?

Kolejna ciekawostka. Oficjalnym logiem Pythona jest, jak każdy może zauważyć, wąż (konkretnie właśnie pyton). Nazwa języka nie ma jednak nic wspólnego z tym gadem. Pochodzi od Latającego Cyrku Monty Pythona (ang. Monty Python’s Flying Circus), serialu komediowego, emitowanego w latach 70-tych przez brytyjską stację BBC (później także w Polsce). Był to oczywiście pomysł twórcy języka, a odniesienia do skeczy Monty Pythona możemy znaleźć w dokumentacji języka. Mi osobiście taki rodzaj angielskiego humoru się podoba, ale widziałem dość dużo tych skeczy – może to już takie skrzywienie 🙂

Podsumowanie.

Gdybym miał wymienić 3 rzeczy, które przekonały mnie do Pythona, to powiedziałbym: filozofia Pythona, niesamowita biblioteka standardowa, powszechność języka (wspaniała społeczność). Nie muszę chyba dodawać, że zachęcam do zapoznania się z tą technologią i do śledzenia serii na blogu.