Portál AbcLinuxu, 5. listopadu 2025 21:29
N-tice (tuples) se od polí liší tím, že není možno je po vytvoření měnit.
Hodí se pro všechny případy, kdy je potřeba seznam s konstantními prvky. V podobném duchu jako proč mít konstanty, když můžu mít proměnné, které nebudu v kódu měnit. Většina lidí se radši opře o syntaktickou analýzu překladače/interpretru než o vlastní hlavu - snižování pravděpodobnosti výskytu chyby.
>>> import array
>>> a = array.array('i')
>>> a.append(1)
>>> a.append(5)
>>> a
array('i', [1, 5])
>>> a.append('xxx')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: an integer is required
Na n-ticích je nejdůležitejší to, že jsou nemodifikovatelné, mohou mít svůj hash a jako takové mohou být hodnotou klíče slovníku.
>>> pole = []
>>> pole.append(False)
>>> pole.append(1)
>>> pole.append(3.141593654)
>>> pole.append("Hello world")
>>> pole.append(Neco())
>>> pole
[False, 1, 3.1415936539999998, 'Hello world', <__main__.Neco instance at 0xb7e7692c>]
>>> def secti_nasob(x,y):
... return (x+y,x*y)
...
>>> (x,y)=secti_nasob(3,6)
>>> print x,y
9 18
Bylo by prosím možné zdrojáky házet i na server v souborech? Než to spustím, musím si převést mezery na taby, kontrolovat všelijaký zalamování, protože Python je na to citlivý. Díky.
musím si převést mezery na tabynemusis, staci v jednom souboru pouzivat jeden styl.
QLayout "unnamed" added to QMainWindow "unnamed", which already has a layoutMám Python 2.4.2 a PyQt 3.15.1.
x1 = power(x, 3) x2 = multiply(2, power(x, 2)) y = add(add(x1, x2), 3)Proč se tak bránit více operacím v jednom výrazu? Akorát u generátorového výrazu máte místo skaláru vektor.. Krásné na Pythonu je to, že nemusíte znát všechny jeho možnosti, abyste ho mohl celkem bez problémů používat (a číst). Generátory moc nevyužívám, ale takové věci jako @exposed v Cherrypy nebo něco jako @synchronized v Javě považuji za naprosto legitimní a velice elegantní řešení.
).
Krásný, čistý a estetický jsou (z jiného pohledu) i funkce vyššího řádu, pokud má pro ně jazyk dobrou podporu (což Python IMHO tak úplně neměl nikdy...kdyby se v něm nepoužívaly tak hovadsky, byl by rozdíl o dost menší...). Svým způsobem jsou čistší - ta comprehension je na úrovni jazyka? Blok? Funkce? Snippet kódu? (Taky - teď si teď úplně nejsem jistý, jak to python implementuje - mám pocit, že mi u nich mírně hapruje asociativita těch for cyklů. To by ale samozřejmě byla hodně subjektivní námitka.) Samozřejmě ale chápu, že s tak primitivními prostředky, jaké Python měl, jsou list comprehensions rozhodně relativně větší pokrok, než by byly v jiných vyšších jazycích.
Apropos, tyhlety "naprosto úžasné věci" jsou v některých jazycích prakticky odjakživa...
Ještě takovou blbost, jakým způsobem se dá v Pythonu udelat lit comprehension, která destrukturuje n-tice do proměnných? Jako v Haskellu addPairwise :: [(Integer,Integer)] -> [Integer] addPairwise ap = [ x+y | (x,y) <- ps ]Na takovéhle fíčury jsem zatím nepřišel, jak se dělají.
Asi to nepůjde, nebo jsem alespoň nenašel žádný takový příklad. Na druhou stranu, stačí zřejmě použít generátorový oneliner. (Tedy s tím, že záhlaví deklarace funkce se nepočítá...
)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.