Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Vlákno názorů k článku
Novinky v jazyce Python 3.0

Jan Švec
Jan Švec (neregistrovaný)
8. 12. 2008 8:51

Faktické chyby

Dobrý den pane Štrauchu,
se zájmem jsem přečetl váš článek a v ničem mě nepřekvapil - přesně jak jsem čekal je psaný horkou jehlou. Nechci vám sahat do svědomí, ale chtěl bych vědět, proč pro vytvoření seznamu z iterátoru neustále používáte konstrukci l=[x for x in iterable]? Není lepší zapsat l=list(iterable)?

Další naprosto fatální chyba - ukázka práce s dictionary (slovníky). Zkoušel jste si onen příklad s for x in d.keys().reverse(): v Pythonu 2.x? Pravděpodobně ne, protože byste zjistil, že on ani ve 2.x nefunguje. Problém je v tom, že metoda seznamu reverse() provádí otočení pořadí v místě a vrací None. A další pro mě velice důležitá věc - můžete mi naznačit případ z praxe, kde jste potřeboval otočit pořadí klíčů z dictionary? Ona dictionary totiž drží klíče neřazené a tudíž není zaručeno, že voláním keys() získate vždy tutéž posloupnost.

Další věcná chyba byla u příkladu s řazením - to řazení, které jste napsal pomocí str.lower() je bez ohledu na velikost písmen!

Další vaše fatální pochybení je u odstavce porovnávajícím bytes a str typy. Zapomněl jste zmínit změnu nejzásadnější - typ bytes je proměnný (mutable) typ, čili ho nemůžete použít jako klíče do slovníku! Typ str je oproti tomu neměnný. Důsledky z toho vyplývající si pravděpodobně domyslíte.

Nehci vám sahat do svědomí, ale mohu se zeptat kolik kódu jste napsal v Pythonu 2.x? A kolik v 3.x?

Omlouvám se všem za "rýpavý" příspěvek, ale takto nepřesný článek hned poránu mě pěkně nadzvedl ze židle. Přeji pěkný den,

Jan Švec

JS
JS (neregistrovaný)
8. 12. 2008 9:41

Re: Faktické chyby

V zasade souhlasim, az na jednu drobnost - podle
http://docs.python.org/dev/3.0/whatsnew/3.0.html
jsou bytes immutable (pokud chcete mutable, je tam bytearray).
František Jahoda
František Jahoda (neregistrovaný)
8. 12. 2008 9:44

Re: Faktické chyby

Pane Švec,
Ve většině svých poznámek máte pravdu, ale v jedné věci se ve své horlivé kritice mýlíte.
Typ bytes je v pythonu 3.0 neměnitelný (immutable).

zdroj: http://docs.python.org/3.0/whatsnew/3.0.html
Like str, the bytes type is immutable. There is a separate mutable type to hold buffered binary data, bytearray. Nearly all APIs that accept bytes also accept bytearray. The mutable API is based on collections.MutableSequence.

Domnívám se, že i kritiku lze napsat mírnějším tónem a veřejně neponižovat autora za to, že se pokusil o krátké shrnutí.
slavíček
slavíček (neregistrovaný)
22. 4. 2009 16:11

Re: Faktické chyby

Souhlasím plně!
Jan Švec
Jan Švec (neregistrovaný)
8. 12. 2008 9:51

Re: Faktické chyby

Omlouvám se za omyl s bytes, vycházel jsem z Pythonu 3.0a1, kde podle tohoto http://www.artima.com/weblogs/viewpost.jsp?thread=220341 byly bytes ještě mutable.

However, I do want to mention that based upon the feedback for 3.0a1, we've decided to make the 'bytes' type immutable, and create a separate mutable bytes type, 'bytearray'. These two types are mutually compatible, but in the majority of cases you'll be using bytes, not bytearray.

Jehla
Jehla (neregistrovaný)
8. 12. 2008 13:01

Re: Faktické chyby

Nehledě na to, že horkou jehlou se obvykle šije, nikoli píše... :)
Petr Mach
8. 12. 2008 15:43

Re: Faktické chyby

Souhlasim, take se mi pri cteni toho clanku mrazilo v zadech :-).

Dlasi vec, ktera me nadzvedavala ze zidle, je vydavani typu bytes za retezec. To je naproste nepochopeni ucelu tohoto datoveho typu a vubec cele zmeny, ktera v Pythonu ohledne retezcu probehla. Takze to tedy ne pratele, vyvojari Pythonu si dali velkou praci, aby tohle schizma Pythonu odstranili, a byl v nem zase jenom jeden datovy typ retezcu. Duvodem je rada problemu, ktere nezkuseni programatori meli v dusledku michani retezcu dvou datovych typu. A koukam ze autor clanku by v tom rad pokracoval.

Takze prosim vemte na vedomi, ze bytes nejsou textove retezce, nemaji slouzit jako textove retezce a je hloupost je tak pouzivat. Bytes je sekvence bytu, tedy cisel 0-255 jdouci za sebou. Jsou to binarni data, nikoli text. A rozlisovat mezi binarnimi daty a textem by mel umet i nezkuseny programator.
uživatel si přál zůstat v anonymitě
8. 12. 2008 16:03

Re: Faktické chyby

Jenže jak vidno, pan Štrauch má do nezkušeného programátora i novináře bohužel daleko.
yossarian
yossarian (neregistrovaný)
8. 12. 2008 17:53

Re: Faktické chyby

Co pamatuju, tak souvisle jdouci binarni data (tzn. v pameti za sebou) jsou retezec, nebo-li string (viz instrukce MOVSB, apod. v assembleru). Nebo vy kluci z vyssi urovne predelavate nazvoslovi tak, jak se vam hodi?
Petr Mach
8. 12. 2008 20:35

Re: Faktické chyby

V clanku se psalo o textovych retezcich, ja pisu o textovych retezcich. Kde je problem? Pokud se mluvi o retezci bez pridomku ve vyssim jazyce, znamena to rovnez ten textovy. Uz v jazyce C je, napriklad u funkce fopen(), defaultni textovy rezim, binarni se musi zadavat explicitne. Mozna byste se vy kluci z nizsi urovne meli obcas trochu porozhlednout :-).
Adam Štrauch aura:99
8. 12. 2008 17:12

Re: Faktické chyby

1. odst: Píšu tam, že to je jedna z možností, Vaše je lepší.

2. odst. Opravdu chyba, špatně jsem tam nakopíroval kód. Opraveno.

3. odst. Opraveno.

4. odst. Píšu o bytes "Cokoli co není unicode, je označováno za data a je reprezentováno typem bytes". Řetězec jsem zmínil až níže a to je taky chyba. Opraveno.

5. odst. V Pythonu 3.0 jsem toho moc nenapsal, není venku dostatečně dlouho a ani se ještě nedostal do mého oblíbeného Gentoo a ani jsem neměl tendenci psát si vlastní ebuild. Všechny příklady jsem zkoušel na final verzi, bohužel někde asi ne dostatečně.

6. Rýpavých příspěvků tu je plno, za to se nemusíte omlouvat :)
Zasílat nově přidané příspěvky e-mailem