He, mne pripada vtipne, jak se Python snazi tvarit jako super jazyk, ale pritom ma dost nevhodny vlastnosti. Osobne se mi na pythonu nelibi:
- nutnost odsazovani: jde zapsat python kod do jedne radky na cmdline a pouzivat ho jako filtr, jak to umi vetsina interpretovanych jazyku (perl, awk, bash) a jak jsem zvyklej i z dalsich cmdline utilitek (sed, grep, tr)?
- bloky urcovane poctem whitespace v odsazeni: neni nic „prijemnejsiho“, nez po upraveni ciziho kodu hledat spatne odsazeni, kdy jeden pouzil taby a druhy space. Fakt „super“ myslenka.
- vyucovat OOP na prikladu re.match(„c“, „abcdef“): tohle je hodne velka vec, kterou na pythonu nesnasim. Misto aby se volala matoda „match“ na objekt retezec (at uz ve vyznamu regexpu nebo prohledavaneho retezce) a pak se mu posilal druhy retezec jako parametr, tak se vola metoda na tridu se dvema parametry. Diky tomuhle se zacatecnici (pro ktere je python urcen) blbe nauci, ze objekty se pouzivaji zpusobem trida.metoda(hafo parameteru). Radsi bych videl priklady „abcdef“.match(„/regexp/“).
- no a ted ty thready: to musi byt opravdu bezva jazyk, kdyz v nem clovek napise multithread aplikaci a pak stejne bezi jenom jeden thread. Mi to pripada (podobne jako objekty), ze tvurce pythonu rekl „dame tam objekty a vlakna, ale metody budeme volat na tridy a vlakno nechame bezet jednom jedno, aby to nedelalo problemy, aby se to naucili i zacatecnici, ale hlavni je, ze python bude objektovy a vicevlaknovy“.
PS: Adresa pochazi z Toru, nejsem v DE.
Jaký je rozdíl mezi tím, když napíšu ‚}‘ a ‚<Backspace>‘? …k tomu prvnímu zpravidla potřebuju stisknout dvě klávesy. A není překvapením, že pro ‚{‘ a ‚<TAB>‘ platí to samé. Já teda v Pythonu nikdy nic velkého nedělal, jsem odkojený na jazycích vycházejících ze syntaxe C, ale s tímhle bych neměl nejmenší problém.
Muj oblibeny editor s { hodi i } a po entru odsazuje inteligentne, takze vetsinou to je jeden uhoz na cely blok, zadne BS ani taby nemusim resit. Pokud je blok bez zavorek, tak je to jeden BS.
Rivon rekl, ze se to v pythonu pise rychleji, tak jsem chtel vedet jak je to udelane. Ja v tom prave taky zadny patrny rozdil nevidim.
A ano, ja s pythonim pristupem problem mam, protoze neco tak vagniho a nepodstatneho jako je whitespace pouziva pro tak dulezitou vec jako je definice bloku. Ale to neni predmetem tohoto vlakna ;-)
Jako učitel, který se má vyznat v kódu svých žáků můžu říc, že právě v povinném odsazování vidím výhodu.
Mimochodem další doporučení pro formátování:
http://www.python.org/doc/essays/styleguide.html#comments
IMHO: Žádný jazyk není dokonalý, ať každý používá to, co mu vyhovuje.
Ja se cele vlakno snazim dopatrat jak to python dela, ze se v nem bloky pisi rychleji a jsou prehlednejsi (jak tvrdi Rivon) a zatim jsem se nedockal. Nikdo mi to neobjasnil, v cem je to lepsi, nanejvys ze to vyjde nastejno. Prave ten muj predchozi komentar se snad pta jasne a konstruktivne a zrovna vy jste mi neodpovedel nijak. Vy reagujete takovym tim zpusobem „kdyz ty nevis, tak ja ti to nereknu“.
Nekteri rikaji, ze vynuceny manualni format je lepsi nez automaticky. V cem? Nekteri ze psani je snadnejsi. V cem? Uz to tu nekdo psal, ale melo to mouchy, ve vysledku mi to porad vyslo nastejno.
Na první pohled je totiž vidět, kde blok začíná a kde končí. To je velká výhoda oproti C,C++,…, kde musíte pořád počítat závorky a doufat, že jsou všechny tam, kde mají být. V závorkách se často dělávají chyby, takže když to v Pythonu odpadá, tak se musí zákonitě psát pythonovské bloky rychleji.
Prominte, ale ja mam cim dal vic, pocit, ze mi tady unika nejaka brilantni myslenka a opravdu se ji chci dopatrat a jsem cim dal zvedavejsi, protoze pokud to funguje jak rikate, tak je to skutecna revoluce v programovani.
Tak dejme tomu, ze pisu relativne ciste treba v jave, metody maji nanejvys 10 radku. V tech par zavorkach se vyznam a orientuju se dle odsazeni ktere automaticky udelal editor behem psani. Takze podle odsazeni vidim hned, kde jsou bloky a jaky maji rozsah. V cem _konkretne_ je to v pythonu prehlednejsi?
Pisu novy kod. O jednoradkove bloky se vubec nestaram, editor sam odsadi tam i zpet. U vice radkovych zacnu {}, editor sam odsadi, jen na konci musim rict, ze blok konci tim, ze preskocim }. Cili 0+2 uderu navic. Je v pythonu nejaka magie, ktera sama pozna kde ma blok koncit, takze je to opravdu mene prace? Pokud ne, tak jaky je rozdil mezi ukoncenim bloku zavorkou a odsazenim? Opet prosim konkretne.
Jaky je rozdil mezi tim, kdy nekdo napise blbe zavorku a pak to ma blbe odsazene (protoze to je po zformatovani ekvivalentni), nebo nekdo blbe odsadi a pak to ma blbe odsazene?
Já mohu potvrdit, že se v něm skutečně píše rychleji
člověk nemusí řešit spoustu věcí syntaxe, protože to za něj vyřeší bloky.
Já vím, že existují supr dupr našláplé editory, ale zase takové závorkové peklo se v pythonu (narozdíl od C, PHP a podobných jazyků) podaří jen zřídka. To pak brzdí a ikdyž to editor chytře zformátuje, tak do toho musí člověk chvíli koukat, než se zorientuje, což v pythonu nebývá problém.
člověk nemusí řešit 10000 různých způsobů concatnutí objektu (jako třeba paskvil jménem PHP). Prostě tam, kde to lze se jednodušeji všude používá +. Je to jazyk s dynamickým typováním, takže člověka upozorní na prasárny a zároveň mu umožní dostatečně flexibilní práci s proměnnými.
Tady mi prijde, ze bud ma ten kod smysl prenest bez zavorek, nebo se zavorkami, ale pak i s pripadnym for, if… ktere je na zacatku. Takze je to jen o vyberu dalsich 2 radku, nejake velke loveni tam nevidim.
Jak pak resite odsazeni v cilovem miste? V beznem jinem jazyku je to na jednu klavesovou zkratku…
Pokud casto resite problem s indentaci namichanou z tabu a spacu, zkuste spoustet python s prepinacem „-tt“.
Pokud jde o re.match, tak to „re“ neni trida, ale modul, tedy jakasi knihovna funkci. Pokud chcete vice OOP pristup, zkuste re.compile a objekty, ktere poskytuje.
Jinak muzu doporucit napr. http://docs.python.org/tutorial/ a nebo http://www.amazon.com/Python-Dummies-Stef-Maruch/dp/0471778648. Kdyz u se s tim nenaucite v Pythonu programovat, alespon vam to pomuze stezovat si na relevantni veci…
Mne zase prijde vtipne, ze toho moc lidi nevi a pak pise takove blbosti.
1) Odsazovani je navrzeno prave z duvodu nucene prehlednosti kodu. Vetsina plikaci je velmi citelna i v pripade, ze citatel neni autor. To se o jinych jazycich tvrdit neda.
2) Mix tab/space je hnus vsude. Ja osobne mam vsude prepisovani na mezery. Pak je to videt vsude stejne.
3) uz tu nekdo psal, ze re je modul. match je funkce v modulu re. Pokud chcete objekt je nutne vytvorit instanci, v tomto pripade faktory re.compile. Nechapu proc by mel mit string rovnou metody pro regularni vyrazy. To mi neprijde koncepcni. Takto se lepe rosiruje funkcnost.
4) Thready jsou bezva a jsou bezva i v pythonu. Jsou tam z duvodu jednodussi implementace a ne pro zvyseni vykonu. Pro vyssi vykon se daji vytvorit podprocesy. Nechapu, ze si tolik lidi mysli, ze thready jsou jen kvuli rychlosti.
1) Odsazovani je u me az na xtem miste co se tyce prehlednosti kodu a navic vec, ktera se v rozumnych jazycich vyresi jednim uderem i v pripade, ze je autor rekneme nekonvencni
2) natozpak kdyz se to prozene nejakym slepovadlem, kde se ze vseho udela jedna mezera, to to pak vypada opravdu vsude stejne :-) Ja zas pouzivam taby, pak si to kazdy muze nastavit podle sebe a nemusi si zvykat na zvyky nekoho jineho.
4) Treba si to lide mysli proto, ze by se jim to hodilo jako potrava pro dalsi jadra na cpu…
Pripada mi, ze navrhar pythonu jim vyresil problemy ktere neexistovaly, za cenu vynalezeni problemu novych.
> – nutnost odsazovani: jde zapsat python kod do jedne radky na cmdline
Jde. Lidem, co píšou malichernosti typu jabber server na této vlastnosti většinou příliš nezáleží.
> – neni nic „prijemnejsiho“, nez po upraveni ciziho kodu hledat spatne odsazeni
Chtěl bych vidět někoho, kdo přijme patch, který bude mít tu skvělou vlastnost, že nebude dodržovat nastolené formátování (tzv. coding style) pro kód v libovolném jazyce.
> – vyucovat OOP na prikladu re.match(„c“, „abcdef“): tohle je hodne velka vec, kterou na pythonu nesnasim.
Je problém vyučujícího, pokud vyučuje OOP na neobjektových příkladech.
> – no a ted ty thready: to musi byt opravdu bezva jazyk, kdyz v nem clovek napise multithread aplikaci a pak stejne bezi jenom jeden thread.
Běžná praxe, jazyky využívající green threads touto „vlastností“ obvykle disponují. Neužiješ si sice dvou cpuček při konverzi do mp3jek, spoustě jiných (například síťových aplikací) to ale nevadí.
Reagoval jsem na to, jestli prijmu patch s rozdrbanym formatem – pokud bude jinak ok, tak ano a zformatuju to predtim. Je to muj projekt, tak tam prece nedojde ke zmenam v jinych castech.
Vy patrne mate na mysli pripad kdy prispivam nekam jinam ja, cili patch posilam. V tom pripade si nastavim formatovani pouzite v tom projektu, takze zbytek bude netknuty a moje cast bude dodrzovat styl. Pokud projekt zadny styl nema, tak bud zavru oci nebo utecu :-)
V praci opravuju formatovani v castech ktere jsou rozdrbane ze se to cist neda. Je to uzavrena spolecnost, tak si to vyrikame. V takovem pripade udelam samostatny commit jen s opravami formatu a myslim ze to neni zbytecna zmena.
Je mi sice jasne, ze zivim trolla, ale:
GIL neni ve specifikaci pythonu, je to pouze vlastnost jedne (byt nejoblibenejsi) jeho implementace – CPythonu. Jsou i jine implementace, ktere GIL nemaji a vlakna tam pak bezi skutecne konkurentne.
Nadavani na nutnost osazeni je obvykle reakce lidi, kteri v Pythonu nepisi. Pokud v nem pisete vic, zvyknete si a prijde vam to prirozene. Sice nemuzete napsat rozsahly filtr na jeden radek, ale je otazka, jestli je to takova skoda :).
Tak já třeba vím o jedné věci, která důvodem proti rozhodně není. Taková race condition se nijak neomezuje na aplikace využívající vlákna. Vlánka patřící jednomu procesu mají obvykle „trošinku problém“ s během na různých počítačích, zato race condition je „oblíbenou“ třídou problémů vyskytujících se u distribuovaných aplikací.