Vestavěné nástroje Pythonu

Podobné dokumenty
Chyby a výjimky. Chyba. Odkud se chyby berou? Kdo chyby opravuje? Co můžete dělat jako programátor? Dvě hlavní metody práce s chybami.

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Lekce 4. Kolekce. Kolekce - seznamy, N-tice a slovníky. C2184 Úvod do programování v Pythonu podzim 2016

Automatické testování softwaru. Testujte svůj kód! Předpoklady: Příklad: sum_digits() Možnost 1: Zkusíme funkci použít v konzoli Pythonu.

Python profesionálně: dynamické parametry, generátory, lambda funkce... with. Dynamické parametry

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Programování v Pythonu

Programování v Pythonu

Da D to t v o é v ty t py IB111: Datové typy

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Rozptylovací tabulky

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod Vítejte v Ruby 15. O autorovi 9 Poděkování 9

Kapitola 1: Úvod. Systém pro správu databáze (Database Management Systém DBMS) Účel databázových systémů

Ukládání a vyhledávání XML dat

Database systems. Normal forms

Maturitní otázky z předmětu PROGRAMOVÁNÍ

IB111 Úvod do programování skrze Python Přednáška 7

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Stručný obsah. K2118.indd :15:27

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

2. Začlenění HCI do životního cyklu software

Gymnázium Arabská. Hra Pexeso. ročníkový projekt předmět programování vyučující Tomáš Obdržálek autor Ondřej Novák školní rok 2013/2014

PA152. Implementace databázových systémů

Upozornění: Dne:

IB111 Úvod do programování skrze Python

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Tabulkový procesor. Základní rysy

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

materiál č. šablony/č. sady/č. materiálu: Autor:

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

Prostředí pro výuku vývoje PCI ovladačů do operačního systému GNU/Linux


OBJECT DEFINITION LANGUAGE. Jonáš Klimeš NDBI001 Dotazovací Jazyky I 2013

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Nemocnice. Prvotní analýza a plán projektu

O datových typech a jejich kontrole

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

Knihovna RecDBXLib ZÁZNAMY V DATABOXU TXV

ové služby na IPv6-only

IB111 Základy programování Radek Pelánek

5. Vyhledávání a řazení 1

POKROČILÉ POUŽITÍ DATABÁZÍ

Programování v Pythonu

P r e z e n t a c e p r o j e k t u. Přílohy k prezentaci

Spojový seznam. Jan Kybic.

Microsoft Excel 2010 pokročilé metody a funkce

Operátory ROLLUP a CUBE

Programování v C++ 2, 8. cvičení

Struktura a architektura počítačů (BI-SAP) 10

Verzování a publikace dat na webu za pomoci PostgreSQL

Spark SQL, Spark Streaming. Jan Hučín

Datové struktury 2: Rozptylovací tabulky

Vyhledávání v citační databázi Web of Science (WOS)

Popis ového API pro automatické registrace

Algoritmus. Algoritmus je posloupnost kroků, které jsou potřeba k vyřešení problému.

Marketingová komunikace. 2. soustředění. Mgr. Pavel Vávra Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph)

Programování v Pythonu

Spark SQL, Spark Streaming. Jan Hučín

Relační DB struktury sloužící k optimalizaci dotazů - indexy, clustery, indexem organizované tabulky

Obsah. Předmluva 13. O autorovi 15. Poděkování 16. O odborných korektorech 17. Úvod 19

boolean hasnext() Object next() void remove() Kolekce

Počítač jako prostředek řízení. Struktura a organizace počítače

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

Profilová část maturitní zkoušky 2017/2018

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Angličtina v matematických softwarech 2 Vypracovala: Mgr. Bronislava Kreuzingerová

národních domén.cz, ENUM domén a kontaktů pro tyto domény

ČVUT FEL X36PAA - Problémy a algoritmy. 5. úloha - Seznámení se se zvolenou pokročilou iterativní metodou na problému batohu

Třídění a vyhledávání Searching and sorting

8. Zpracování dotazu. J. Zendulka: Databázové systémy 8 Zpracování dotazu 1

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

J. Zendulka: Databázové systémy 8 Zpracování dotazu Podstata optimalizace zpracování dotazu

Jazyk C++ II. STL knihovna kontejnery část 2

Oracle XML DB. Tomáš Nykodým

Vyhledávání podle klíčových slov v relačních databázích. Dotazovací jazyky I ZS 2010/11 Karel Poledna

Instalace. Produkt je odzkoušen pro MS SQL server 2008 a Windows XP a Windows 7. Pro jiné verze SQL server a Windows nebyl testován.

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

Marketingová komunikace. 2. a 3. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK3PH (vm3aph)

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Architektura počítačů Agenda

Michal Krátký, Miroslav Beneš

Dolování v objektových datech. Ivana Rudolfová

Metodické listy pro předmět Aplikační software 1 (B_ASA)

MySQLi (objektově) Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze');

Ukázka knihy z internetového knihkupectví

XML A XWEB JAKO NÁSTROJE PRO TVORBU WEBOVÉHO SÍDLA S VELKÝM MNOŽSTVÍM KŘÍŽOVÝCH ODKAZŮ

NEWSLETTER systému PRACANT verze 4.0

Aplikační software 1 (B_ASA)

SQL - trigger, Databázové modelování

Skriptovací jazyky. Obsah

Registr sbírek výtvarného umění a Muzejní autority

Databázové systémy. Cvičení 6: SQL

Pointery II. Jan Hnilica Počítačové modelování 17

Datové typy a struktury

Transkript:

Vestavěné nástroje Pythonu Petr Pošík Katedra kybernetiky, FEL ČVUT v Praze OI, B4B33RPH Řešení problémů a hry, 2016 Credits David Beazley (http://www.dabeaz.com/): Builtin Superheros! PyData Chicago, 2016 https://www.youtube.com/watch?v=j6vsaskaj98 (https://www.youtube.com/watch?v=j6vsaskaj98) "For me, Python has always been a personal productivity tool. It solves the messy day to day problems that surround the actual problem you are trying to solve. Example: Data Munging (90/10 rule)" Tajné zbraně Pythonu Vestavěné nástroje: datové typy tuple, list, set, dict modul collections různé vestavěné operace Klíčové pro každého Python profesionála! Jsou všude! Vestavěné nástroje jsou vždy dostupné: ve všech verzích Pythonu na všech operačních systémech ve všech distribucích Pythonu Kromě Pythonu nepotřebujete nic instalovat! Jsou univerzální! Dynamické typování je zde velmi užitečné! Datové struktury můžete vytvářet prakticky z čehokoliv. A nemusíte o tom téměř přemýšlet. Vše prostě funguje.

Jsou rychlé! Vestavěné datové typy jsou rychlé z hlediska použití. Paměť je levná. Procesory jsou levné. Můj (a váš) čas je drahý! Vestavěné nástroje poskytují základní vybavení pro rychlé zkoumání nápadů, konstrukci prototypů a řešení neobvyklých problémů. Vždy můžete své řešení později optimalizovat (pokud to je třeba). Jsou zábavné! S vestavěnými nástroji Pythonu je radost pracovat! Odstiňují vás od otravných detailů (např. od správy paměti). Můžete se soustředit na to, co potřebujete vyřešit. Nicméně je třeba vědět, jaký nástroj kdy použít. Je to vše o vaší osobní produktivitě. Vestavěné kolekce (kontajnery) tuple (n tice) záznam (record); struktura přiřazení více hodnot najednou; k reprezentaci řádku v databázi >>> record = (val1, val2, val3) >>> a, b, c = record >>> val = record[n] Příbuzní: collections.namedtuple

In [1]: row = ('Jan', 'Novak', 'Sokolovska 27', 'Praha') row[2] Out[1]: 'Sokolovska 27' Není příliš čitelné mít v kódu natvrdo uvedeny všechny tyto indexy. Lepší je použít namedtuple, který nám umožní odkazovat se na jednotlivé prvky i jménem (a přitom se jinak chová stejně jako tuple). In [2]: from collections import namedtuple Person = namedtuple('person', 'fname lname street city') row = Person('Jan', 'Novak', 'Sokolovska 27', 'Praha') row.fname Out[2]: 'Jan' In [3]: row.street Out[3]: 'Sokolovska 27' list (seznam) proměnlivá (mutable) posloupnost, pole (array) vynucuje pořadí >>> items = [val1, val2,..., valn] >>> x = items[n] >>> items[n] = x >>> del items[n] >>> items.append(value) >>> items.sort() set (množina)

jedinečnost, testy existence prvku v kolekci >>> s = {val1, val2,..., valn} >>> s.add(val) >>> s.remove(val) >>> val in s In [4]: names = ['Jan', 'Adam', 'Eva', 'Jan'] names Out[4]: ['Jan', 'Adam', 'Eva', 'Jan'] In [5]: names = {'Jan', 'Adam', 'Eva', 'Jan'} names Out[5]: {'Adam', 'Eva', 'Jan'} dict (slovník) mapování, asociativní pole vyhledávací tabulky; rejstříky >>> d = {key1: val1, key2: val2, key3: val3} >>> val = d[key] >>> d[key] = val >>> del d[key] >>> key in d In [6]: prices = {'ACME': 94.23, 'YOW': 45.2} prices['acme'] Out[6]: 94.23

Counter (čítač) také známý jako: collections.counter počítání výskytů, četností; histogram >>> c = Counter(sequence) >>> c[key] += n >>> c.most_commont(n) In [7]: from collections import Counter c = Counter('xyzzy') c # A dictionary that counts the letters Out[7]: Counter({'x': 1, 'y': 2, 'z': 2}) In [8]: c['a'] += 10 c['b'] += 13 c Out[8]: Counter({'a': 10, 'b': 13, 'x': 1, 'y': 2, 'z': 2}) In [9]: c.most_common(2) Out[9]: [('b', 13), ('a', 10)] defaultdict (slovník s výchozími hodnotami) collections.defaultdict relace 1 ku n; seskupování

>>> d = defaultdict(list) >>> d[key].append(val) >>> values = d[key] >>> d = defaultdict(set) >>> d[key].add(val) >>> unique_values = d[key] In [10]: from collections import defaultdict d = defaultdict(list) d['spam'].append(42) d['blah'].append(13) d['spam'].append(10) d Out[10]: defaultdict(list, {'blah': [13], 'spam': [42, 10]}) Síla a supersíla! Iterace přes kolekce Cyklus: for item in container:... Varianty: for i, item in enumerate(container):... for item1, item2 in zip(container1, container2):... Agregační funkce: sum(container) min(container) max(container) any(container) all(container) Comprehensions List comprehensions: [expression for x in iterable if condition] Set comprehensions:

{expression for x in iterable if condition} Dict comprehensions: {key: val for key, val in iterable if condition} In [11]: nums = [1,2,3,4,5,6] squares = [] for x in nums: squares.append(x*x) squares Out[11]: [1, 4, 9, 16, 25, 36] In [12]: squares = [x*x for x in nums] squares Out[12]: [1, 4, 9, 16, 25, 36] Generátory Generátorový výraz: (expression for x in iterable if condition) Kombinovaný s agregační funkcí: Tip: sum(expression for x in iterable if condition) Generátory nám umožňují zpracovávat velká množství dat inkrementálně spoří obrovká množství paměti! In [13]: nums Out[13]: [1, 2, 3, 4, 5, 6] In [14]: squares = (x*x for x in nums) squares Out[14]: <generator object <genexpr> at 0x05AEF600>