Python

Język Python język programowania wysokopoziomowego, stworzony w latach 80-tych przez Guido van Rossum. Ideą przewodnią jest zwięzłość i czytelność kodu źródłowego.

Python wspiera paradygmaty programowania:

  • imperatywny
  • objektowy
  • funkcyjny

Historia Pythona

  • Python 1.0 - Styczeń 1994
  • Python 2.0 - Październik 16, 2000
    • Python 2.7 - Lipiec 3, 2010
  • Python 3.0 - Grudzień 3, 2008
    • Python 3.4 - Marzec 16, 2014


In [1]:
import this


The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Cechy Pythona

  • W Pythonie typ posiadają wartości, a nie zmienne, tak więc Python jest językiem z typami dynamicznymi.

  • Wszystkie wartości przekazywane są przez referencję.

  • Dla typów numerycznych zdefiniowana jest automatyczna konwersja, tak więc możliwe jest np. mnożenie liczby zespolonej przez liczbę całkowitą typu long bez rzutowania.

Elementy składni Pythona - literały

  • Literał to zapis wartości stałych pewnych wbudowanych typów.

Przykłady:

1
1.2
"bleble"

Elementy składni Pythona - słowa kluczowe

andexecnot
assertfinallyor
breakforpass
classfromprint
continueglobalraise
defifreturn
delimporttry
elifinwhile
elseiswith
exceptlambdayield

Elementy składni Pythona - operatory

Następujące tokeny są operatorami:

+       -       *       **      /       //      %
<<      >>      &       |       ^       ~
<       >       <=      >=      ==      !=      <>

Elementy składni Pythona - rozgraniczniki (delimiters)

Następujące tokeny są rozgranicznikami:

(       )       [       ]       {       }      @
,       :       .       `       =       ;
+=      -=      *=      /=      //=     %=
&=      |=      ^=      >>=     <<=     **=

Elementy składni Pythona - nazwy (identyfikatory)

Przykłady:

a = 12
slowo = "coś dobrego"

Elementy składni Pythona - komentarze

Następuja linia to komentarz:

# to jest komentarz
# i to też

Uwaga: w notatniku w naturalny sposób możemy komentować kod korzytając z komórek tekstowych.


In [2]:
print("Spróbujmy sami!")


Spróbujmy sami!

In [ ]:

Elementy składni Pythona

Typy

  • bool typ logiczny True, False
  • int liczba całkowita 1, 13
  • float liczba zmiennoprzecinkowa 3.1415
  • complex liczba zespolona 1 + 3j
  • str napis (niezmienny)
  • list lista (zmienna zawartość i długość) [2, "Ala", -12.32]
  • tuple krotka (niezmienna) (2, "Ala", -12.32)
  • set zbiór (zmienny) set([2, "Ala", -12.32])
  • dict słownik (tablica asocjacyjna) (zmienny) {1: "jeden", "dwa": 2}
  • type(None) odpowiednik null None

In [1]:
type(1)


Out[1]:
int

Liczba całkowita int, w Python 3 może być dowolnie duża.

Instrukcje sterujące

instrukcja warunkowa if

Przykład:

liczba = 12
if liczba % 2 == 0:
    p_czy_np = ''
else:
    p_czy_np = 'nie'

In [ ]:

Instrukcje sterujące

pętla for

Przykład:

for i in [1,2,3,4,5]:
    print(i)

In [ ]:

Moduly w Pythonie

W Pythonie liblioteki zewnętrzne są zorganizowane w modułach. Polecenie np.:

import numpy

wczytuje moduł numpy i udostępnia wszystkie jego objekty w przestrzeni nazw numpy. Można zmienić to na przykład skracając do np:

import numpy as np 

Możemy też zaimportować do bieżącej przestrzeni nazw pojedyńcze funkcje z danego modułu:

from numpy import sin,cos

albo nawet wszystkie:

from numpy import *

Więcej szczegółów: https://docs.python.org/3.5/tutorial/modules.html


In [7]:
import numpy as np 
from numpy import sin,cos

print( sin(2.0))
print( sin(np.array([1,2,3,4])))


0.909297426826
[ 0.84147098  0.90929743  0.14112001 -0.7568025 ]

In [8]:
from math import sin

In [ ]:
dir()

In [ ]:
from math import *
dir()

Help

Takie polecenie działa tylko w jupyter:


In [15]:
atan2?

a poniższa komenda jest buildin-em pythonowym:


In [ ]:
help(atan2)

In [ ]:

Listy

Kilka funkcji, które są przydatne do pracy z listami.

  • len(lista) - zwraca liczbę elementów listy
  • append(x) - dodaje element x na koniec listy
  • insert(i,x) - dodaje do listy element x w miejsce o indeksie i
  • remove(x) - usuwa z listy pierwszy napotkany element x. Jeśli na - liście nie ma elementu o wartości x, Sage wyświetli błąd.
  • pop(i) - usuwa z listy element o indeksie i, jednocześnie zmniejszając rozmiar tablicy o 1. Jeśli wywołamy pop() bez podawania wartości i, usuniemy ostatni element listy.
  • count(x) - zwraca liczbę wystąpień x na liście
  • sort() - sortuje elementy listy rosnąco

In [10]:
l = [1,2,3,4]
l


Out[10]:
[1, 2, 3, 4]

In [11]:
l[4]


---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-11-23ef5daf5560> in <module>()
----> 1 l[4]

IndexError: list index out of range

In [12]:
print (l[0:3])
print (l[3])


[1, 2, 3]
4

Iteracje po liscie:

W Pythonie klasyczna pętla for jest pętlą for-each, np.:


In [13]:
l = [1,2,33,4]

In [15]:
for el in l:


1  jest na liscie [1, 2, 33, 4]
2  jest na liscie [1, 2, 33, 4]
33  jest na liscie [1, 2, 33, 4]
4  jest na liscie [1, 2, 33, 4]

Ponieważ możemy automatycznie wygenerować listę liczb całkowitych z dowolnym krokiem (zob. help(range)):


In [16]:
range(10)


Out[16]:
range(0, 10)

to można w następujący sposób tworzyć pętle znane z C, Fortranu itp.:


In [18]:
for el in range(10,20,2):
    print (el)


10
12
14
16
18

Odwzorowywanie list (list comprehensions)

Warto zajrzeć do:

https://docs.python.org/3.5/tutorial/datastructures.html#list-comprehensions

Jest to zwięzły zapis odpowiadający matematycznemu, np.:

$$ a^2 \;\mathrm{ dla }\; a\in \{1,2,3\}$$

In [19]:
[a**2 for a in [1,2,3]]


Out[19]:
[1, 4, 9]

In [20]:
[a**2 for a in [1,2,3] if a<3]


Out[20]:
[1, 4]

Ten sam efekt można otrzymać stosując pętle for w klasyczny sposób:


In [22]:
l  = [11,22,44]
print(l)
l2 = []
for el in l:
    l2.append(el**2)
print(l2)


[11, 22, 44]
[121, 484, 1936]

Można zagnieżdżać pętle:


In [23]:
[(i,j) for i in range(4) for j in range(3) if i!=j]


Out[23]:
[(0, 1), (0, 2), (1, 0), (1, 2), (2, 0), (2, 1), (3, 0), (3, 1), (3, 2)]

Model programowania Map - Reduce

http://en.wikipedia.org/wiki/MapReduce

Python ma wbudowane funkcje umożliwiające wyrażanie zagadnienia w postaci operacji mapowania i redukcji dla danych znajdujących się na liście.


In [24]:
def f(x):
    return x+2

In [25]:
l  = [11,22,44]
map( f, l )


Out[25]:
<map at 0x7f9ec150c6d8>

In [26]:
sum( l )


Out[26]:
77

In [29]:
import functools 
def prod(x,y):
    return x*y
functools.reduce ( prod, l )


Out[29]:
10648

In [31]:
def maks(x,y):
    return max(x,y)
            
print( l, functools.reduce ( maks, l ))


[11, 22, 44] 44

In [35]:
max(l)


Out[35]:
44

In [ ]: