Komunikat o błędzie

  • Warning: file_exists(): open_basedir restriction in effect. File(../block/icon_core_booknavigation.png) is not within the allowed path(s): (/usr/home/manveru/domains/manveru.pl/public_html:/tmp:/usr/local/share/pear) w ctools_content_admin_icon() (linia 419 z /usr/home/manveru/domains/manveru.pl/public_html/sites/all/modules/ctools/includes/content.inc).
  • Warning: file_exists(): open_basedir restriction in effect. File(../block/icon_core_block_menu.png) is not within the allowed path(s): (/usr/home/manveru/domains/manveru.pl/public_html:/tmp:/usr/local/share/pear) w ctools_content_admin_icon() (linia 419 z /usr/home/manveru/domains/manveru.pl/public_html/sites/all/modules/ctools/includes/content.inc).

Podstawy języka Python

Twórcy języka Python mają na celu kilka istotnych elementów, które czynią ten język wyróżniającym się na tle innych:

  • czytelność i przejżystość kodu,
  • podążanie za wzorcami projektowymi,
  • unikanie wieloznaczności i nacisk na prostotę.

Ciekawą cechą dla początkującego jest fakt, że chociaż Python jest językiem interpretowalnym, jak wiele innych języków dynamicznych, standardowym zachowaniem interpretera po jego uruchomieniu bez argumentów jest wyświetlenie linii poleceń i oczekiwanie na wprowadzenie instrukcji. Nie ma to miejsca w przypadku języka Perl oraz Ruby, choć ten drugi posiada swoją interaktywną wersję.

Interaktywny interpreter Python
[manveru@manveru]:~$ python
Python 2.7.6 (default, Mar 24 2014, 01:10:21)
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9
Type "help", "copyright", "credits" or "license" for more information.
>>>

Do zalet języka Python należy zaliczyć łatwość z jaką można rozpocząć pisanie własnych skryptów przy zaledwie elementarnej znajomości tego języka. W przeciwieństwie do języka Perl, będący na początku przygody z językiem Python człowiek może czytać ze zrozumieniem większość kodu napisanego przez innych. Na początku podążanie tą drogą najeżone będzie wybojami, gdyż niektóre formy mogą sprawić niespodziankę. Przykładowo:[y for y in xrange(10,100) if y not in [j for i in xrange(2, 8) for j in xrange(i*2, 100, i)]] generuje ciąg liczb pierwszych zawartych pomiędzy 10 a 100. Trudne, nie?

Nie należy się zrażać. Wbrew pozorom, ten przykład wyjaśnia się sam - wystarczy zrozumieć ogólny schemat tego typu konstrukcji. Python w wersji 3 pozwala na jeszcze bardziej rozwiniętą gimnastykę mózgu. A właśnie takie elementy języka czynią interaktywny interpreter Python przydatnym i poręcznym (podręcznym również) narzędziem w rękach inżyniera i naukowca. Do naukowego zastosowania Python wrócę jeszcze na koniec kursu, przy omawianiu zastosowań języka i jego bibliotek.

Zaprezentowany powyżej przykład nie jest efektywny, dobrze więc wiedzieć, czego unikać programując w Python - temu zagadnieniu przyjżymy się jednak w dalszych częściach kursu. Teraz wystarczy napomknąć, że zastosowane zagnieżdżenie spowoduje dużą ilość operacji alokacji pamięci i niepotrzebnie będzie powtarzać te same obliczenia.

Prosta arytmetyka

Skupiając się na wątku przewodnim tego modułu czas wrócić do podstaw i zademonstrować działanie prostych operacji, które z łatwością można wykonać w interpreterze języka Python.

>>> 3+3
6
>>> 3*3
9
>>> 3**3
27
>>> 28/3
9
>>> 28/3.0
9.333333333333334

Powyższe proste przykłady obliczeniowe pokazują, że interpretera możemy używać jak kalkulatora. Obliczenia mogą być dużo bardziej skomplikowane, mogą kożystać również z funkcji matematycznych, o czym za chwilę. Wcześniej podkreślimy ważną cechę języka Python w odniesieniu do arytmetyki stało- i zmiennoprzecinkowej - operacje arytmetyczne zainicjowane na stałoprzecinkowym typie danych nie zmieniają go, należy użyć liczb zmiennoprzecinkowych stosując znak "." (kropki) jako separator dziesiętny, aby wykonywać obliczenia z uwzględnieniem części ułamkowej. Python nie różni się tutaj od większości znanych języków. W tym miejscu chciałbym podkreślić (dla tych, którzy nie mają wykształcenia informatycznego), że arytmetyka zmiennoprzecinkowa nie jest równoważna arytmetyce dziesiętnej (na ułamkach dziesiętnych) oraz posiada określoną precyzję oraz zakres. Należy dobrze rozumieć jej ograniczenia przed stosowaniem jej w poważnych obliczeniach. Na pewno nie należy stosować jej w księgowości! Omawianie tego problemu leży jednak poza zakresem tego kursu.
Spostrzegawczy na pewno zauważyli operację potęgowania wyrażoną operatorem złożonym z dwóch gwiazdek obok siebie. To cecha specyficzna dla języka Python, że operacja potęgowania jest dostępna w postaci takiego operatora, a nie w postaci funkcji matematycznej wyrażonej napisem, najczęściej pochodzącej z biblioteki matematycznej. Potęgowanie zmiennoprzecinkowe jest również dostępne.

>>> 2.2**4.5
34.74577985586164

Nieświadomym użytkownikom tego "kalkulatora" niespodziankę może sprawić jeszcze jeden element. Zachowanie interpretera w odniesieniu do liczb stałoprzecinkowych jest inne, niż w przypadku sporej liczby innych języków. Zilustrujemy to przykładem:

Mutacja typu stałoprzecinkowego
>>> a = 9223372036854775807
>>> type(a)
<type 'int'>
>>> a += 1
>>> type(a)
<type 'long'>

Pierwsza liczba to dziesiętna reprezentacja 263-1, jak widać zawarta w typie danych o nazwie 'int'; druga liczba jest zwiększona o jeden i już jest zawarta w typie 'long'. W języku Python dla operacji stałoprzecinkowych nie ma ograniczenia, tylko pamięć komputera ograniczna wielkość liczby, którą można przechować. Jest to jest z ogromnych zalet Python, zarazem bardzo istotna wada - algorytmy opracowane i przetestowane w języku Python nie dają się łatwo przenieść do języków programowania opierających się o typy danych o stałej długości, jak w językach C lub C++.