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

    Fedora 40 release party v Praze proběhne v pátek 17. května od 18:30 v prostorách společnosti Etnetera Core na adrese Jankovcova 1037/49, Praha 7. Součástí bude program kratších přednášek o novinkách ve Fedoře.

    Ladislav Hagara | Komentářů: 0
    včera 21:11 | IT novinky

    Stack Overflow se dohodl s OpenAI o zpřístupnění obsahu Stack Overflow pro vylepšení OpenAI AI modelů.

    Ladislav Hagara | Komentářů: 0
    včera 17:55 | Nová verze

    AlmaLinux byl vydán v nové stabilní verzi 9.4 (Mastodon, 𝕏). S kódovým názvem Seafoam Ocelot. Přehled novinek v příspěvku na blogu a v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 17:11 | IT novinky

    Před 50 lety, 5. května 1974 v žurnálu IEEE Transactions on Communications, Vint Cerf a Bob Kahn popsali protokol TCP (pdf).

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

    Bylo vydáno do češtiny přeložené číslo 717 týdeníku WeeklyOSM přinášející zprávy ze světa OpenStreetMap.

    Ladislav Hagara | Komentářů: 0
    včera 04:00 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová stabilní verze 2.10.38 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.

    Ladislav Hagara | Komentářů: 5
    včera 00:22 | Komunita

    Google zveřejnil seznam 1220 projektů od 195 organizací (Debian, GNU, openSUSE, Linux Foundation, Haiku, Python, …) přijatých do letošního, již dvacátého, Google Summer of Code.

    Ladislav Hagara | Komentářů: 2
    5.5. 22:22 | IT novinky

    Na základě DMCA požadavku bylo na konci dubna z GitHubu odstraněno 8535 repozitářů se zdrojovými kódy open source emulátoru přenosné herní konzole Nintendo Switch yuzu.

    Ladislav Hagara | Komentářů: 7
    5.5. 00:33 | Nová verze

    Webový prohlížeč Dillo (Wikipedie) byl vydán ve verzi 3.1.0. Po devíti letech od vydání předchozí verze 3.0.5. Doména dillo.org již nepatří vývojářům Dilla.

    Ladislav Hagara | Komentářů: 0
    4.5. 15:00 | Komunita

    O víkendu probíhá v Bostonu, a také virtuálně, konference LibrePlanet 2024 organizovaná nadací Free Software Foundation (FSF).

    Ladislav Hagara | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (63%)
     (8%)
     (15%)
     (14%)
    Celkem 118 hlasů
     Komentářů: 8, poslední 4.5. 08:25
    Rozcestník

    Novinky v Python 2.5 - 3

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

    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

    Jaderné noviny – přehled za březen 2024
    Týden na ITBiz: Efektivní podnikání se bez edge computingu neobejde
    Týden na ScienceMag.cz: V kvantovém materiálu objevili částici podobnou gravitonu

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

    Týden na ScienceMag.cz: Kosmologové se opět zkouší vypořádat se s problémem Hubbleovy konstanty
    Týden na ScienceMag.cz: Upřesnili limity pro klidovou hmotnost neutrin
    Jaderné noviny – přehled za duben 2024
      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.