Python: Efektívny lovec / 8. časť

0

Regulárne výrazy

Regulárne výrazy (Regular Expressions – RegEx) sú sekvencie znakov, ktoré tvoria tzv. vyhľadávací vzor (search pattern). Vyhľadávací vzor sa používa na vyhľadávanie v rámci reťazcov, pričom jeho funkcionalita je definovaná v module re. Pri nájdení zhody je vygenerovaný tzv. objekt zhody (match object), ktorý obsahuje detailné informácie o nájdenej zhode. Medzi často používané funkcie modulu re patria napr. tieto:

search()  
V prípade zhody vráti objekt zhody

findall() 
Vráti záznam (typu list) všetkých zhôd

split()   
Vráti záznam s časťami reťazca, ktoré boli rozdelené zhodným znakom (zhodnými znakmi)

sub()     
Nahradí zhodné časti reťazca novým reťazcom

 

Metaznaky, špeciálne sekvencie a špecifikátory

Na zápis regulárnych výrazov môžeme využívať širokú škálu tzv. metaznakov a špeciálnych sekvencií, ktoré majú nasledujúci špeciálny význam (tab. 1).

Pri zápise množiny znakov [ ] môžeme vy­užívať nasledujúce špecifikátory:

abc, a-c 123, 1-3 
Niektorý z uvedených znakov (čísiel), resp. zo znakov (z čísel) v zadanom intervale

^abc     
Hocijaký znak okrem uvedených znakov

[1-3][8-9]        
Dvojciferné číslo s číslicami
v zadaných intervaloch

[a-zA-Z] 
Hocijaký znak – malé alebo veľké písmo

Lambda

Minimalistická anonymná funkcia lambda je mimoriadne jednoduchá funkcia s dvoma základnými vlastnosťami:

1. obsahuje jediný výraz,

2. môže mať ľubovoľný počet argumentov.

Jej základný tvar je:

lambda argumenty : výraz

Jednoduchý príklad použitia funkcie ­lambda je nasledujúci:

# definícia lambda funkcie realizujúcej súčet troch čísiel

sucet = lambda a,b,c : a+b+c

# definícia funkcie, ktorá obsahuje lambda funkciu realizujúcu násobenie čísla a číslom n

def nasobic(n):

    return lambda a : a*n

# list čísiel

cisla = [1,2,3]

# súčet čísiel s využitím lambda funkcie

print("Súčet {0}+{1}+{2}={3}".format(cisla[0],
cisla[1],cisla[2],

              sucet(cisla[0],cisla[1],cisla[2])))

# funkcia násobiaca čísla dvoma

nasobic_dvoma = nasobic(2)

# funkcia násobiaca čísla desiatimi

nasobic_desiatimi = nasobic(10)

# pre všetky čísla v zázname

for cislo in cisla:

   # násobenie čísiel v zázname dvoma a desiatimi

   print("{0}*2={1}".format(cislo,nasobic_dvoma(cislo)),

   ", {0}*10={1}".format(cislo,nasobic_desiatimi(cislo)))

Ako vidno na príklade, funkciu lambda môžeme efektívne použiť v rámci inej funkcie. V našom prípade ide o funkciu nasobic(). Tej odovzdávame argument, ktorý používa funkcia lambda, v podobe jedného z činiteľov násobenia. Takto môžeme pripraviť niekoľko rôznych funkcií (nasobic_dvoma, nasobic_desiatimi...), ktoré budú mať rovnakú zdrojovú šablónu.

[]

Množina znakov

\b, \B

Ak sú znaky na začiatku alebo na konci slova, ak znaky nie sú na začiatku ani na konci slova

\

Špeciálna sekvencia

\d, \D

Ak reťazec obsahuje/neobsahuje čísla

.

Hocijaký znak okrem znaku nový riadok

\s, \S

Ak reťazec obsahuje/neobsahuje biele miesta

^

Začína s...

\A

Začína s...

$

Končí s...

\Z

Končí s...

*

Žiadny alebo viac výskytov

\w, \W

Ak reťazec obsahuje/neobsahuje znaky slov = písmená od a do Z, čísla 0-9, podčiarkovník _

+

Jeden alebo viac výskytov

 

 

{}

Presný počet výskytov

 

 

|

Alebo

 

 

» tab. 1

PIP

PIP (Python Package Installer) je manažér balíčkov programovacieho jazyka Python. Balíčky obsahujú všetky súbory potrebné pre jednotlivé moduly. PIP pracuje veľmi ­podobne ako bežné manažéry balíčkov používané v rámci operačného systému. V prípade požiadavky na inštaláciu zadaných balíčkov automaticky rieši závislosti, čo znamená, že inštaláciu balíčka vykoná až vtedy, keď inštalácii nebráni žiadny nedostupný softvér.

Inštaláciu manažéra pip3, pomocou ktorého riešime inštaláciu balíčkov určených pre Python verzie 3, realizujeme príkazom:

sudo apt-get install python3-pip

Používanie PIP

Inštaláciu vybraného balíčka vykonáme príkazom:

pip3 install pygame

Na výpis zoznamu inštalovaných balíčkov použijeme príkaz:

pip3 list

Detailné informácie o nainštalovanom balíčku môžeme získať pomocou príkazu:

pip3 show pygame

Napríklad s týmto výstupom:

Name: pygame

Version: 1.9.6

Summary: Python Game Development

Home-page: https://www.pygame.org

Author: A community project.

Author-email: pygame@pygame.org

License: LGPL

Location: /home/marek/.local/lib/python3.6/site-packages

Requires:

Odstránenie nainštalovaného balíčka vykonáme takto:

pip3 uninstall pygame

PIP inštaluje balíčky prioritne z repozitára PyPI (Python Package Index – pypi.org). Ten je určený na distribúciu projektov (kolekcia súborov s prislúchajúcimi informáciami), tzv. vydaní (releases), ktoré sú konkrétnymi verziami projektov, a v neposlednom rade na distribúciu súborov (balíčkov). Okrem možnosti stiahnutia softvéru ponúka možnosť nahratia (uploadu) vlastných projektov Python.

Ukážka využitia modulu PyGame:

import sys,pygame,time

 

def koniec():

    pygame.quit()

    sys.exit()

    quit()

 

# čierne pozadie

black = (0,0,0)

 

# inicializácia pygame

pygame.init()

 

# veľkosť okna

size = width,height = 500,800

screen = pygame.display.set_mode(size)

 

# obrázok loptičky

ball = pygame.image.load("intro_ball.gif")

ballrect = ball.get_rect()

ballrect.top = 100

 

# prírastok polohy loptičky

m = [1,1]

 

# nekonečný cyklus

game_loop = True

while game_loop:

    for event in pygame.event.get():

        if (event.type == pygame.QUIT):

            game_loop = False; koniec()

        if (event.type == pygame.KEYDOWN):

            if (event.key == pygame.K_ESCAPE):

                game_loop = False; koniec()

    # zmena polohy loptičky           

    ballrect = ballrect.move(m)

    # detekcia okrajov okna

    if (ballrect.left < 0) or (ballrect.right > width):

        m[0] = -m[0]

    if (ballrect.top < 0) or (ballrect.bottom > height):

        m[1] = -m[1]

    # vyplnenie pozadia a vykreslenie loptičky

    screen.fill(black)

    screen.blit(ball,ballrect)

    pygame.display.flip()

    # pauza

    time.sleep(0.001)

Príklad č. 12 je upravená verzia vzorového príkladu, ktorý je uvedený na domovskej stránke balíčka PyGame (pygame.org) v jej dokumentačnej časti. Balíček PyGame nie je štandardná súčasť Pythonu, teda predtým, ako ho budeme chcieť používať, musíme si ho doinštalovať napr. pomocou tu uvedeného postupu.

JSON

Na zdôraznenie faktu, že programovací jazyk Python možno s výhodou využiť na prácu s databázami a ďalšími zdrojmi údajov, v krátkosti predstavíme formát JSON (JavaScript Object Notation). Formát JSON sme predstavili už dávno, a to v seriáli Programuje pre Android. Zopakujme si, že ide o jednoduchý textový formát, určený na ukladanie a výmenu údajov v otvorenej forme, pričom používa konvencie rodiny jazykov C. Údaje kóduje v tvare { názov : hodnota } (objekt, záznam, štruktúra, slovník, hašovacia tabuľka, indexovaný zoznam, asociatívne pole) alebo v tvare zoradeného zoznamu hodnôt (pole, vektor, zoznam, sekvencia).

Python disponuje modulom json, ktorý je určený na prácu s formátom JSON. Reťazce formátu JSON dokážeme do nášho programu načítať pomocou jednoduchej metódy loads(), ktorej výstupom je typ slovník (dict):

json_data = json.loads(json_file)

Naopak, pokiaľ chceme uložiť údaj typu slovník do formátu JSON, použijeme metódu dumps():

json_file = json.dumps(json_data)

Modul json podporuje prevod všetkých najpo­užívanejších typov Pythonu do formátu JSON, pričom sa aplikuje nasledujúca prevodná tabuľka:

Python

JSON

None

null

True

true

False

false

int, float

number

str

string

tuple, list

array

dict

object

 

 

Marek Sopko

Všetky autorove články

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať