Optional<T> - klasa generyczna, która pojawiła się w Java 1.8. Używając jej możemy ograniczyć występowanie wyjątków NPE. Jednak trzeba wiedzieć jak właściwie jej używać i czego unikać. Jeżeli jesteście ciekawi, to zapraszam do obejrzenia niniejszej prezentacji.
Warsztaty: Podstawy PHP
Część 2: Omówienie składni języka PHP (wersja 7)
Prowadzący: Krzysztof Ożóg, CTO Codesushi
Omówienie składni języka PHP (wersja 7):
1) Instalacja interpretera języka PHP
2) Deklaracja zmiennych i stałych
3) Operatory i ich priorytet
4) Struktury kontrolne
5) Definiowanie funkcji
6) Alternatywna składnia, czyli PHP jako system szablonów
7) Model obiektowy
a) Klasy
b) interface -y
c) Dziedziczenie
d) Magic methods
e) Autoloader
f) Obsługa błędów i wyjątków
g) PDO - interface komunikacji z bazami danych
h) Omówienie biblioteki standardowej PHP
i) Omówienie rozszerzenia SPL
j) Standardy PSR
k) Standardy kodowania PSR-1 i PSR-2
l) Composer, standardy PSR-0 i PSR-4 i Packagist
Optional<T> - klasa generyczna, która pojawiła się w Java 1.8. Używając jej możemy ograniczyć występowanie wyjątków NPE. Jednak trzeba wiedzieć jak właściwie jej używać i czego unikać. Jeżeli jesteście ciekawi, to zapraszam do obejrzenia niniejszej prezentacji.
Warsztaty: Podstawy PHP
Część 2: Omówienie składni języka PHP (wersja 7)
Prowadzący: Krzysztof Ożóg, CTO Codesushi
Omówienie składni języka PHP (wersja 7):
1) Instalacja interpretera języka PHP
2) Deklaracja zmiennych i stałych
3) Operatory i ich priorytet
4) Struktury kontrolne
5) Definiowanie funkcji
6) Alternatywna składnia, czyli PHP jako system szablonów
7) Model obiektowy
a) Klasy
b) interface -y
c) Dziedziczenie
d) Magic methods
e) Autoloader
f) Obsługa błędów i wyjątków
g) PDO - interface komunikacji z bazami danych
h) Omówienie biblioteki standardowej PHP
i) Omówienie rozszerzenia SPL
j) Standardy PSR
k) Standardy kodowania PSR-1 i PSR-2
l) Composer, standardy PSR-0 i PSR-4 i Packagist
Wiele już powiedziano i napisano o bezpiecznym kodowaniu.
My skupiamy się w prezentacji na bezpiecznym kodowaniu w języku C na podstawie realnych podatności znalezionych w znanych programach i bibliotekach oraz kernelu Linuxa.
Wprowadzenie do Reactive Extensions (RX) dla .NETMaciej Zbrzezny
Prezentacja przedstawiona na spotkaniu Łódzkiej Grupy Profesjonalistów IT & .NET, pt. "Wprowadzenie do Reactive Extensions (RX) dla .NET"
Czy zdarzyło Ci się tworzyć aplikacje, które wykorzystywały wywołania asynchroniczne? Czy, wywołania asynchroniczne sprawiły problemy? Czy wolałbyś otrzymywać dane zamiast o każdą daną się dopraszać? Czy znasz LINQ i nie zawahasz się go użyć w szerszym zakresie?
Jeżeli odpowiedź na większość z postawionych tu pytań jest twierdząca to powinieneś poznać bliżej Reactive Extensions.
Reactive Extensions (Rx) to zestaw bibliotek pozwalający na tworzenie asynchronicznych i bazujących na zdarzeniach aplikacji z wykorzystaniem obserwowalnych sekwencji i LINQ. Dzięki wykorzystaniu Rx programista tworzy asynchroniczne strumienie danych przy użyciu obserwowalnych list (Observables), odpytuje te asynchroniczne strumienie z wykorzystaniem LINQ i ma możliwość parametryzowania wielowątkowości z wykorzystaniem mechanizmu Schedulers.
Czyli w uproszczeniu: Rx = Observables + LINQ + Schedulers.
Introduction to Hadoop Map Reduce, Pig, Hive and HBase technologies.
Workshop deck prepared and presented on May 30th 2015 by Radosław Stankiewicz.
During that day participants had also possibility to go through prepared tutorials and test their analysis on real cluster.
Lexical scope, function vs. block scope, hoisting, scope closuresBrainhub
As presented at DevDuck #1 - JavaScript meetup for developers (www.devduck.pl)
Prezentacja z #1 spotkania DevDuck'a w Gliwicach (www.devduck.pl), spotkania mającego na celu poszerzanie wiedzy i wymianę doświadczeń z zakresu szeroko pojętego JS'a, a w szczególności Node.js/React.js i im pochodnych kończących się na ".js" :).
----
Spotkanie odbyło się w Gliwicach w siedzibie Brainhub (www.brainhub.eu)
W ostatnich latach TypeScript bez wątpienia coraz częściej staje się standardowym narzędziem w JavaScriptowych środowiskach. Pomaga wyłapać wiele błędów nim aplikacja zostanie uruchomiona, ale niestety samo jego użycie w projekcie nie jest panaceum na wszystkie tego typu błędy. Dlatego też podczas prezentacji przyjrzymy się technikom, które pozwalają zaprojektować kod, który prowadzi programistów za rączkę do świata w którym błędy w trybie runtime są rzadkością.
Powłoka systemu Linux. Bash, awk, sed, grep, itp.
Jak sprawnie poruszać się w Bashu. Sztuczki i kruczki.
Opis najczęściej używanych komend.
Oneliners - jednolinijkowce i proste skrypty.
In Polish.
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?The Software House
Wojciech Wójcik: W temacie monitorowania systemów IT powiedziano już oceany słów na niezliczonych prezentacjach. Przedstawię wam jednak opowieść o mitologicznym Prometheuszu. Opowieść, która mogłaby konkurować z Grą o tron, a Koronę Królów zjadłaby na przystawkę. W jej trakcie zdradzę wam sekrety monitorowania Kubernetes, ale i nie tylko. Miejcie jednak na uwadze, że nie wszystkie potyczki się wygrywa – dzięki czemu zaszczycę was też możliwością wysłuchania ciekawych historii o fuckupach.
Confitura 2018 - Sekretne życie jobów SparkowychMarcin Jasiński
Apache Spark to coraz bardziej popularny framework do tworzenia przetwarzań Big Data. Gdy wywalają się executory, zwiększamy ilość pamięci. Gdy job wykonuje się zbyt wolno, zwiększamy ilość executorów. Zwiększenie ilości zasobów to żadna optymalizacja i z czasem nasz klaster Hadoop jest w pełni utylizowany i nie można uruchamiać kolejnych przetwarzań. A przecież da się inaczej! Klaster Hadoop w Allegro to setki jobów uruchomionych jednocześnie, z czego większość to joby Sparkowe. Opowiemy historię kilku z nich i przemiany, które przeszły. W tym najbardziej spektakularną: od 2500 do 240GB RAM.
Niezależnie od używanego języka programowania, korzystając z liczb zmiennoprzecinkowych można natknąć się na wiele pułapek. Dlatego warto posiąść podstawową wiedzę związaną z tymi typami danych oraz trzymać się reguł, które pozwolą uniknąć niemiłych niespodzianek podczas programowania obliczeń.
Wiele już powiedziano i napisano o bezpiecznym kodowaniu.
My skupiamy się w prezentacji na bezpiecznym kodowaniu w języku C na podstawie realnych podatności znalezionych w znanych programach i bibliotekach oraz kernelu Linuxa.
Wprowadzenie do Reactive Extensions (RX) dla .NETMaciej Zbrzezny
Prezentacja przedstawiona na spotkaniu Łódzkiej Grupy Profesjonalistów IT & .NET, pt. "Wprowadzenie do Reactive Extensions (RX) dla .NET"
Czy zdarzyło Ci się tworzyć aplikacje, które wykorzystywały wywołania asynchroniczne? Czy, wywołania asynchroniczne sprawiły problemy? Czy wolałbyś otrzymywać dane zamiast o każdą daną się dopraszać? Czy znasz LINQ i nie zawahasz się go użyć w szerszym zakresie?
Jeżeli odpowiedź na większość z postawionych tu pytań jest twierdząca to powinieneś poznać bliżej Reactive Extensions.
Reactive Extensions (Rx) to zestaw bibliotek pozwalający na tworzenie asynchronicznych i bazujących na zdarzeniach aplikacji z wykorzystaniem obserwowalnych sekwencji i LINQ. Dzięki wykorzystaniu Rx programista tworzy asynchroniczne strumienie danych przy użyciu obserwowalnych list (Observables), odpytuje te asynchroniczne strumienie z wykorzystaniem LINQ i ma możliwość parametryzowania wielowątkowości z wykorzystaniem mechanizmu Schedulers.
Czyli w uproszczeniu: Rx = Observables + LINQ + Schedulers.
Introduction to Hadoop Map Reduce, Pig, Hive and HBase technologies.
Workshop deck prepared and presented on May 30th 2015 by Radosław Stankiewicz.
During that day participants had also possibility to go through prepared tutorials and test their analysis on real cluster.
Lexical scope, function vs. block scope, hoisting, scope closuresBrainhub
As presented at DevDuck #1 - JavaScript meetup for developers (www.devduck.pl)
Prezentacja z #1 spotkania DevDuck'a w Gliwicach (www.devduck.pl), spotkania mającego na celu poszerzanie wiedzy i wymianę doświadczeń z zakresu szeroko pojętego JS'a, a w szczególności Node.js/React.js i im pochodnych kończących się na ".js" :).
----
Spotkanie odbyło się w Gliwicach w siedzibie Brainhub (www.brainhub.eu)
W ostatnich latach TypeScript bez wątpienia coraz częściej staje się standardowym narzędziem w JavaScriptowych środowiskach. Pomaga wyłapać wiele błędów nim aplikacja zostanie uruchomiona, ale niestety samo jego użycie w projekcie nie jest panaceum na wszystkie tego typu błędy. Dlatego też podczas prezentacji przyjrzymy się technikom, które pozwalają zaprojektować kod, który prowadzi programistów za rączkę do świata w którym błędy w trybie runtime są rzadkością.
Powłoka systemu Linux. Bash, awk, sed, grep, itp.
Jak sprawnie poruszać się w Bashu. Sztuczki i kruczki.
Opis najczęściej używanych komend.
Oneliners - jednolinijkowce i proste skrypty.
In Polish.
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?The Software House
Wojciech Wójcik: W temacie monitorowania systemów IT powiedziano już oceany słów na niezliczonych prezentacjach. Przedstawię wam jednak opowieść o mitologicznym Prometheuszu. Opowieść, która mogłaby konkurować z Grą o tron, a Koronę Królów zjadłaby na przystawkę. W jej trakcie zdradzę wam sekrety monitorowania Kubernetes, ale i nie tylko. Miejcie jednak na uwadze, że nie wszystkie potyczki się wygrywa – dzięki czemu zaszczycę was też możliwością wysłuchania ciekawych historii o fuckupach.
Confitura 2018 - Sekretne życie jobów SparkowychMarcin Jasiński
Apache Spark to coraz bardziej popularny framework do tworzenia przetwarzań Big Data. Gdy wywalają się executory, zwiększamy ilość pamięci. Gdy job wykonuje się zbyt wolno, zwiększamy ilość executorów. Zwiększenie ilości zasobów to żadna optymalizacja i z czasem nasz klaster Hadoop jest w pełni utylizowany i nie można uruchamiać kolejnych przetwarzań. A przecież da się inaczej! Klaster Hadoop w Allegro to setki jobów uruchomionych jednocześnie, z czego większość to joby Sparkowe. Opowiemy historię kilku z nich i przemiany, które przeszły. W tym najbardziej spektakularną: od 2500 do 240GB RAM.
Niezależnie od używanego języka programowania, korzystając z liczb zmiennoprzecinkowych można natknąć się na wiele pułapek. Dlatego warto posiąść podstawową wiedzę związaną z tymi typami danych oraz trzymać się reguł, które pozwolą uniknąć niemiłych niespodzianek podczas programowania obliczeń.
4Developers 2015: Property-based testing w języku Scala - Paweł GrajewskiPROIDEA
Paweł Grajewski
Language: Polish
Techniki Test-driven development (TDD) oraz Behavior-driven development (BDD) są dziś powszechnie stosowaną metodą poprawy jakości wytwarzanego oprogramowania. Obie zakładają w swej konstrukcji budowę zestawu przypadków testowych, ale stworzenie poprawnego i kompletnego zestawu takich przypadków jest nie lada sztuką. Często nie jesteśmy w stanie przewidzieć wszystkich sytuacji brzegowych, w skutek czego nie możemy być pewni na ile w rzeczywistości poprawny jest kod naszej aplikacji
Z pomocą może przyjść nam technika property-based testing, która w miejsce testowania poprawności działania systemu dla skończonego zbioru przypadków testowych wprowadza koncepcję “badania jego właściwości”. Idea ta zrodziła się już wiele lat temu, a dzisiaj znowu wraca do łask wraz ze wzrostem popularności funkcyjnych języków programowania. Zaufało jej już wiele dużych, złożonych projektów m.in. projekt kompilatora języka Scala oraz framework Akka. Prawidłowo zastosowana jest w stanie zapewnić wymierne korzyści - zwiększyć pokrycie kodu testami, ale przede wszystkim uchronić nas przed wieloma typowymi niedopatrzeniami.
Prezentacja przybliży koncepcję property-based testing oraz zademonstruje tę technikę na przykładach.
Prelekcja skierowana jest do osób które niedawno zaczęły swoją przygodę z Pythonem i zainteresowane są tym jak działa wewnątrz interpreter Pythona. Podczas wykłady dowiesz się jak interpreter przetwarza pliki .py, co to jest bytecode, czym się różni .pyc od .pyo oraz czy da się uruchomić program i ukryć jego kod źródłowy. Na zakończenie autor wymieni i krótko scharakteryzuje inne implementacje oraz pochodne języka Python.
Hierarchia pamięci w systemach komputerowych.Semihalf
Pamięć nie jest płaska! Wręcz przeciwnie – dostęp do pamięci operacyjnej jest nierównomierny, a tworzenie wydajnego oprogramowania polega na umiejętnym wykorzystaniu podsystemu pamięci wraz z całą jego wielopoziomową hierarchią.
Z prezentacji dowiesz się:
Jaki wpływ na wydajność programów ma pamięć operacyjna?
Jak przyspieszyć działanie programów?
Kiedy korzystać z pamięci RAM lub Cache?
Pamięć nie jest płaska! Wręcz przeciwnie – dostęp do pamięci operacyjnej jest nierównomierny, a tworzenie wydajnego oprogramowania polega na umiejętnym wykorzystaniu podsystemu pamięci wraz z całą jego wielopoziomową hierarchią.
Prezentacja miała miejsce 29 kwietnia 2015, w ramach odbywających się barcampów organizowanych przez Semihalf.
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemSages
Introduction to Hadoop Map Reduce, Pig, Hive and Ambari technologies.
Workshop deck prepared and presented on September 5th 2015 by Radosław Stankiewicz.
During that the day participants had also the possibility to go through prepared tutorials and test their analysis on real cluster.
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseSages
Szybkie wprowadzenie do technologii Pig i Hive z ekosystemu Hadoop. Prezentacja wykonana w ramach warsztatów Codepot w dniu 29.08.2015. Prezentacja wykonana przez Radosława Stankiewicza oraz Bartłomieja Tartanusa.
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
11. Uruchomienie środowiska wirtualnego
¤ W systemach Linux i OS X / macOS
$ source ~/venv/szybkistart/bin/activate
¤ W systemach Windows
> C:venvszybkistartScriptsactivate
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
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ą')
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
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
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
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).
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]
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.
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ą.
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%