Přináším vám výběr z novinek v Python 2.4, přestože je na světě již nějakou tu dobu. Čerpal jsem z Whats new in Python 2.4. Vybíral jsem témata, která by mohla zajímat hlavně přihlášené ve zdejším kurzu, tedy žádné „složité“ věci.
Množiny
Přestože množiny byly již i v předchozí verzi (jako samostatný modul), nyní byly přidány přímo do vestavěných funkcí. Množiny jsou velmi podobné seznamům, určitý prvek se však v nich může vyskytovat jen jednou, a poskytují funkce, které obvykle od množin očekáváme: průnik, rozdíl, sloučení, apod.
>>> a = set('abracadabra') # vytvoří množinu z řetězce
>>> 'z' in a # test na existenci prvku
False
>>> a # samotná množina
set(['a', 'r', 'b', 'c', 'd'])
>>> ''.join(a) # převod zpět na řetězec
'arbcd'
>>> b = set('alacazam') # vytvoří druhou množinu
>>> a - b # písmena, která jsou v a, ale ne v b
set(['r', 'd', 'b'])
>>> a | b # sloučení množin
set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])
>>> a & b # průnik množin
set(['a', 'c'])
>>> a ^ b # doplněk průniku množin
set(['r', 'd', 'b', 'm', 'z', 'l'])
>>> a.add('z') # přidá nový prvek
>>> a.update('wxy') # přidá několik nových prvků
>>> a
set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'x', 'z'])
>>> a.remove('x') # odebere jeden prvek
>>> a
set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'z'])
rsplit()
Řetězce získaly další metodu rsplit(), která funguje jako split(), ale pracuje od konce řetězce (r jako right).
# 1 jako volitelný argument znamená, že se má najít jen jeden (první) výskyt „.“
>>> 'www.python.org'.split('.', 1)
['www', 'python.org']
'www.python.org'.rsplit('.', 1)
['www.python', 'org']
Vylepšené sort() u seznamů
Byly přidány tři pojmenované argumenty cmp, key a reverse k metodě seznamů sort(). Seznamy se tak dají snadněji řadit:
>>> L = ['A', 'b', 'c', 'D']
>>> L.sort() # řazení case-sensitive (závisí na velikosti písmen)
>>> L
['A', 'D', 'b', 'c']
>>> # použití argumentu key
>>> L.sort(key=lambda x: x.lower())
>>> L
['A', 'b', 'c', 'D']
Argument key je možné ještě zjednodušit:
>>> L.sort(key=str.lower)
>>> L
['A', 'b', 'c', 'D']
key je pojmenovaný argument, lower je metoda seznamů, která převádí vše na malá písmena (zde výjimečně bez závorek ()). Kde se ale vzalo to str? To je typ řetězců,
>>> str
<type 'str'>
který se dá získat také takto (pokud zapomenete to „str“):
>>> type("")
<type 'str'>
sorted()
Přibyla nová vestavěná funkce sorted(). Funkce sort() totiž mnoho začátečníků mate, protože seřazený seznam nevrací, ale řadí na místě:
# špatně
>>> S=["z", "a", "d"]
>>> S1=S.sort()
>>> print S1
None #
# správně:
>>> S=["z", "a", "d"]
>>> S.sort()
>>> S
['a', 'd', 'z']
Funkce sorted() tuto nepříjemnost odstraňuje – výsledek vrací. Pozor, není to metoda, ale funkce:
>>> S1=sorted(S)
>>> print S1
["a","d","z"]
None
None je nyní konstanta. Nelze ji již přepsat, jako dříve:
>>> None="nic"
SyntaxError: assignment to None
Optimalizace
Optimalizace mnoha vnitřních algoritmů přinesla zvýšení rychlosti o 5 % oproti Python 2.3 a o 35 % oproti Python 2.2. Měřeno benchmarkem pystone. Zrychlení vašich vlastních aplikací může být větší nebo menší.