abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 23:00 | Komunita

    V Tiraně proběhl letošní Linux App Summit (LAS) (Mastodon). Zatím nesestříhané videozáznamy přednášek jsou k dispozici na YouTube.

    Ladislav Hagara | Komentářů: 0
    včera 20:22 | Zajímavý článek

    Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.

    Ladislav Hagara | Komentářů: 0
    včera 15:22 | Zajímavý projekt

    Berkeley Humanoid Lite (Onshape, GitHub) je open source humanoidní robot. V amerických cenách jej lze sestavit do 5000 dolarů.

    Ladislav Hagara | Komentářů: 9
    25.4. 18:44 | Nová verze

    Jakub Jelínek oznámil vydání verze 15.1 (15.1.0) kolekce kompilátorů pro různé programovací jazyky GCC (GNU Compiler Collection). Jedná se o první stabilní verzi řady 15. Přehled změn, nových vlastností a oprav a aktualizovaná dokumentace na stránkách projektu. Některé zdrojové kódy, které bylo možné přeložit s předchozími verzemi GCC, bude nutné upravit.

    Ladislav Hagara | Komentářů: 1
    25.4. 03:55 | Komunita

    Byly vyhlášeny výsledky letošní volby vedoucího projektu Debian (DPL, Wikipedie). Staronovým vedoucím zůstává Andreas Tille.

    Ladislav Hagara | Komentářů: 27
    24.4. 16:55 | IT novinky

    Jason Citron končí jako CEO Discordu. Od pondělí 28. dubna nastupuje nový CEO Humam Sakhnini, bývalý CSO Activision Blizzard.

    Ladislav Hagara | Komentářů: 5
    24.4. 14:22 | Nasazení Linuxu

    Článek na Libre Arts představuje baskytarový multiefekt Anagram od společnosti Darkglass Electronics. S Linuxem uvnitř (licence, GitHub).

    Ladislav Hagara | Komentářů: 1
    24.4. 10:22 | IT novinky

    Městský soud v Praze vyhlásil rozsudek, který vyhověl žalobě novináře Jana Cibulky, který s podporou spolku IuRe (Iuridicum Remedium) požadoval omluvu od státu za to, že česká legislativa nařizuje operátorům uchovávat metadata o elektronické komunikaci. To je přitom v rozporu s právem. Stát se musí novináři omluvit a zaplatit náklady řízení. Především je ale součástí přelomové rozhodnutí o nelegálnosti shromažďování dat a o

    … více »
    Ladislav Hagara | Komentářů: 7
    24.4. 08:22 | IT novinky

    Americké technologické firmy Apple a Meta Platforms porušily pravidla na ochranu unijního trhu, uvedla včera Evropská komise (EK). Firmám proto vyměřila pokutu – Applu 500 milionů eur (12,5 miliardy Kč) a Metě 200 milionů eur (pět miliard Kč). Komise to oznámila v tiskové zprávě. Jde o první pokuty, které souvisejí s unijním nařízením o digitálních trzích (DMA). „Evropská komise zjistila, že Apple porušil povinnost vyplývající z nařízení

    … více »
    Ladislav Hagara | Komentářů: 43
    24.4. 08:11 | IT novinky

    Americká společnost OpenAI, která stojí za chatovacím robotem ChatGPT, by měla zájem o webový prohlížeč Chrome, pokud by jeho současný majitel, společnost Google, byl donucen ho prodat. Při slyšení u antimonopolního soudu ve Washingtonu to řekl šéf produktové divize ChatGPT Nick Turley.

    Ladislav Hagara | Komentářů: 0
    Jaký filesystém primárně používáte?
     (58%)
     (1%)
     (9%)
     (21%)
     (4%)
     (1%)
     (2%)
     (0%)
     (1%)
     (2%)
    Celkem 463 hlasů
     Komentářů: 18, poslední 17.4. 12:41
    Rozcestník

    Novinky v Python 2.5 - 3

    29. 12. 2006 | Michal Vyskočil | Programování | 4442×

    Před nějakým časem vyšla nová verze Pythonu. Pokud vás tento jazyk zajímá, pojďte si přečíst seznam změn, jako je nová hierarchie výjimek nebo třeba modul umožňující přímé volání knihovních funkcí z Pythonu.

    Výjimky v novém stylu

    Třídy výjimek mohou od nynějška být nového stylu (new-stylled, zavedeno v Pythonu 2.2) a ne klasické třídy, jako tomu bylo doposud. Současně s tím se všechny zabudované výjimky změnily na new-stylled. Rovněž došlo k přeskupení dědičností:

        BaseException       # Novinka v Pythonu 2.5
        |- KeyboardInterrupt
        |- SystemExit
        |- Exception
            |- (all other current built-in exceptions)
        

    To nyní lidem dovolí jednoduše zachytávat všechny výjimky, které ukazují na chybu v programu. Takové KeyboardInterrupt, nebo SystemExit nejsou chyby, přičemž je nutné je znovu vyvolat (jinak aplikace nepůjde shodit pomocí Ctlr+C, za což jistě dostaneme mnoho děkovných dopisů od spokojených uživatelů). Takže se muselo udělat něco jako:

        try:
            ...
        except (KeyboardInterrupt, SystemExit):
            raise
        except: 
            # Zalogování chyby ...  
            # Program pokračuje v běhu...
        

    Od nynějška stačí k dosažení stejného výsledku napsat except Exception. Python 3.0 by pak měl vyžadovat, aby byly všechny výjimky zděděny od BaseException nebo některého z jeho potomků. S tím souvisí i to, že řetězcové výjimky, které jsou dlouho označené jako deprecated, budou od nynějška generovat varování. Cílem je v některé z následujících verzí jejich podporu úplně odstranit.

    PEP 352, Required Superclass for Exceptions
    PEP sepsal Brett Cannon a Guido van Rossum; implementoval Brett Cannon.

    Nová speciální metoda __index__

    Vývojáři NumPy měli problém, který se dal vyřešit pouze přidáním další speciální metody __index__. Pokud používáme konstrukci [start:stop:step], hodnoty pro start, stop a step mohou být pouze celá nebo dlouhá celá čísla. NumPy definuje celou řadu specializovaných celočíselných typů, jako znaménkové a neznaménkové, 8, 16, 32 a 64 bitové, ale neexistoval způsob, jak je používat ve slice konstrukci.

    Není možné použít existující metodu __int__, protože ta byla použíta k převodu na typ int. Také by použití této metody mělo za následek skutečnost, že čísla s řádovou čárkou by se stala povolenými indexy, což je pochopitelně nežádoucí chování. Takže byla přidána nová speciální metoda __index__, která nemá žádné parametry a vrací celé číslo, které představuje index.

        class C:
            def __index__ (self):
                return self.value
        

    Podmínkou je, že návratová hodnota musí být integer nebo long integer. Pokud ne, dojde k výjimce TypeError.

    PEP 357, Allowing Any Object to be Used for Slicing
    PEP sepsal a implementoval Travis Oliphant

    Stručně o dalších změnách v jazyce

    Nová metoda slovníku __missing__

    Slovník dostal nový háček pro to, aby umožnil podtřídám vrátit nějakou výchozí hodnotu, pokud nebyl daný klíč nalezen. Pokud nebyl nalezen, je zavolána metoda __missing__(key). Tento háček implementuje nová třída dict v modulu collections. Následující příklad ukazuje definici slovníku, vracející nulu pro každou nenalezenou hodnotu:

    class zerodict (dict):
        def __missing__ (self, key):
            return 0
    
    >>> d = zerodict({1:1, 2:2})
    >>> print d[1], d[2]
    1 2
    >>> print d[3], d[4]
    0 0
        

    Metody řetězců partition() a rpartition()

    Jak 8bitové, tak Unicode řetězce mají dvě nové metody partition(sep) a rpartition(sep), které usnadňují některé často používané konstrukce. Metoda find(S) totiž často hledá index, který je použit pro vlastní rozdělení řetězce a získání částí před a za oddělovačem. Volání metody partition(sep) potom sloučí tyto dva kroky do jediného volání a vrací trojici (část před, oddělovač, část za). Pokud není oddělovač nalezen, celý řetězec je na prvním místě, zbylé dva jsou prázdné. Metoda rpartition(sep) také vrací trojici, ale prohledává řetězec od konce.

        >>> ('http://www.python.org').partition('://')
        ('http', '://', 'www.python.org')
        >>> ('file:/usr/share/doc/index.html').partition('://')
        ('file:/usr/share/doc/index.html', '', '')
        >>> (u'Subject: a quick question').partition(':')
        (u'Subject', u':', u' a quick question')
        >>> 'www.python.org'.rpartition('.')
        ('www.python', '.', 'org')
        >>> 'www.python.org'.rpartition(':')
        ('', '', 'www.python.org')
        >>> 'www.python.org'.partition('.')
        ('www', '.', 'python.org')
        >>> 'www.python.org'.rpartition('.')
        ('www.python', '.', 'org')
        

    (Implementoval Fredrik Lundh podle návrhů Raymonda Hettingera.)

    Vylepšení startswith() a endswith()

    Metody řetězců startswith() a endswith() mohou jako parametr mít i ntici

        def is_image_file (filename):
            return filename.endswith(('.gif', '.jpg', '.tiff'))
        

    (Implementoval Georg Brandl podle návrhů Toma Lynna.)

    Nový parametr funkcí min() a max()

    Zabudované funkce min() a max() mohou mít parametr key podobně jako řadící metoda sort(). Tím je funkce s jedním parametrem, která je volána pro každou hodnotu v seznamu. Funkce min()/max() vrací prvek s nejmenší/největší návratovou hodnotou této funkce.

    >>> L = ['medium', 'longest', 'short']
    >>> print max(L, key=len)
    longest
    >>> print max(L)
    short
    # Řetězec 'short' má lexikograficky největší hodnotu
    

    (Vložil Steven Bethard a Raymond Hettinger.)

    Nové zabudované funkce any() a all()

    Nové zabudované funkce any() a all(), vyhodnotí, zda iterátor obsahuje nějakou pravdivou nebo nepravdivou hodnotu. Funkce any() vrací True, pokud je nějaká hodnota vrácená iterátorem True. Funkce all() potom vrací True jen v případě, že všechny iterátory vrací True.

    (Navrhl Guido van Rossum, a implementoval Raymond Hettinger.)

    Hashe mohou být i dlouhé integery

    Výsledkem speciální metody __hash__() může být jak regulární integer, tak i jeho dlouhá varianta. V předchozích verzích mohlo být výsledkem této metody pouze standardní číslo, ale od nynější verze vrací zabudovaná funkce id() libovolné nenulové číslo, přičemž uživatelé často implementují metodu __hash__() jako return id(self).

    Výchozím kódováním je ASCII

    Pro všechny moduly je výchozím kódováním ASCII. Pokud bude modul obsahovat 8bitový literál a nebude mít explicitně deklarovaný typ, vyvolá se SyntaxError. V předchozí verzi to vyvolalo pouze varování. V PEP 263 je popis, jak deklarovat kódování. Pro latin1 stačí napsat na začátek zdrojového kódu:

    # -*- coding: latin1 -*-
     

    Nové varování UnicodeWarning

    Nové varování UnicodeWarning, které je vyvoláno v případě, že porovnáváte Unicode řetězec s 8bitovým, který není možné zkonvertovat do Unicode použitím výchozího ASCII kódování. Výsledek porovnání je False:

    >>> chr(128) == unichr(128)   # Nelze konvertovat chr(128) do Unicode
    __main__:1: UnicodeWarning: Unicode equal comparison failed
      to convert both arguments to Unicode - interpreting them 
      as being unequal
    False
    >>> chr(127) == unichr(127)   # chr(127) can be converted
    True
     

    Předtím tato konstrukce vyvolala výjimku UnicodeDecodeError, ale v této verzi jazyka by to mohlo způsobovat problém při přístupu do slovníku. Pokud použijete unichr(128) a chr(128) jako klíče, dostanete výjimku UnicodeDecodeError.

    (Implementoval Marc-André Lemburg.)

    Varování ImportWarning

    Jedna z nepříjemných chyb, kterou programátoři v Pythonu občas dělají, je, že zapomínají vložit __init__.py v adresáři balíčku. Ladění této chyby je nepříjemné a většinou vyžaduje spuštění interpreteru s parametrem -v k výpisu všech prohledávaných cest. Ve 2.5 se vygeneruje ImportWarning, pokud chcete importovat balíček bez __init__.py. Toto varování je ve výchozím nastavení potichu ignorováno, ale parametrem -Wd si jej můžete zobrazit.

    (Implementoval Thomas Wouters.)

    Drobná změna syntaxe

    Seznam bázových tříd v definici třídy může být prázdný. Tento kód je nyní v pořádku:

    class C():
        pass
    

    (Implementoval Brett Cannon.)

    Změny interaktivního interpreteru

    V interaktivním interpreteru byly quit a exit dlouhou dobu řetězce, které některým novým uživatelům pomáhaly s ukončením interpreteru.

    # Python 2.4
    >>> quit
    'Use Ctrl-D (i.e. EOF) to exit.'
    

    V Pythonu 2.5 jsou quit a exit objekty, které jednak produkují užitečný výstup, ale navíc jsou volatelné. Je tedy možné zapsat quit(), nebo exit() k ukončení interpreteru.

    # Python 2.5
    >>> quit
    'Use Ctrl-D (i.e. EOF) to exit.'
    

    (Implementoval Georg Brandl.)

    Interpret Pythonu může nyní přijímat standardní dlouhé parametry --help a --version a na Windows akceptuje /? pro zobrazení nápovědy.

    (Implementoval Georg Brandl.)

    Optimalizace interpreteru

    Mnoho optimalizací bylo vyvinuto na NeedForSpeed sprint, který se konal na Islandu, v hlavním městě Rejkjavík 21. až 28. května 2006. Byl zaměřen na vylepšení výkonu CPythonu a sponzorován společností EWT LLC spolu s CPP Games. Zde jsou některá vylepšení:

    • Nové typy set a frozen-set byly vytvořeny za pomoci slovníku. Ve verzi 2.5 byly upraveny přímo interní struktury pro implementaci množin a výsledkem je třikrát menší spotřeba paměti a v určitých případech dojde i ke zrychlení. (Implementoval Raymond Hettinger.)
    • Byla zlepšena rychlost některých operací v Unicode, jako třeba hledání podřetězců, dělení nebo kódování a dekódování mezi znakovými sadami. (Hledání podřetězců a dělení přidal Fredrik Lundh a Andrew Dalke na NeedForSpeed sprint. Znakové sady vylepšil Walter Dörwald a Martin von Löwis.)
    • Funkce long(str, base) je od nynějška rychlejší pro dlouhé řetězce, protože je počítáno menší množství průběřných výsledků. Špička je teď mezi osmisty až tisíci číslicemi, pro které je vylepšená funkce až šestkrát rychlejší. (Poslal Alan McIntyre a bylo přijato na NeedForSpeed sprint.)
    • Modul struct nyní překládá formátovací řetězce struktur do své interní reprezentace a ukládá je do mezipaměti, což zvýšilo rychlost o 20 %. (Přidal Bob Ippolito na NeedForSpeed sprint.)
    • Optimalizátor generátoru kódu nyní vyčísluje konstanty. Pokud programátor napíše a = 2 + 3, ve vygenerovaném kódu se objeví a = 5 (Navrhl a implementoval Raymond Hettinger.)
    • Pythonovské výjimky jsou teď new-stylled třídy, což je změna, která se výrazně projevila na zvýšení rychlosti. Zachycování výjimek je ve verzi 2.5 o 30 % rychlejší než ve 2.4. (Přidal Richard Jones, George Brandl a Sean Reifschneider na NeedForSpeed sprint.)

    Novinky nebo zlepšení standardní knihovny

    Navíc se v nové verzi objevily nebo podstatně zlepšily balíky

    • ctypes - umožňuje přímé volání funkcí ze sdílených knihoven

          import ctypes
      
          libc=ctypes.CDLL('libc.so.6')
          result=libc.printf("Hello ctypes\n")
          

      Na standardní výstup se vypíše řetězec a v result máme počet vypsaných znaků.

    • ElementTree - část knihovny Frederika Lundha ElementTree byla začleněna do balíčku xml.etree. Dostupné moduly jsou ElementTree, ElementPath, ElementInclude, včetně akcelerátoru cElementTree z ElementTree 1.2.6.
    • hashlib - nový modul hashlib napsaný Gregorgem P. Smithem nahrazuje md5 a sha moduly. Obsahuje další hashe (SHA-224, SHA-256, SHA-384, a SHA-512). Pokud je dostupné OpenSSL, modul používá algoritmy z ní.
    • sqlite3 - modul pysqlite, wrapper pro embedded databázi SQLite byl přidán do standardní knihovny pod názvem sqlite3.
    • wsgiref - Web Server Gateway Interface (WSGI) v1.0 je standardní rozhraní mezi webovými servery a webovými aplikacemi v Pythonu a je popsán v PEP 333. Tento balík je referenční implementace této specifikace.

    Závěr

    Naše krátké seznámení se s novinkami Pythonu 2.5 je u konce.

    Nejčtenější články posledního měsíce

    Týden na ITBiz: Nová generace diamantových tranzistorů pro výkonovou elektroniku
    Bláznivý Apríl, bláznivě nízké ceny Windows 11! Získejte jen za €20
    Týden na ScienceMag.cz: V Ostravě pokračují přípravy na instalaci kvantového počítače

    Nejkomentovanější články posledního měsíce

    Týden na ITBiz: Halucinace balíčků při programování AI
      všechny statistiky »

    Seriál Novinky v Python 2.5 (dílů: 3)

    Novinky v Python 2.5 (první díl)
    <—« Novinky v Python 2.5 - 2 (korutiny, konstrukce with)
    Novinky v Python 2.5 - 3 (poslední díl)

    Související články

    Novinky v Python 2.5
    Novinky v Python 2.5 - 2 (korutiny, konstrukce with)
    Standardní knihovna pro Python - 1 (builtins)
    Standardní knihovna pro Python - 2 (builtins 2)
    Standardní knihovna pro Python - 3 (builtins 3)
    Standardní knihovna pro Python - 4 (builtins 4)
    Standardní knihovna pro Python - 5 (řetězce)
    Ruby pro začátečníky - 1
    Seriál: BASH
    Python a PyQt - 1 (úvod)
    Python a PyQt - 2 (podmínky, cykly, tlačítka)
    Začínáme programovat v jazyce Python
    Kommander - 1 (Skriptované GUI)
    Kommander - 2 (Starý parser)
    Kommander - 3 (Nový parser)
    Seriál: Začíname KProgramovať
    Programujeme v PERLu - I
    Programujeme v PERLu - II

    Další články z této rubriky

    LLVM a Clang – více než dobrá náhrada za GCC
    Ze 4 s na 0,9 s – programovací jazyk Vala v praxi
    Reverzujeme ovladače pro USB HID zařízení
    Linux: systémové volání splice()
    Programování v jazyce Vala - základní prvky jazyka
           

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    21.8.2009 17:55 Mintaka
    Rozbalit Rozbalit vše Re: Novinky v Python 2.5 - 3

    I staré chyby si zaslouží opravu:

    "množství průběŘných výsledků"
    a
    "osmisty" by se asi mělo psát s mezerou jako "osmi sty". Kdyby to byl osmistý, pak dohromady.

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.