Promnné. [citováno z

Podobné dokumenty
Každý datový objekt Pythonu má minimáln ti vlastnosti. Identitu, datový typ a hodnotu.

Programovací jazyk Python. Objektov orientovaný. [citováno z

DUM. Databáze - úvod

Konzistentnost. Pro a proti replikaci. Vztah ke škálovatelnosti (1)

Zbytky zákaznického materiálu

Základy MIDI komunikace

Cykly Intermezzo. FOR cyklus

VYTVÁENÍ VÝBROVÝCH DOTAZ

Instalace multiimportu

1 Píklady popisu typických konstrukcí

KUSOVNÍK Zásady vyplování

Datový typ POLE. Jednorozmrné pole - vektor

IMPORT DAT Z TABULEK MICROSOFT EXCEL

Objektov orientovaný pístup

Pedání smny. Popis systémového protokolování. Autor: Ing. Jaroslav Halva V Plzni Strana 1/6

MATEMATIKA MATEMATIKA

27. asové, kmitotové a kódové dlení (TDM, FDM, CDM). Funkce a poslání úzkopásmových a širokopásmových sítí.

Vyhodnocování úspšnosti

Aditivní barevný model RGB pidává na erné stínítko svtla 3 barev a tak skládá veškeré barvy. Pi použití všech svtel souasn tak vytvoí bílou.

Vysoká škola báská Technická univerzita Ostrava Institut geoinformatiky. Analýza dojíždní z dotazníkového šetení v MSK. Semestrální projekt

Univerzální ovlada LP20 DÁLKOVÝ OVLADA S MOŽNOSTÍ UENÍ SE OD PVODNÍCH OVLADA

ipové karty, standardy PKCS#11, PKCS#15

Základní pojmy klasického sudoku hlavolamu. Techniky odkrývání bunk. Technika Naked Single. Technika Hidden Single

Komunikace pod vodou

Rzné algoritmy mají rznou složitost

Správa obsahu ízené dokumentace v aplikaci SPM Vema

OCR (optical character recognition) - rozpoznávání textu v obraze

UŽIVATELSKY DEFINOVANÉ FUNKCE

4. Lineární diferenciální rovnice rovnice 1. ádu

ZÁKLADNÍ INFORMACE O LÉB INFORMATIKY

1. Signatura datového typu

Lepení plexi v bonici pružnými lepidly

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Prezentaní program PowerPoint

"DLK 642-Lite Konfigurator" Programové vybavení pro ídicí jednotku DLK642-Lite Instalaní a programovací návod verze Aktualizace 3.11.

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Pídavný modul rozvaha lze vyvolat z hlavní nabídky po stisku tlaítka Výkazy / pídavné moduly.

ÚSTAV AUTOMATIZACE A MICÍ TECHNIKY Fakulta elektrotechniky a komunikaních technologií Vysoké uení technické v Brn

Efektivní uení. Žádná zpráva dobrá zpráva. (Structured training) Schopnost pracovat nezávisí od IQ. Marc Gold

GYMNÁZIUM CHEB SEMINÁRNÍ PRÁCE

Informace pro autory píspvk na konferenci ICTM 2007

Dodatek dokumentace KEO-Moderní kancelá verze 7.40

L I C H O B Ž N Í K (2 HODINY) ? Co to vlastn lichobžník je? Podívej se napíklad na následující obrázky:

4 - Architektura poítae a základní principy jeho innosti

PÍRUKA A NÁVODY PRO ÚELY: - RUTINNÍ PRÁCE S DATY

Autocad ( zdroj )

1 KOMBINATORIKA, KLASICKÁ PRAVDPODOBNOST

Bezpenost dtí v okolí škol z pohledu bezpenostního auditora

Algoritmizace prostorových úloh

ZÁSADY OCHRANY OSOBNÍCH ÚDAJ. po jakou dobu budeme Vaše osobní údaje zpracovávat;

Ing. Jaroslav Halva. UDS Fakturace

Algoritmizace prostorových úloh

Postup pi importu. Zdroje: ElkoValenta, HP tronic. A. export vytvoených kategorií

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Zpráva k semestrální práci z pedmtu 36PT programovací techniky

5 Přehled operátorů, příkazy, přetypování

Digitální pekreslení leteckého snímku

VLASTNOSTI KOMPONENT MICÍHO ETZCE -ÍSLICOVÁÁST

X36SIN: Softwarové inženýrstv. enýrství. Notace modelu jednání (UML) Chyby v modelu jednání. Píklad: e-obchod. úvodní studie

Splajny a metoda nejmenších tverc

Pravdpodobnost výskytu náhodné veliiny na njakém intervalu urujeme na základ tchto vztah: f(x)

ORACLE MANUFACTURING SCHEDULING ORACLE HLAVNÍ PLÁNOVÁNÍ VÝROBY

Obsah Úvod...2 Slovníek pojm Popis instalace...3 Nároky na hardware a software...3 Instalace a spouštní...3 Vstupní soubory

GYMNÁZIUM CHEB. SEMINÁRNÍ PRÁCE Grafy funkcí sbírka ešených úloh. Radek HÁJEK, 8.A Radka JIROUŠKOVÁ, 8.A Cheb, 2006 Petr NEJTEK, 8.

Ochrana osobních údaj ve spole nosti Phoenix Contact

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

SHOPTRONIC SERVIS - ZAKÁZKA

Efektivní hodnota proudu a nap tí

EXPORT DAT TABULEK V MÍŽKÁCH HROMADNÉHO PROHLÍŽENÍ

DRUHY ROVNOBŽNÍK A JEJICH VLASTNOSTI 1 HODINA

! " #!! $%! & '( &! & )% *! * "# $%&

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Jak psát seminární a maturitní práce Manuál pro obory KS, MP

Zimní pikrmování pták

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

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ů

II. Jak se p?ihlásit do diskusní skupiny

Soudní exekutor JUDr. Vít Novozámský Bratislavská 40/ Brno k.j. 056 EX 9379/10-46

= = 25

ESKÝ JAZYK ESKÝ JAZYK

Role a integrace HR systém

2.1 Pokyny k otev eným úlohám. 2.2 Pokyny k uzav eným úlohám. Testový sešit neotvírejte, po kejte na pokyn!

Paměť počítače. alg2 1

Elektronický obchod pístroj ABB s.r.o., Divize Výrobky nízkého naptí ABB Group April 27, 2012 Slide 1

VYUŽITÍ MODULU EXCELENT PRO MANAŽERSKÉ ANALÝZY V APLIKACÍCH VEMA

Programovací jazyky, syntaxe, sémantika, zpsoby popisu

GPRS, PPP a MS-DOS. Autor: František Ryšánek <rysanek@fccps.cz> FCC Prmyslové systémy s.r.o.

Tabulkový procesor Excel

Postup efektování jednotlivých part

aj.) a ekonomiky firmy v jejich celistvosti. A tímto nástrojem jsou práv vhodn sestavené manažerské simulátory 1.

Pomocný databázový systém pro správu studijní agendy. Ludk Navrátil

Registra ní íslo ÚP: A. Identifika ní údaje zam stnavatele, právní forma a p edm t podnikání nebo innosti: Název zam stnavatele 1) :

10. EŠENÍ INDIVIDUÁLNÍCH PRACOVNPRÁVNÍCH SPOR

1 Sémantika a její vztah k syntaxi

Algoritmizace a programování

Obr. 1: Elektromagnetická vlna

Vaše uživatelský manuál MEDION GOPAL NAVIGATOR 2.3 ME

2 ELEMENTÁRNÍ POET PRAVDPODOBNOSTI. as ke studiu kapitoly: 70 minut. Cíl: Po prostudování této kapitoly budete umt

Párování. Nápovdu k ostatním modulm naleznete v "Pehledu nápovd pro Apollo".

Transkript:

Promnné [citováno z http://wraith.iglu.cz/python/index.php] Abychom s datovým objektem mohli v programu njak rozumn pracovat, potebujeme se na nj njakým zpsobem odkázat. Potebujeme Pythonu íct, aby napíklad seetl tady tohle íslo (datový objekt) s tady tím (jiný datový objekt) a nebo aby tenhle text (datový objekt) vložil do tohoto seznamu (datový objekt). A pesn k tomuto slouží v Pythonu promnné, jsou to odkazy na datové objekty v pamti poítae. Tak napíklad, datový typ je pevn svázaný s hodnotou a ne promnnou. Promnná jednou mže ukazovat na objekt s datovým typem int a za chvíli na objekt s datovým typem float. To jest promnná v Pythonu mže jednu chvíli jakoby obsahovat celé íslo 10 a za chvíli desetinné íslo 10.0 a takto mže obsahovat (technicky pesnji ukazovat na) cokoli. Vypadá to logicky a pirozen, lovk si íká, tak by to snad mlo být všude, ne? A ono ne. V jazyce C a ad dalších jazyk to není možné. V nich je datový typ svázaný s promnnou a promnná s pamtí. Pi vytvoení promnné se musí uvést, jaký má datový typ a pro nj se v pamti vyhradí potebné místo. Do této promnné (do onoho místa v pamti) je pak možno vkládat jen hodnoty píslušného typu (pamové velikosti). To jest, když vytvoíte promnnou s datovým typem int, mžete do ní piadit hodnotu 10 nebo 1000, ale nikdy 10.1. Lze to rznými zpsoby obcházet petypováním, ale to si s sebou zase nese další specifické problémy, které v Pythonu nemusíme ešit. Python je za nás bezpen a spolehliv eší sám. Je jasné, že tohle chování Pythonu je pirozenjší, díky tomu je v nm programování jednodušší, rychlejší a k zaáteníkm pátelštjší. Python je abstraktnjší a bližší lidskému uvažování než jazyk C a jazyky jemu podobné. Není to zadarmo. Python za tyto výhodné vlastnosti platí o nco vtšími pamovými nároky a menší rychlostí práce s promnnými. Po teoretickém úvodu jedna malá ukázka, aby si každý dovedl pedstavit, jak se s promnnými pracuje. Lehce upravený program Hello World. >>> prom1 = "Hello" >>> prom2 = "World!" >>> print prom1, prom2 Hello World!

Program ukazuje práci se dvma promnnými, které jsou nazvány prom1 a prom2. Znaménko = je operátor piazení. Práv ten zpsobuje piazení odkazu na datový objekt do promnné. Promnné si mžeme nazvat v rámci daných pravidel libovoln. Pravidla pro tvorbu identifikátor jsou jednoduchá: Identifikátor Smí se skládat jen z velkých a malých písmen anglické abecedy (tedy bez diakritiky), ísel a podržítek. Jako první znak nesmí být íslo, tedy nap 1prom je zakázáno. Identifikátor nesmí kolidovat s klíovými slovy Pythonu. Tady napíklad název promnné print je zakázán, protože print je název píkazu Pythonu a tedy jedno z jeho klíových slov. Tato pravidla jsou povinná, vyžaduje je Python a pi jejich nedodržení hlásí chybu. Jestli si te myslíte, že promnná je njaké jméno, které ukazuje na datový objekt, tak je to pravda, ale není to úpln pesné. Mohou být i bezejmenné promnné. Napíklad u seznamu se každá jeho položka odkazuje na njaký datový objekt. Seznam tedy není nic jiného, než posloupnost bezejmenných promnných. Jméno má pouze tato posloupnost jako taková. K položkám posloupnosti pistupujeme pes indexy. Datové objekty, které obsahují odkazy na jiné datové objekty, nazýváme kontejnery. Na jeden datový objekt mohou v Pythonu ukazovat klidn dv i více promnných. Staí piadit (operátorem =) jeden a ten samý datový objekt nkolika promnným. Pozor. Operátor piazení se chová rozdíln v pípad mnitelných a nemnitelných typ datových objekt. Jak to funguje u nemnitelných datových typ: >>> prom1 = 10 >>> prom2 = 10 >>> prom3 = prom2 >>> prom2 = 100 >>> prom3 = 10.0 >>> prom1 = prom3 Ukázka má šest píkaz, které vytváí a pracují s temi promnnými prom1, prom2, prom3 a temi datovými objekty 10, 100 a 10.0. Nyní popíšeme, co pesn tyto píkazy znamenají a dlají. 1. První píkaz zdánliv piazuje hodnotu 10 promnné prom1. Ve skutenosti ale Python v pamti poítae vytvoí datový objekt typu int, který má hodnotu 10 a promnnou prom1, která na tento datový objekt ukazuje. 2. Druhý píkaz vytváí promnnou prom2, která ukazuje na ten samý datový objekt typu int s hodnotou deset. To jest nevytváí se nový objekt a nyní máme dv promnné prom1 i prom2, které ukazují na jeden a ten samý objekt. Toto chování je obvyklé, ale v dokumentaci Pythonu

se píše, že není zaruené. Tedy mohou vzniknout i dva nemnitelné objekty se stejnou hodnotou, i když se tak bžn nedje. 3. Tetí píkaz znamená vytvo promnnou prom3, která bude ukazovat na ten samý objekt jako prom2. To znamená, že na náš datový objekt typu int s hodnotou 10, který je pamti jen jednou, ukazují již ti promnné. 4. tvrtý píkaz vytváí nový datový objekt typu int, tentokráte s hodnotou 100 a již existující promnné prom 2 piazuje odkaz na tento nový objekt. Promnné prom1 a prom3 i nadále odkazují na datový objekt typu int s hodnotou 10. 5. Pátý píkaz vytváí nový datový objekt typu float s hodnotou 10, a odkaz na nj piazuje promnné prom3. Zde je vidt, že nezáleží jen na hodnot datového objektu, ale i jeho typu. Pro typ float se proto vytváí nový datový objekt, i když tu již jeden objekt s hodnotou deset (ale typu int) existuje. 6. Co znamená šestý píkaz již urit víte sami. Jen bych upozornil na skutenost, že po tomto píkazu již žádná promnná neukazuje na datový objekt typu int a s hodnotou 10. To znamená, že s ním již nemžeme v našem programu pracovat, nemáme na nj odkaz. Tím pádem je tento objekt v pamti zbytený a Python ho z ní odstraní. (Z výkonnostních dvod to neudlá hned. Funguje to spíš tak, že Python as od asu prohlédne pam, a vyháže z ní datové objekty, na které se neodkazuje žádná promnná.) Jak to funguje u mnitelných datových typ: >>> prom1 = [] >>> prom2 = [] >>> prom3 = prom2 >>> prom1.append(1) >>> prom2.append(2) >>> prom3.append(3) 1. První píkaz vytváí datový objekt seznam (prázdný) a odkaz na nj piazuje promnné prom1. Ozname si tento seznam jako alfa. 2. Druhý píkaz vytváí nový datový objekt seznam (prázdný) a odkaz na nj piazuje promnné prom2. Ozname si tento seznam jako beta. Toto je ono zmiované rozdílné chování. V pípad mnitelných datových typ se vždy vytváí nový objekt, nesdílí se již existující, jako u nemnitelných typ. Toto chování je zaruené. Pokud chceme, aby dv promnné ukazovaly na stejný datový objekt, pak to lze provést jedin tak, jak to ukazuje tetí píkaz. 3. Tetí píkaz piazuje promnné prom3 odkaz na seznam beta, na který se už odkazuje prom2. 4. tvrtý píkaz do seznamu alfa pidává položku s hodnotou 1. Tedy, úpln exaktn eeno se vytváí nemnitelný objekt typu int s hodnotou 1 a odkaz na tento objekt se piazuje první volné položce seznamu. Seznam alfa te má literál [1], seznam beta má stále literál []. 5. Pátý píkaz do seznamu beta pidává položku s hodnotou 2. Tedy, exaktn eeno. Seznam alfa má literál [1] seznam beta má literál [2]. Z ponkud laického pohledu má prom1 hodnotu [1], prom2 má hodnotu [2] a prom3 také hodnotu [2]. Prom2 a prom3 totiž ukazují na jeden a ten samý datový objekt, seznam beta. 6. Šestý píkaz do seznamu beta pidává položku s hodnotou 3. Z laického pohledu prom1 stále má hodnotu [1], prom2 a prom3 mají hodnotu [2, 3]. prom1 neobsahuje hodnotu [1], ale odkaz na datový objekt seznam, jehož první položka má odkaz na datový objekt int s hodnotou 1. Dále víme, že prom2 a prom3 neobsahují hodnotu [2, 3], ale odkaz na druhý datový objekt seznam, jehož první položka se odkazuje na datový objekt int s hodnotou 2 a jehož druhá položka se odkazuje na datový objekt int s hodnotou 3. Když pracujeme s prom2, tak se mní i prom3. Promnné v Pythonu jsou prost odkazy na datové objekty.

Operátory a výrazy Operátory jsou rzná znaménka a klíová slova, pomocí kterých provádíme operace s datovými objekty. >>> 10 + 20 30 Operace soutu dvou ísel (datových objekt). Operátor je znaménko + (plus) a datové objekty 10 a 20 jsou operandy. To je jednoduché. Jaký bude výsledek operace záleží na datových typech operand. To proto, že pedchozí píklad se dá pepsat jako: >>> (10). add (20) 30 To jest na volání metody add () datového objektu 10, které pedáváme parametr datový objekt 20. Co se týe chování, mžeme oba píklady považovat za totožné. Ve skutenosti ale produkují rozdílný bajtový kód: >>> a = compile("(10). add (20)", "x", "exec") >>> b = compile("(10)+(20)", "x", "exec") >>> a.co_code 'd\x00\x00i\x00\x00d\x01\x00\x83\x01\x00\x01d\x02\x00s' >>> b.co_code 'd\x00\x00d\x01\x00\x17\x01d\x02\x00s' >>> import dis >>> dis.disassemble(a) 1 0 LOAD_CONST 0 (10) 3 LOAD_ATTR 0 ( add ) 6 LOAD_CONST 1 (20) 9 CALL_FUNCTION 1 12 POP_TOP 13 LOAD_CONST 2 (None) 16 RETURN_VALUE >>> dis.disassemble(b) 1 0 LOAD_CONST 0 (10) 3 LOAD_CONST 1 (20) 6 BINARY_ADD 7 POP_TOP 8 LOAD_CONST 2 (None) 11 RETURN_VALUE To co metoda add () nebo operátor provede a jaký vrátí výsledek je pln v kompetenci oné metody. Každý datový typ má tuto metodu naprogramovanou zvláš, takže u každého datového typu mže dlat nco jiného. Teba u etzc nedochází k jejich soutu ale spojení: >>> "a". add ("b") ab

>>> "a" + "b" ab Pro nkteré operace operátory neexistují. Místo nich jsou k dispozici vestavné funkce. Týká se to napíkad funkce abs(), která jakoby vrací absolutní hodnotu ísla. Ve skutenosti poze volá metodu abs () u pedaného datového objektu. Dotyná metoda mže dlat cokoli, ale u ísel skuten vrací jejich absolutní hodnotu. U jiných datových typ není podporována. Mžete si ale klidn vytvoit vlastní datový typ, který ji bude implementovat.