SlideShare a Scribd company logo
1 of 77
Download to read offline
Python
szybki start
O mnie
¤  Michał Gałka
¤  Kontakt:
¤  m.galka@sages.io
¤  galka.michal@gmail.com
¤  @michal_galka (Twitter)
¤  None (Facebook)
¤  Zawodowo:
¤  Principal Software Engineer @Harman (C, Python,
Embedded)
¤  Trener @Sages (Python)
Python
Python
¤  Dynamicznie typowany
¤  Interpretowany (kompilowany do bajtkodu)
¤  Wieloparadygmatowy

¤  Prosta składnia
¤  Bogata biblioteka standardowa (batteries included)
¤  Duża ilość modułów dodatkowych
Gdzie jest haczyk?
¤  Programista musi zadbać o kontrolę typów.
¤  Błędy zgłaszane są dopiero po uruchomieniu programu.
¤  Język skryptowy, więc raczej wolny.
Obszary zastosowań
¤  Język skryptowy ogólnego przeznaczenia
¤  Aplikacje dekstopowe
¤  Aplikacje webowe
¤  Obliczenia naukowe
¤  NumPy
¤  SciPy
¤  Pandas
¤  Systemy wbudowane
¤  …
Instalacja pakietów zewnętrznych
¤  Pakiety gromadzone są w repozytorium zwanym PyPI)
(Python Package Index)
¤  https://pypi.python.org 
¤  Narzędzie pip umożliwia m.in.:
¤  Wyszukiwanie pakietów
¤  Instalację pakietów
¤  Deinstalację pakietów
¤  Aktualizację pakietów
¤  Dostarczanie listy aktualnie zainstalowanych pakietów
Instalacja pakietów zewnętrznych
¤  Dodatkowe biblioteki (pakiety) mogą być dystrybuowane
poza PyPI
¤  Instalator – setup.py
¤  Najczęściej używa pakietu setuptools lub distutils
¤  Zapewnia instalację aplikacji i zależności
¤  Sprowadza instalację do wydania komendy )
setup.py install
Środowiska wirtualne
¤  Obsługiwane są przez zewnętrzny pakiet virtualenv )
lub wbudowany moduł venv (Python 3)
¤  Izolują środowisko uruchomieniowe dla danego projektu
¤  Ograniczają dostępne pakiety do tych zainstalowanych w
środowisku wirtualnym
¤  Pozwalają instalować pakiety bez uprawnień administratora
¤  Pozwalają zdefiniować interpreter dla projektu
Środowiska wirtualne
$ virtualenv --python python3.5 ~/venv/szybkistart
$ python –m venv ~/venv/szybkistart
$ python3 –m venv ~/venv/szybkistart
Uruchomienie środowiska wirtualnego
¤  W systemach Linux i OS X / macOS
$ source ~/venv/szybkistart/bin/activate
¤  W systemach Windows
> C:venvszybkistartScriptsactivate
Opuszczenie środowiska wirtualnego
¤  W systemach Linux i OS X / macOS
$ deactivate
¤  W systemach Windows
> deactivate
Interpreter
¤  Wykonuje kod programu w języku Python
¤  W trybie wsadowym wykonuje program z przekazanego
skryptu)

$ python my_script.py
Interpreter
¤  W trybie interaktywnym wyświetla linię poleceń i czeka na
akcje użytkownika
$ python
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more
information.
>>>
IPython
¤  Interaktywna powłoka dla interpretera języka Python
¤  Alternatywa dla standardowej powłoki
¤  Oferuje kilka ułatwień w pracy:
¤  Kolorowanie i kompletowanie składni
¤  Podpowiadanie zawartości modułów
¤  Dostęp do pomocy
¤  Przeszukiwanie historii
Składnia
¤  Niewielka ilość słów kluczowych
¤  Podział na bloki oparty o wcięcia
if __name__ == '__main__':
x = 10
for i in range(x):
print(x)
print(10 * '-')
Zmienne
¤  Zmienna przechowuje jakąś wartość
¤  Każda zmienna jest określonego typu 
¤  Typ jest określany na podstawie wartości
¤  Każda zmienna musi być zainicjowana
if __name__ == '__main__':
print(value)
Traceback (most recent call last):
File "in2.py", line 2, in <module>
print(value)
NameError: name 'value' is not defined
Podstawowe typy zmiennych
¤  int – liczby całkowite
¤  float – liczby zemiennoprzecinkowe 
¤  string – łańcuchy znaków
¤  W Python 3.x w formacie Unicode
¤  W Python 2.x w formacie ASCII
¤  Boolean – wartości logiczne (True, False)
¤  None – obiekt zerowy/pusty
Podstawowe typy zmiennych
x = 3
y = 0x7f
s = 'Welcome to Python'
value = True
my_obj = None
Instrukcja warunkowa
¤  Python posiada tylko jedną instrukcję warunkową
¤  if…elif…else
x = -10
if x != 0:
print('x nie jest zerem')
Instrukcja warunkowa
if x < 0:
print('x jest liczbą ujemną')
else:
print('x jest liczbą nieujemną')
if x < 0:
print('x jest liczbą ujemną')
elif x == 0:
print('x jest zerem')
else:
print('x jest liczbą dodatnią')
Operatory
¤  Operatory porównania
¤  ==, !=, <, <=, >, >=
¤  Operatory logiczne
¤  and, or, not
¤  Operatory arytmetyczne
¤  +, -, *, /, %
Operatory porównania
¤  a == b – a jest równe b
¤  a < b – a jest mniejsze niż b
¤  a <= b – a jest mniejsze niż lub równe b
¤  a > b – a jest większe niż b
¤  a >= b – a jest większe niż lub równe b
¤  a != b – a jest różne od b
Operatory logiczne
¤  a and b – zwraca True jeśli a i b mają wartość logiczną
True.
¤  a or b – zwraca True jeśli przynajmniej jeden z operandów
ma wartość logiczną True.
¤  not a – zwraca wartość logiczną przeciwną do wartości
logicznej a.
Pętla for
¤  Służy do iterowania po określonej sekwencji
¤  Zbliżona do pętli foreach w innych językach
Pętla for
items = ['a', 'b', 1, 'c', 'd', 2, 'e', 'f', False]
for i in items:
print(i)
a
b
1
c
d
2
e
f
False
Pętla for
for x in range(10):
print(x)
0
1
2
3
4
5
6
7
8
9
Pętla while
¤  Wykonuje kolejne iteracje bloku występującego po while
¤  Iteracje wykonywane są dopóki warunek pętli jest
spełniony
¤  Może nie wykonać się ani razu
¤  Może być pętlą nieskończoną
Pętla while
x = 10
while x > 0:
print(x)
x -= 1 # x = x - 1
10
9
8
7
6
5
4
3
2
1
break i continue
¤  W każdej pętli można użyć słów kluczowych break i
continue
¤  break powoduje natychmiastowe przerwanie wykonywania
pętli
¤  continue powoduje przejście do kolejnej iteracji
Funkcje
¤  Definicja funkcji w Pythonie – słowo kluczowe def

def my_func():
pass
¤  Definicja każdej funkcji składa się z 3 elementów:
¤  Nazwy funkcji
¤  listy parametrów ( może być pusta)
¤  ciała funkcji
def print_hello(name, surname):
print('Hello {} {} !'.format(name, surname))
nazwa funkcji
lista
parametrów
ciało funkcji
Funkcje – argumenty pozycyjne
def print_n(text, n):
for i in range(n):
print(text)
print_n("my text 1", 10)
Funkcje – argumenty nazwane
print_n2("my text")
print_n2("my text", 10)
print_n2("my text", 10, True)
print_n2("my text", n=10)
print_n2("my text", add_asterisk=True)
def print_n2(text, n=5, add_asterisk=False):
for i in range(n):
print(text)
if add_asterisk:
print('*')
return
¤  Funkcja może zwracać wartość (zupełnie jak na matematyce)
¤  Wartość zwracaną przez funkcję można przypisać do
zmiennej, lub używać jak każdej innej wartości w języku
Python.
¤  Wartość funkcji jest zwracana przy pomocy słowa kluczowego
return
return
def add(x, y):
return x + y
z = add(2, 4)
print(z)
print(add(3, 5))
print(add(6, z))
Funkcje o zmiennej ilości parametrów
def my_function(*args, **kwargs):
pass
print(1,2,"text", 8.4)
Zakres widoczności zmiennych
¤  Pierwsze przypisanie do zmiennej wewnątrz funkcji tworzy
zmienną lokalną
¤  Odwołanie się do nieznanej zmiennej wewnątrz funkcji
powoduje przeszukiwanie zewnętrznych zakresów.
¤  W przypadku nieznalezienia zmiennej zgłaszany jest wyjątek
¤  Aby zmodyfikować zmienną globalną z wnętrza funkcji
konieczne jest użycie słowa kluczowego global.
Krotka
¤  Sekwencja dowolnych obiektów języka Python.
¤  Krotka (ang. tuple) zapisywana jest jako ciąg obiektów
oddzielonych przecinkami i ujętych w nawiasy okrągłe.
t = (1, 2, 'test', (4, 5, 6), [6, 5], None)
t = ( 2, )
¤  Krotka jednoelementowa musi być zakończona przecinkiem.
¤  Krotka jest typem niezmiennym (ang. immutable)
¤  Raz zdefiniowana nie może zmienić swojej wartości.
Lista
¤  Sekwencja dowolnych obiektów języka Python.
¤  Lista zapisywana jest jako ciąg obiektów oddzielonych
przecinkami i ujętych w nawiasy kwadratowe.
l = [1, 2, 'test', (4, 5, 6), [6, 5], None]
¤  Lista jest typem zmiennym (ang. mutable)
¤  Zawartość listy może być zmieniana po jej zdefiniowaniu
Łańcuch znaków
¤  Łańcuch znaków (ang. string) to uporządkowany ciąg znaków.
¤  Łańcuchy znaków ujęte są w cudzysłów pojedynczy, lub
podwójny.
¤  W Pythonie nie ma osobnego typu odpowiedzialnego za
pojedyncze znaki.
Łańcuch znaków
¤  Łańcuchy znaków w Pythonie 3 zawsze składają się ze znaków
Unicode.
¤  Istnieje typ bytes, który używa znaków ASCII.
¤  Używany jest głównie do reprezentowania danych binarnych.
¤  String jest typem niezmiennym (ang. immutable).
Łańcuchy znaków
>>> s = 'Some text'
>>> b = b'Some byte string'
>>> type(s)
<class 'str'>
>>> type(b)
<class 'bytes'>
split i join
¤  Metoda split pozwala podzielić zadany łańcuch znaków z
uwzględnieniem separatora.
¤  Metoda join pozwala scalić zadaną listę łańcuchów
znaków do pojedynczego łańcucha
split i join
>>> s = 'Ala ma kota'
>>> s.split(' ')
['Ala', 'ma', 'kota']
>>> s.split()
['Ala', 'ma', 'kota']
>>> l = s.split()
>>> l
['Ala', 'ma', 'kota']
>>> '-'.join(l)
'Ala-ma-kota'
Sekwencje
¤  Wszystkie typy, które reprezentują uporządkowane ciągi
elementów (np. listy, krotki (ang. tuple), łańcuchy znaków (ang.
string))
¤  Dostęp do elementów odbywa się poprzez indeks
¤  a[10]
¤  Operator slice pozwala wybrać pewien podzbiór sekwencji
¤  a[2:4]
¤  Rozszerzony operator slice pozwala pominąć niektóre elementy
¤  a[2:8:2]
Sekwencje
0 1 2 3 4 5 6
-7 -6 -5 -4 -3 -2 -1
a[3:6]
a[-7:-4]
Sekwencje
0 1 2 3 4 5 6
-7 -6 -5 -4 -3 -2 -1
s[0:5:2], s[-7:-2:2]
0 1 2 3 4 5 6
-7 -6 -5 -4 -3 -2 -1
>>> l = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> l[2]
'c'
>>> l[0:5]
['a', 'b', 'c', 'd', 'e']
>>> l[1:]
['b', 'c', 'd', 'e', 'f', 'g']
>>> l[:-1]
['a', 'b', 'c', 'd', 'e', 'f']
>>> l[::-1]
['g', 'f', 'e', 'd', 'c', 'b', 'a']
>>> l[:]
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> len(l)
7
Operator in
¤  Do sprawdzenia, czy dany obiekt należy do sekwencji
można użyć operatora in.
>>> s = 'Some text'
>>> 'S' in s
True
>>> 'q' in s
False
>>> l = ['a', 'b', 'cd', 1, 2, 3]
>>> 1 in l
True
>>> 'cd' in l
True
Słownik
¤  Zbiór obiektów przechowywanych jako pary klucz-wartość.
¤  Zapisywany jest jako kolejne elementy klucz-wartość ujęte w nawiasy
klamrowe.
¤  Kluczem może być prawie dowolny obiekt.
¤  Klucz musi posiadać stały skrót (ang. hash).
¤  Wartościami mogą być dowolne obiekty.
¤  Kolejność elementów słownika nie jest stała i nie musi być zgodna z
kolejnością dodawania.
¤  Obecność klucza w słowniku można sprawdzić przy pomocy operatora
in.
Słownik
person = {
'name': 'John',
'surname': 'Doe'
}
print(person)
print('=' * 20)
person['age']= 43
print(person)
print('=' * 20)
if 'age' in person:
print('Age: {0}'.format(person['age']))
Pliki
¤  Do otwarcia pliku służy funkcja open(filename, mode)
¤  filename – nazwa pliku
¤  mode – string określający tryb otwarcia
¤  wartość zwracana jest obiektem pliku

¤  Tryby otwarcia pliku:
¤  'r' – do odczytu
¤  'w' – do zapisu
¤  'r+' – do odczytu i zapisu
¤  'a' – do dopisywania
Pliki binarne
¤  Dodatkowo wprowadzono tryby binarne:
¤  'rb' – do odczytu
¤  'wb' – do zapisu
¤  'r+b' – do odczytu i zapisu
Odczyt danych
¤  Otwarcie pliku
f = open('file.txt', 'r')
¤  Odczyt 5 znaków
f.read(5)
¤  Odczyt odczyt całej zawartości
f.read()
¤  Odczyt listy linii
¤  Znaki końca linii są również odczytywane
f.readlines()
Odczyt linia po linii
f = open('file.txt', 'r')
for line in f:
print line
Zapis danych i zamknięcie pliku
f.write('This is a testn')
f.close()
Context manager
¤  Dba o to, żeby plik bez względu na powodzenie operacji
został zamknięty.
with open('somefile', 'r') as f:
data = f.read()
Moduły
¤  Moduły są po prostu plikami z rozszerzeniem .py.
¤  Aby korzystać z danego modułu w naszym skrypcie należy go
zaimportować przy pomocy słowa kluczowego import.
¤  Można importować tylko wybrane elementy modułu
(zmienne, funkcje, klasy) przy pomocy from..import.
Pakiety
¤  Pakiety są katalogami grupującymi moduły.
¤  Każdy pakiet musi posiadać specjalny plik __init__.py.
¤  Plik ten może być pusty.
Logowanie
¤  Logowanie pozwala wypisywać komunikaty w trakcie
działania programu.
¤  Dostarcza dodatkowych informacji przy debugowaniu.
¤  Narzędzia logujące znajdują się w module logging.
¤  Rozróżniamy kilka poziomów logowania:
¤  info
¤  debug
¤  warning
¤  error
Logowanie
import logging
logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger(__name__)
Pakiet requests
¤  Zewnętrzny pakiet wspomagający komunikację poprzez
HTTP.
¤  Przydatny m.in. do wysyłania zapytań do REST API.
¤  Bardzo popularny z uwagi na swoją przyjazność.
Klasy i obiekty
¤  Klasy są sposobem na grupowanie zmiennych i funkcji
¤  Klasa jest typem danych (tak jak int, string, list itd.)
¤  Obiekt jest instancją danej klasy (zmienną danego typu)
¤  Zmienne w obiekcie nazywamy atrybutami
¤  Funkcje w obiekcie nazywamy metodami
Klasy i obiekty
class MyClass:
def my_method(self):
# do something
pass
my_object = MyClass()
my_object.my_method()
Parametr self
¤  Każda metoda w klasie przyjmuje self jako pierwszy
parametr.
¤  Nazwa self jest jedynie konwencją.
¤  Parametr self jest odwołaniem do bieżącej instancji
obiektu.
¤  Pozwala na dostęp do atrybutów z wewnątrz obiektu
¤  Parametr self musi być zadeklarowany jawnie.
¤  Parametr self zawsze przekazywany jest domyślnie przy
wywołaniu metody.
Metoda __init__
¤  Czasami przez analogię do innych języków nazywana
konstruktorem.
¤  Inicjalizuje obiekt
¤  Zawiera wszystkie operacje, które muszą być wykonane po
utworzeniu obiektu w pamięci.
¤  Może nie przyjmować żadnych argumentów.
¤  Może zostać pominięta w klasie.
Metoda __init__
class MyCounter:
def __init__(self, initial_value, step=1):
self.counter = initial_value
self.step = step
def incerement(self):
self.counter += self.step
my_counter = MyCounter(0)
my_counter.incerement()
Atrybuty obiektu
¤  Muszą być zainicjowane wewnątrz metody __init__.
¤  Zawierają wartości specyficzne dla obiektu (nie dla klasy!)
¤  Każda instancja ma dostęp tylko do swoich atrybutów
Atrybuty klasy
¤  Są inicjowane po deklaracji klasy.
¤  Są dostępne dla każdego obiektu oraz dla samej klasy.
¤  Są współdzielone pomiędzy wszystkimi instancjami.
Dziedziczenie
¤  Pozwala na uszczegółowianie cech obiektów.
¤  Daje możliwość tworzenia w łatwy sposób obiektów
różniących się od innych jedynie w pewnych szczegółach.
¤  Klasę z której dziedziczymy nazywamy klasą bazową.
¤  Klasę dziedziczącą nazywamy podklasą.
class Vehicle:
def __init__(self, production_year):
self.production_year = production_year
def move(self, destination):
pass
class Car(Vehicle):
def __init__(self, production_year, number_of_wheels):
super().__init__(production_year)
self.number_of_wheels = number_of_wheels
def move(self, destination):
drive_to(destination)
Dziedziczenie
Gdzie szukać wiedzy?
¤  https://developers.google.com/edu/python/
¤  http://python-textbok.readthedocs.io/en/1.0/
¤  https://docs.python.org/3/
Ankieta online
https://goo.gl/5wHRHa
Szkolenie dedykowane dla Ciebie
Interesuje Cię tematyka warsztatu?
Zapoznaj się z programem szkolenia Sages:


•  Programowanie w języku Python, 27.01.2018
Dla uczestników dzisiejszego warsztatu zniżka na to szkolenie 
w wysokości 50%
Organizator Stacji IT
Partnerzy

More Related Content

What's hot

Kryptografia i mechanizmy bezpieczenstwa
Kryptografia i mechanizmy bezpieczenstwaKryptografia i mechanizmy bezpieczenstwa
Kryptografia i mechanizmy bezpieczenstwaPawel Krawczyk
 
Przekierowanie strumienia danych
Przekierowanie strumienia danychPrzekierowanie strumienia danych
Przekierowanie strumienia danychJacek Tomczak
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.Semihalf
 
Wprowadzenie do Reactive Extensions (RX) dla .NET
Wprowadzenie do Reactive Extensions (RX) dla .NETWprowadzenie do Reactive Extensions (RX) dla .NET
Wprowadzenie do Reactive Extensions (RX) dla .NETMaciej Zbrzezny
 
Wprowadzenie do technologii Big Data
Wprowadzenie do technologii Big DataWprowadzenie do technologii Big Data
Wprowadzenie do technologii Big DataSages
 
Lexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closuresLexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closuresBrainhub
 
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8Szymon Stępniak
 
TypeScript as a runtime error terminator
TypeScript as a runtime error terminatorTypeScript as a runtime error terminator
TypeScript as a runtime error terminatorThe Software House
 
Tworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego koduTworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego kodupabloware
 
Programowanie funkcyjne w Pythonie
Programowanie funkcyjne w PythonieProgramowanie funkcyjne w Pythonie
Programowanie funkcyjne w PythonieAdam Byrtek
 
Professional Javascript for Developers
Professional  Javascript for DevelopersProfessional  Javascript for Developers
Professional Javascript for DevelopersRule_Financial
 
Linux command line - Przewodnik
Linux command line - PrzewodnikLinux command line - Przewodnik
Linux command line - PrzewodnikOskar Wycislak
 
Moduł sztucznych sieci neuronowych dla GRASS 7
Moduł sztucznych sieci neuronowych dla GRASS 7Moduł sztucznych sieci neuronowych dla GRASS 7
Moduł sztucznych sieci neuronowych dla GRASS 7WGUG
 
Erlang
ErlangErlang
Erlangkonryd
 

What's hot (18)

Kryptografia i mechanizmy bezpieczenstwa
Kryptografia i mechanizmy bezpieczenstwaKryptografia i mechanizmy bezpieczenstwa
Kryptografia i mechanizmy bezpieczenstwa
 
Przekierowanie strumienia danych
Przekierowanie strumienia danychPrzekierowanie strumienia danych
Przekierowanie strumienia danych
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.
 
Wprowadzenie do Reactive Extensions (RX) dla .NET
Wprowadzenie do Reactive Extensions (RX) dla .NETWprowadzenie do Reactive Extensions (RX) dla .NET
Wprowadzenie do Reactive Extensions (RX) dla .NET
 
Wprowadzenie do technologii Big Data
Wprowadzenie do technologii Big DataWprowadzenie do technologii Big Data
Wprowadzenie do technologii Big Data
 
Podstawy php
Podstawy phpPodstawy php
Podstawy php
 
Podstawy php
Podstawy phpPodstawy php
Podstawy php
 
Lexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closuresLexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closures
 
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
 
TypeScript as a runtime error terminator
TypeScript as a runtime error terminatorTypeScript as a runtime error terminator
TypeScript as a runtime error terminator
 
Podstawy PHP
Podstawy PHPPodstawy PHP
Podstawy PHP
 
Tworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego koduTworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego kodu
 
Python io
Python ioPython io
Python io
 
Programowanie funkcyjne w Pythonie
Programowanie funkcyjne w PythonieProgramowanie funkcyjne w Pythonie
Programowanie funkcyjne w Pythonie
 
Professional Javascript for Developers
Professional  Javascript for DevelopersProfessional  Javascript for Developers
Professional Javascript for Developers
 
Linux command line - Przewodnik
Linux command line - PrzewodnikLinux command line - Przewodnik
Linux command line - Przewodnik
 
Moduł sztucznych sieci neuronowych dla GRASS 7
Moduł sztucznych sieci neuronowych dla GRASS 7Moduł sztucznych sieci neuronowych dla GRASS 7
Moduł sztucznych sieci neuronowych dla GRASS 7
 
Erlang
ErlangErlang
Erlang
 

Similar to Python szybki start

Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?The Software House
 
Confitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów SparkowychConfitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów SparkowychMarcin Jasiński
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
Pułapki liczb zmiennoprzecinkowych
Pułapki liczb zmiennoprzecinkowychPułapki liczb zmiennoprzecinkowych
Pułapki liczb zmiennoprzecinkowychAdam Sawicki
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł GrajewskiPROIDEA
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Semihalf
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Wojciech Szymański
 
Bash 1 ----- wykład2i3
Bash 1   -----     wykład2i3Bash 1   -----     wykład2i3
Bash 1 ----- wykład2i3kkk112
 
[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariowaćJakub Marchwicki
 
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...Trójmiejska Grupa Testerska
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPPiotr Gabryjeluk
 
Wzorce projektowe w praktyce
Wzorce projektowe w praktyceWzorce projektowe w praktyce
Wzorce projektowe w praktycePHPstokPHPstok
 
PSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistycznePSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistyczneAurora Creation
 

Similar to Python szybki start (20)

Lambdy strumienie
Lambdy strumienieLambdy strumienie
Lambdy strumienie
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
 
Confitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów SparkowychConfitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów Sparkowych
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Pułapki liczb zmiennoprzecinkowych
Pułapki liczb zmiennoprzecinkowychPułapki liczb zmiennoprzecinkowych
Pułapki liczb zmiennoprzecinkowych
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
 
Jak działa CPython
Jak działa CPythonJak działa CPython
Jak działa CPython
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.
 
Programowanie
ProgramowanieProgramowanie
Programowanie
 
Programowanie
ProgramowanieProgramowanie
Programowanie
 
Bash 1 ----- wykład2i3
Bash 1   -----     wykład2i3Bash 1   -----     wykład2i3
Bash 1 ----- wykład2i3
 
DTrace
DTraceDTrace
DTrace
 
[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować
 
react-pl.pdf
react-pl.pdfreact-pl.pdf
react-pl.pdf
 
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
TGT#11 - Zostały Ci jeszcze jakieś włosy? (Testowanie programów równoległych)...
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHP
 
Wzorce projektowe w praktyce
Wzorce projektowe w praktyceWzorce projektowe w praktyce
Wzorce projektowe w praktyce
 
PSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistycznePSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistyczne
 

More from Sages

Budowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureBudowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureSages
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawySages
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznieSages
 
Jak działa blockchain?
Jak działa blockchain?Jak działa blockchain?
Jak działa blockchain?Sages
 
Qgis szybki start
Qgis szybki startQgis szybki start
Qgis szybki startSages
 
Architektura SOA - wstęp
Architektura SOA - wstępArchitektura SOA - wstęp
Architektura SOA - wstępSages
 
Bezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach javaBezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach javaSages
 
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopSages
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji androidSages
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreSages
 
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...Sages
 
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSzybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSages
 
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Sages
 
Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkSages
 
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetSages
 
Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startSages
 
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkitSages
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemSages
 
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseCodepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseSages
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJSSages
 

More from Sages (20)

Budowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureBudowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze Azure
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawy
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
Jak działa blockchain?
Jak działa blockchain?Jak działa blockchain?
Jak działa blockchain?
 
Qgis szybki start
Qgis szybki startQgis szybki start
Qgis szybki start
 
Architektura SOA - wstęp
Architektura SOA - wstępArchitektura SOA - wstęp
Architektura SOA - wstęp
 
Bezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach javaBezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach java
 
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache Hadoop
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji android
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT core
 
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
 
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSzybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
 
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
 
Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache Spark
 
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii Puppet
 
Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki start
 
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkit
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
 
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseCodepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
 

Python szybki start

  • 2. O mnie ¤  Michał Gałka ¤  Kontakt: ¤  m.galka@sages.io ¤  galka.michal@gmail.com ¤  @michal_galka (Twitter) ¤  None (Facebook) ¤  Zawodowo: ¤  Principal Software Engineer @Harman (C, Python, Embedded) ¤  Trener @Sages (Python)
  • 4. Python ¤  Dynamicznie typowany ¤  Interpretowany (kompilowany do bajtkodu) ¤  Wieloparadygmatowy ¤  Prosta składnia ¤  Bogata biblioteka standardowa (batteries included) ¤  Duża ilość modułów dodatkowych
  • 5. Gdzie jest haczyk? ¤  Programista musi zadbać o kontrolę typów. ¤  Błędy zgłaszane są dopiero po uruchomieniu programu. ¤  Język skryptowy, więc raczej wolny.
  • 6. Obszary zastosowań ¤  Język skryptowy ogólnego przeznaczenia ¤  Aplikacje dekstopowe ¤  Aplikacje webowe ¤  Obliczenia naukowe ¤  NumPy ¤  SciPy ¤  Pandas ¤  Systemy wbudowane ¤  …
  • 7. Instalacja pakietów zewnętrznych ¤  Pakiety gromadzone są w repozytorium zwanym PyPI) (Python Package Index) ¤  https://pypi.python.org ¤  Narzędzie pip umożliwia m.in.: ¤  Wyszukiwanie pakietów ¤  Instalację pakietów ¤  Deinstalację pakietów ¤  Aktualizację pakietów ¤  Dostarczanie listy aktualnie zainstalowanych pakietów
  • 8. Instalacja pakietów zewnętrznych ¤  Dodatkowe biblioteki (pakiety) mogą być dystrybuowane poza PyPI ¤  Instalator – setup.py ¤  Najczęściej używa pakietu setuptools lub distutils ¤  Zapewnia instalację aplikacji i zależności ¤  Sprowadza instalację do wydania komendy ) setup.py install
  • 9. Środowiska wirtualne ¤  Obsługiwane są przez zewnętrzny pakiet virtualenv ) lub wbudowany moduł venv (Python 3) ¤  Izolują środowisko uruchomieniowe dla danego projektu ¤  Ograniczają dostępne pakiety do tych zainstalowanych w środowisku wirtualnym ¤  Pozwalają instalować pakiety bez uprawnień administratora ¤  Pozwalają zdefiniować interpreter dla projektu
  • 10. Środowiska wirtualne $ virtualenv --python python3.5 ~/venv/szybkistart $ python –m venv ~/venv/szybkistart $ python3 –m venv ~/venv/szybkistart
  • 11. Uruchomienie środowiska wirtualnego ¤  W systemach Linux i OS X / macOS $ source ~/venv/szybkistart/bin/activate ¤  W systemach Windows > C:venvszybkistartScriptsactivate
  • 12. Opuszczenie środowiska wirtualnego ¤  W systemach Linux i OS X / macOS $ deactivate ¤  W systemach Windows > deactivate
  • 13. Interpreter ¤  Wykonuje kod programu w języku Python ¤  W trybie wsadowym wykonuje program z przekazanego skryptu) $ python my_script.py
  • 14. Interpreter ¤  W trybie interaktywnym wyświetla linię poleceń i czeka na akcje użytkownika $ python Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>>
  • 15. IPython ¤  Interaktywna powłoka dla interpretera języka Python ¤  Alternatywa dla standardowej powłoki ¤  Oferuje kilka ułatwień w pracy: ¤  Kolorowanie i kompletowanie składni ¤  Podpowiadanie zawartości modułów ¤  Dostęp do pomocy ¤  Przeszukiwanie historii
  • 16. Składnia ¤  Niewielka ilość słów kluczowych ¤  Podział na bloki oparty o wcięcia if __name__ == '__main__': x = 10 for i in range(x): print(x) print(10 * '-')
  • 17. Zmienne ¤  Zmienna przechowuje jakąś wartość ¤  Każda zmienna jest określonego typu ¤  Typ jest określany na podstawie wartości ¤  Każda zmienna musi być zainicjowana if __name__ == '__main__': print(value) Traceback (most recent call last): File "in2.py", line 2, in <module> print(value) NameError: name 'value' is not defined
  • 18. Podstawowe typy zmiennych ¤  int – liczby całkowite ¤  float – liczby zemiennoprzecinkowe ¤  string – łańcuchy znaków ¤  W Python 3.x w formacie Unicode ¤  W Python 2.x w formacie ASCII ¤  Boolean – wartości logiczne (True, False) ¤  None – obiekt zerowy/pusty
  • 19. Podstawowe typy zmiennych x = 3 y = 0x7f s = 'Welcome to Python' value = True my_obj = None
  • 20. Instrukcja warunkowa ¤  Python posiada tylko jedną instrukcję warunkową ¤  if…elif…else x = -10 if x != 0: print('x nie jest zerem')
  • 21. Instrukcja warunkowa if x < 0: print('x jest liczbą ujemną') else: print('x jest liczbą nieujemną') if x < 0: print('x jest liczbą ujemną') elif x == 0: print('x jest zerem') else: print('x jest liczbą dodatnią')
  • 22. Operatory ¤  Operatory porównania ¤  ==, !=, <, <=, >, >= ¤  Operatory logiczne ¤  and, or, not ¤  Operatory arytmetyczne ¤  +, -, *, /, %
  • 23. Operatory porównania ¤  a == b – a jest równe b ¤  a < b – a jest mniejsze niż b ¤  a <= b – a jest mniejsze niż lub równe b ¤  a > b – a jest większe niż b ¤  a >= b – a jest większe niż lub równe b ¤  a != b – a jest różne od b
  • 24. Operatory logiczne ¤  a and b – zwraca True jeśli a i b mają wartość logiczną True. ¤  a or b – zwraca True jeśli przynajmniej jeden z operandów ma wartość logiczną True. ¤  not a – zwraca wartość logiczną przeciwną do wartości logicznej a.
  • 25. Pętla for ¤  Służy do iterowania po określonej sekwencji ¤  Zbliżona do pętli foreach w innych językach
  • 26. Pętla for items = ['a', 'b', 1, 'c', 'd', 2, 'e', 'f', False] for i in items: print(i) a b 1 c d 2 e f False
  • 27. Pętla for for x in range(10): print(x) 0 1 2 3 4 5 6 7 8 9
  • 28. Pętla while ¤  Wykonuje kolejne iteracje bloku występującego po while ¤  Iteracje wykonywane są dopóki warunek pętli jest spełniony ¤  Może nie wykonać się ani razu ¤  Może być pętlą nieskończoną
  • 29. Pętla while x = 10 while x > 0: print(x) x -= 1 # x = x - 1 10 9 8 7 6 5 4 3 2 1
  • 30. break i continue ¤  W każdej pętli można użyć słów kluczowych break i continue ¤  break powoduje natychmiastowe przerwanie wykonywania pętli ¤  continue powoduje przejście do kolejnej iteracji
  • 31. Funkcje ¤  Definicja funkcji w Pythonie – słowo kluczowe def def my_func(): pass
  • 32. ¤  Definicja każdej funkcji składa się z 3 elementów: ¤  Nazwy funkcji ¤  listy parametrów ( może być pusta) ¤  ciała funkcji def print_hello(name, surname): print('Hello {} {} !'.format(name, surname)) nazwa funkcji lista parametrów ciało funkcji
  • 33. Funkcje – argumenty pozycyjne def print_n(text, n): for i in range(n): print(text) print_n("my text 1", 10)
  • 34. Funkcje – argumenty nazwane print_n2("my text") print_n2("my text", 10) print_n2("my text", 10, True) print_n2("my text", n=10) print_n2("my text", add_asterisk=True) def print_n2(text, n=5, add_asterisk=False): for i in range(n): print(text) if add_asterisk: print('*')
  • 35. return ¤  Funkcja może zwracać wartość (zupełnie jak na matematyce) ¤  Wartość zwracaną przez funkcję można przypisać do zmiennej, lub używać jak każdej innej wartości w języku Python. ¤  Wartość funkcji jest zwracana przy pomocy słowa kluczowego return
  • 36. return def add(x, y): return x + y z = add(2, 4) print(z) print(add(3, 5)) print(add(6, z))
  • 37. Funkcje o zmiennej ilości parametrów def my_function(*args, **kwargs): pass print(1,2,"text", 8.4)
  • 38. Zakres widoczności zmiennych ¤  Pierwsze przypisanie do zmiennej wewnątrz funkcji tworzy zmienną lokalną ¤  Odwołanie się do nieznanej zmiennej wewnątrz funkcji powoduje przeszukiwanie zewnętrznych zakresów. ¤  W przypadku nieznalezienia zmiennej zgłaszany jest wyjątek ¤  Aby zmodyfikować zmienną globalną z wnętrza funkcji konieczne jest użycie słowa kluczowego global.
  • 39. Krotka ¤  Sekwencja dowolnych obiektów języka Python. ¤  Krotka (ang. tuple) zapisywana jest jako ciąg obiektów oddzielonych przecinkami i ujętych w nawiasy okrągłe. t = (1, 2, 'test', (4, 5, 6), [6, 5], None) t = ( 2, ) ¤  Krotka jednoelementowa musi być zakończona przecinkiem. ¤  Krotka jest typem niezmiennym (ang. immutable) ¤  Raz zdefiniowana nie może zmienić swojej wartości.
  • 40. Lista ¤  Sekwencja dowolnych obiektów języka Python. ¤  Lista zapisywana jest jako ciąg obiektów oddzielonych przecinkami i ujętych w nawiasy kwadratowe. l = [1, 2, 'test', (4, 5, 6), [6, 5], None] ¤  Lista jest typem zmiennym (ang. mutable) ¤  Zawartość listy może być zmieniana po jej zdefiniowaniu
  • 41. Łańcuch znaków ¤  Łańcuch znaków (ang. string) to uporządkowany ciąg znaków. ¤  Łańcuchy znaków ujęte są w cudzysłów pojedynczy, lub podwójny. ¤  W Pythonie nie ma osobnego typu odpowiedzialnego za pojedyncze znaki.
  • 42. Łańcuch znaków ¤  Łańcuchy znaków w Pythonie 3 zawsze składają się ze znaków Unicode. ¤  Istnieje typ bytes, który używa znaków ASCII. ¤  Używany jest głównie do reprezentowania danych binarnych. ¤  String jest typem niezmiennym (ang. immutable).
  • 43. Łańcuchy znaków >>> s = 'Some text' >>> b = b'Some byte string' >>> type(s) <class 'str'> >>> type(b) <class 'bytes'>
  • 44. split i join ¤  Metoda split pozwala podzielić zadany łańcuch znaków z uwzględnieniem separatora. ¤  Metoda join pozwala scalić zadaną listę łańcuchów znaków do pojedynczego łańcucha
  • 45. split i join >>> s = 'Ala ma kota' >>> s.split(' ') ['Ala', 'ma', 'kota'] >>> s.split() ['Ala', 'ma', 'kota'] >>> l = s.split() >>> l ['Ala', 'ma', 'kota'] >>> '-'.join(l) 'Ala-ma-kota'
  • 46. Sekwencje ¤  Wszystkie typy, które reprezentują uporządkowane ciągi elementów (np. listy, krotki (ang. tuple), łańcuchy znaków (ang. string)) ¤  Dostęp do elementów odbywa się poprzez indeks ¤  a[10] ¤  Operator slice pozwala wybrać pewien podzbiór sekwencji ¤  a[2:4] ¤  Rozszerzony operator slice pozwala pominąć niektóre elementy ¤  a[2:8:2]
  • 47. Sekwencje 0 1 2 3 4 5 6 -7 -6 -5 -4 -3 -2 -1 a[3:6] a[-7:-4]
  • 48. Sekwencje 0 1 2 3 4 5 6 -7 -6 -5 -4 -3 -2 -1 s[0:5:2], s[-7:-2:2]
  • 49. 0 1 2 3 4 5 6 -7 -6 -5 -4 -3 -2 -1 >>> l = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>> l[2] 'c' >>> l[0:5] ['a', 'b', 'c', 'd', 'e'] >>> l[1:] ['b', 'c', 'd', 'e', 'f', 'g'] >>> l[:-1] ['a', 'b', 'c', 'd', 'e', 'f'] >>> l[::-1] ['g', 'f', 'e', 'd', 'c', 'b', 'a'] >>> l[:] ['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>> len(l) 7
  • 50. Operator in ¤  Do sprawdzenia, czy dany obiekt należy do sekwencji można użyć operatora in. >>> s = 'Some text' >>> 'S' in s True >>> 'q' in s False >>> l = ['a', 'b', 'cd', 1, 2, 3] >>> 1 in l True >>> 'cd' in l True
  • 51. Słownik ¤  Zbiór obiektów przechowywanych jako pary klucz-wartość. ¤  Zapisywany jest jako kolejne elementy klucz-wartość ujęte w nawiasy klamrowe. ¤  Kluczem może być prawie dowolny obiekt. ¤  Klucz musi posiadać stały skrót (ang. hash). ¤  Wartościami mogą być dowolne obiekty. ¤  Kolejność elementów słownika nie jest stała i nie musi być zgodna z kolejnością dodawania. ¤  Obecność klucza w słowniku można sprawdzić przy pomocy operatora in.
  • 52. Słownik person = { 'name': 'John', 'surname': 'Doe' } print(person) print('=' * 20) person['age']= 43 print(person) print('=' * 20) if 'age' in person: print('Age: {0}'.format(person['age']))
  • 53. Pliki ¤  Do otwarcia pliku służy funkcja open(filename, mode) ¤  filename – nazwa pliku ¤  mode – string określający tryb otwarcia ¤  wartość zwracana jest obiektem pliku ¤  Tryby otwarcia pliku: ¤  'r' – do odczytu ¤  'w' – do zapisu ¤  'r+' – do odczytu i zapisu ¤  'a' – do dopisywania
  • 54. Pliki binarne ¤  Dodatkowo wprowadzono tryby binarne: ¤  'rb' – do odczytu ¤  'wb' – do zapisu ¤  'r+b' – do odczytu i zapisu
  • 55. Odczyt danych ¤  Otwarcie pliku f = open('file.txt', 'r') ¤  Odczyt 5 znaków f.read(5) ¤  Odczyt odczyt całej zawartości f.read() ¤  Odczyt listy linii ¤  Znaki końca linii są również odczytywane f.readlines()
  • 56. Odczyt linia po linii f = open('file.txt', 'r') for line in f: print line
  • 57. Zapis danych i zamknięcie pliku f.write('This is a testn') f.close()
  • 58. Context manager ¤  Dba o to, żeby plik bez względu na powodzenie operacji został zamknięty. with open('somefile', 'r') as f: data = f.read()
  • 59. Moduły ¤  Moduły są po prostu plikami z rozszerzeniem .py. ¤  Aby korzystać z danego modułu w naszym skrypcie należy go zaimportować przy pomocy słowa kluczowego import. ¤  Można importować tylko wybrane elementy modułu (zmienne, funkcje, klasy) przy pomocy from..import.
  • 60. Pakiety ¤  Pakiety są katalogami grupującymi moduły. ¤  Każdy pakiet musi posiadać specjalny plik __init__.py. ¤  Plik ten może być pusty.
  • 61. Logowanie ¤  Logowanie pozwala wypisywać komunikaty w trakcie działania programu. ¤  Dostarcza dodatkowych informacji przy debugowaniu. ¤  Narzędzia logujące znajdują się w module logging. ¤  Rozróżniamy kilka poziomów logowania: ¤  info ¤  debug ¤  warning ¤  error
  • 63. Pakiet requests ¤  Zewnętrzny pakiet wspomagający komunikację poprzez HTTP. ¤  Przydatny m.in. do wysyłania zapytań do REST API. ¤  Bardzo popularny z uwagi na swoją przyjazność.
  • 64. Klasy i obiekty ¤  Klasy są sposobem na grupowanie zmiennych i funkcji ¤  Klasa jest typem danych (tak jak int, string, list itd.) ¤  Obiekt jest instancją danej klasy (zmienną danego typu) ¤  Zmienne w obiekcie nazywamy atrybutami ¤  Funkcje w obiekcie nazywamy metodami
  • 65. Klasy i obiekty class MyClass: def my_method(self): # do something pass my_object = MyClass() my_object.my_method()
  • 66. Parametr self ¤  Każda metoda w klasie przyjmuje self jako pierwszy parametr. ¤  Nazwa self jest jedynie konwencją. ¤  Parametr self jest odwołaniem do bieżącej instancji obiektu. ¤  Pozwala na dostęp do atrybutów z wewnątrz obiektu ¤  Parametr self musi być zadeklarowany jawnie. ¤  Parametr self zawsze przekazywany jest domyślnie przy wywołaniu metody.
  • 67. Metoda __init__ ¤  Czasami przez analogię do innych języków nazywana konstruktorem. ¤  Inicjalizuje obiekt ¤  Zawiera wszystkie operacje, które muszą być wykonane po utworzeniu obiektu w pamięci. ¤  Może nie przyjmować żadnych argumentów. ¤  Może zostać pominięta w klasie.
  • 68. Metoda __init__ class MyCounter: def __init__(self, initial_value, step=1): self.counter = initial_value self.step = step def incerement(self): self.counter += self.step my_counter = MyCounter(0) my_counter.incerement()
  • 69. Atrybuty obiektu ¤  Muszą być zainicjowane wewnątrz metody __init__. ¤  Zawierają wartości specyficzne dla obiektu (nie dla klasy!) ¤  Każda instancja ma dostęp tylko do swoich atrybutów
  • 70. Atrybuty klasy ¤  Są inicjowane po deklaracji klasy. ¤  Są dostępne dla każdego obiektu oraz dla samej klasy. ¤  Są współdzielone pomiędzy wszystkimi instancjami.
  • 71. Dziedziczenie ¤  Pozwala na uszczegółowianie cech obiektów. ¤  Daje możliwość tworzenia w łatwy sposób obiektów różniących się od innych jedynie w pewnych szczegółach. ¤  Klasę z której dziedziczymy nazywamy klasą bazową. ¤  Klasę dziedziczącą nazywamy podklasą.
  • 72. class Vehicle: def __init__(self, production_year): self.production_year = production_year def move(self, destination): pass class Car(Vehicle): def __init__(self, production_year, number_of_wheels): super().__init__(production_year) self.number_of_wheels = number_of_wheels def move(self, destination): drive_to(destination) Dziedziczenie
  • 73. Gdzie szukać wiedzy? ¤  https://developers.google.com/edu/python/ ¤  http://python-textbok.readthedocs.io/en/1.0/ ¤  https://docs.python.org/3/
  • 75. Szkolenie dedykowane dla Ciebie Interesuje Cię tematyka warsztatu? Zapoznaj się z programem szkolenia Sages: •  Programowanie w języku Python, 27.01.2018 Dla uczestników dzisiejszego warsztatu zniżka na to szkolenie w wysokości 50%