Byla vydána nová verze 10.3 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Přidána byla podpora Orange Pi 4 LTS. Přibyl balíček Prometheus.
Implementace VPN softwaru WireGuard (Wikipedie) pro Windows, tj. WireGuard pro Windows a WireGuardNT, dospěly do verze 1.0.
V Pekingu dnes proběhl 2. ročník půlmaratonu humanoidních robotů. První 3 místa obsadili roboti Honor Lightning v různých týmech. Nový rekord autonomního robota je 50 minut a 26 sekund. Operátorem řízený robot to zvládl i s pádem za 48 minut a 19 sekund. Řízení roboti měli časovou penalizaci 20 %. Před rokem nejrychlejší robot zvládl půlmaraton za 2 hodiny 40 minut a 42 sekund. Aktuální lidský rekord drží Jacob Kiplimo z Ugandy s časem 57 minut a 20 sekund [𝕏].
Stanislav Fort, vedoucí vědecký pracovník z Vlčkovy 'kyberbezpečnostní' firmy AISLE, zkoumal dopady Anthropic Mythos (nový AI model od Anthropicu zaměřený na hledání chyb, který před nedávnem vyplašil celý svět) a předvedl, že schopnosti umělé inteligence nejsou lineárně závislé na velikosti nebo ceně modelu a dokázal, že i některé otevřené modely zvládly v řadě testů odhalit ve zdrojových kódech stejné chyby jako Mythos (například FreeBSD CVE-2026-4747) a to s výrazně nižšími provozními náklady.
Federální návrh zákona H.R.8250 'Parents Decide Act', 13. dubna předložený demokratem Joshem Gottheimerem a podpořený republikánkou Elise Stefanik coby spolupředkladatelkou (cosponsor), by v případě svého schválení nařizoval všem výrobcům operačních systémů při nastavování zařízení ověřovat věk uživatelů a při používání poskytovat tento věkový údaj aplikacím třetích stran. Hlavní rozdíl oproti kalifornskému zákonu AB 1043 a kolorádskému SB26-051 je ten, že federální návrh by platil rovnou pro celé USA.
Qwen (čínská firma Alibaba Cloud) představila novou verzi svého modelu, Qwen3.6‑35B‑A3B. Jedná se o multimodální MoE model s 35 miliardami parametrů (3B aktivních), nativní kontextovou délkou až 262 144 tokenů, 'silným multimodálním vnímáním a schopností uvažování' a 'výjimečnou schopností agentického kódování, která se může měřit s mnohem rozsáhlejšími modely'. Model a dokumentace jsou volně dostupné na Hugging Face, případně na čínském Modelscope. Návod na spuštění je už i na Unsloth.
Sniffnet, tj. multiplatformní (Windows, macOS a Linux) open source grafická aplikace pro sledování internetového provozu, byl vydán ve verzi 1.5. V přehledu novinek je vypíchnuta identifikace aplikací komunikujících po síti.
V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 15.0 (Mastodon). Forgejo je fork Gitei.
Současně se SUSECON 2026 proběhne příští čtvrtek v Praze také komunitní Open Developer Summit (ODS) zaměřený na open source a openSUSE. Akce se koná ve čtvrtek 23. 4. (poslední den SUSECONu) v Hilton Prague (místnost Berlin 3) a je zcela zdarma, bez nutnosti registrace na SUSECON. Na programu jsou témata jako automatizace (AutoYaST), DevOps, AI v terminálu, bezpečnost, RISC-V nebo image-based systémy. Všichni jste srdečně zváni.
Český úřad zeměměřický a katastrální zavedl u anonymního nahlížení do katastru nemovitostí novou CAPTCHA ve formě mapové puzzle: nepřihlášení uživatelé musí nově správně otočit devět dlaždic v 3x3 poli tak, aby dohromady daly souvislý obrázek výseče reálné mapy, přičemž na to mají pouze jeden časově omezený pokus. Test je podle uživatelů i odborníků příliš obtížný a na sociálních sítích pochopitelně schytává zaslouženou kritiku a
… více »try-catch-finally.Jazyk Python prochází neustálým vývojem. Ovšem po revolučních změnách, jako new-stylled classes v Pythonu 2.2, se tvůrci soustředí spíše na postupnou evoluci. Nicméně i ve verzi 2.5 se najdou výrazné změny, jako například konstrukce with nebo předávání parametrů do generátorů. Novinky této verze shrnuje dokument whatsnew25.html na oficiálních stránkách Pythonu.
Požadavky na nové rysy jazyka jsou shrnuty v takzvaném PEPu, což je Python Enhancement Proposal. Jedná se o obdobu Apocalypse v Perlu nebo RFC pro Internet. Každé vylepšení má tedy přiřazeno číslo dokumentu, které je podrobně popisuje.
Mnoho jazyků nabízí speciální ternární operátor, který umožňuje zapsat výraz typu pokud platí podmínka cond, přiřaď true_val, jinak false_val. Python nic takového neobsahoval a bylo nutné používat podmínky:
if cond:
x = true_val
else:
x = false_val
V konferencích comp.lang.python a python-dev proběhlo mnoho vzrušených diskusí především mezi zastánci tradičních ternárních operátorů z C a těmi, kteří nechtěli přidávat další syntaktické prvky, ale využít ty stávající. Guido Van Rossum se nakonec přiklonil k této syntaxi:
x = true_val if cond else false_val
V tomto případě ovšem došlo ke zkomplikování vyhodnocení kódu. Nejprve se vyhodnotí podmínka uprostřed a na jejím základě dojde k vyhodnocení jedné ze dvou krajních hodnot. Tato syntaxe vypadá divně a složitě. Jaký je důvod mít podmínku uprostřed a ne na prvním místě jako v C? K rozhodnutí došlo potom, co se porovnávala čitelnost nové syntaxe v modulech standardní knihovny. Vývojáři došli k názoru, že zápis x přiřaď true_val pokud platí podmínka cond, jinak false_val odpovídá běžnému způsobu uvažování.
PEP 308, Conditional Expressions
PEP napsal Guido van Rossum a Raymond D. Hettinger; implementoval Thomas Wouters.
Modul functools obsahuje nástroje pro podporu funkcionálního stylu programování. Jednou z užitečných funkcí je partial, která umožňuje za běhu vytvářet varianty již existujících funkcí. Mějme funci f(x, y, z) a z ní si (dynamicky za běhu) vytvoříme g(f(1, y, z)).
Funkce je deklarována takto: partial(func, arg1, arg2, ... kwarg1=value1, kwarg2=value2) a vrací volatelný objekt, takže se chová úplně stejně jako klasická funkce (což je pochopitelně také volatelný objekt).
import functools
def log(subsystem, message):
return "%s: %s" % (subsystem, message)
server_log = functools.partial(log, subsystem='server')
print server_log('unable to open socket')
Další funkcí je update_wrapper, která umožňuje skrýt vnořené funkce. Například dekorátory se v Pythonu skládají z vnější a vnořené funkce a pokud dojde k chybě ve vnořené, vypíše se jako příčina chyby ona. Toto (logické) chování ovšem může být matoucí, protože se ve výpisu objeví chyba ve vnořené funkci, která se v kódu neobjevuje. Tato funkce potom zkopíruje jméno, modul a dokumentační řetězec do vnořené funkce, takže se ve výpisu chyb objeví pouze vnější funkce.
def my_decorator(f):
def wrapper(*args, **kwds):
print 'Calling decorated function'
return f(*args, **kwds)
functools.update_wrapper(wrapper, f)
return wrapper
Případně je možné použít dekorátor wraps:
def my_decorator(f):
@functools.wraps(f)
def wrapper(*args, **kwds):
...
PEP 309, Partial Function Application
PEP navrhl a sepsal Peter Harris; implementoval Hye-Shik Chang a Nick Coghlan, upravil Raymond Hettinger.
Malá část tohoto vylepšení je už v Pythonu 2.4, kdy závorky v konstrukci from ... import ... zjednodušily a zpřehlednily import mnoha jmen, protože se dají zapsat na jednom řádku. Důležitější část je implementována ve verzi 2.5 - relativní nebo absolutní importy. V budoucích verzích Pythonu by se měly používat právě absolutní importy jako výchozí způsob. Dejme tomu, že máme adresář balíčků jako je tento:
pkg/ pkg/__init__.py pkg/main.py pkg/string.py
Balík pkg obsahuje moduly pkg.main a pkg.string. Mějme kód v modulu main.py. Co se stane, pokud se v něm provede výraz import string? V Pythonu verze 2.4 a nižší se systém nejprve podívá do adresáře balíčku (pkg) pro provedení relativních importů, najde pkg/string.py, naimportuje soubor jako modul pkg.string a sváže ho se jménem string ve jmenném prostoru modulu pkg.main. To je zcela v pořádku, pokud chcete importovat pkg.string. Ale co v případě, že chcete použít standardní modul Pythonu? Bez hacků, jako je prohledávání sys.modules, to prostě nejde. Holger Krekel vytvořil balíček py.std, který nabízí čistší způsob. Můžeme napsat import py; import py.string.join(). Nevýhodou je, že není standardní součástí všech instalací Pythonu.
Od verze 2.5 jazyk podporuje změnu chování importu. Je nutné napsat direktivu from __future__ import absolute_import a import začne nejprve prohledávat standardní knihovnu Pythonu. Plánuje se, že od verze 2.7 to bude výchozí nastavení.
Relativní importy jsou stále dostupné a to přidáním tečky před jméno modulu při použití konstrukce from ... import:
# Importuje jmena z pkg.string from .string import name1, name2 # Importuje pkg.string from . import string
Teď se importuje modul string relativně k současnému balíčku, takže v pkg.main se naimportují name1 a name2 z pkg.string. Přidáním dalších teček můžeme posunout počátek importu i na předka našeho balíčku:
from . import D # Importuje A.B.D from .. import E # Importuje A.E from ..F import G # Importuje A.F.G
Je důležité si uvědomit, že toto chování se netýká konstrukce import, pouze from ... import.
PEP 328, Imports: Multi-Line and Absolute/Relative
PEP sepsal Aahz; implementoval Thomas Wouters.
Do verze 2.4 bylo možné používat konstrukci try dvěma způsoby. Buď používat blok finally nebo jeden či více bloků except pro zachycení výjimek. Nebylo možné zkombinovat blok(y) except s blokem finally. Bylo tomu tak proto, že vygenerování správného bytecode pro tuto konstrukci není jednoduché a navíc se tvůrcům zdála sémantika poněkud nejasná. Ovšem Guido van Rossum jistý čas dělal v Javě, která tuto kombinovanou konstrukci obsahuje, a to mu pomohlo vyřešit potíže se sémantikou.
try:
block-1 ...
except Exception1:
handler-1 ...
except Exception2:
handler-2 ...
else:
else-block
finally:
final-block
Je vykonáván kód označený jako block-1. Pokud v něm dojde v výjimce, bude zachycena a zpracována v příslušném bloku except. Pokud nebyla vytvořena žádná výjimka, je provedena část else-block. Bez ohledu na to, co se stalo předtím, je část označená jako finally-block vykonána vždy a to i v případě, že kód handler-1, handler-2 nebo else-block vygeneruje další výjimku.
PEP 341, Unifying try-except and try-finally
PEP sepsal Georg Brandl; implementoval Thomas Lee.
Dále v Pythonu proběhla řada dalších změn, jako je konstrukce wich, nová základní třída pro výjimky, další speciální metody, konstrukce yield se stala výrazem a mnoho dalších. Další díl se bude věnovat změnám nejvýraznějším, vylepšeným generátorům a konstrukci with.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Ternarni operator jsem nahrazoval fintou
cond and true_val or false_val
(cond and [true_val] or [false_val])[0]
Viac v diveintopython.
if cond x = 1 else x = 2 end
xxx = yyy if zzz. Nevím, zda je v Ruby i nějaká else část, to už bych asi zas tak nadšený nebyl, ale je pravda, co se tvrdí v článku: je to mnohem bližší přirozenému uvažování.
O chvilku později… pravda, mluvíte vlastně o čtení. Je fakt, že podmínku utopenou kdesi za výrazem můžu snadno přehlídnout… teda mohl bych, kdybych nepoužíval Ruby akorát na skriptíky zvící max. desítek řádek. Ale něco na tom bude.
(cond)?(x=1):(x=2):)
x = if cond then 1 else 2 end
Je to jako v Lispu, všechno vrací hodnotu a jestli ji člověk použije nebo ne, je jen na něm. Myslím, že se to netýká jen if.
A prvky jazyka jsou ortogonální a dají se kombinovat. Aspoň je to konzistentní a logické. Ať se pythonisté třeba vztekají a stavějí na hlavu.
When in Rome, do as the Romans do.
(bla (if nil 0 1))…ale každému, jak je libo.
Ne, v bezzávorkovém jazyku, jako je Ruby, je lepší na pouhé dvě hodnoty a jednoduchou podmínku použít podmíněný výraz, páč ty dva znaky znamenají méně balastu, ale ne všechno je takhle jednoduché, že.
„ak mas normalny editor, lahko vidis kde ti zatvorky zacinaju/koncia a tie slova su naozaj redundantne a zvysuju neprehladnost“Díky, přidám si Tě na seznam obáhjců Lispu, tohle pořád tvrdím.
print "OK" if cond, protože else část je povinná. takže člověka hned napadne print "OK" if cond else pass, což je špatně, protože se nerozhoduje o provedení příkazu print, ale o jeho argumentu, což mi nepřijde vždy úplně intuitivní. Takže jestli tomu rozumím, touto novou syntaxí ekvivalent if cond: print "OK" zapsat nelze .. (?)
print "OK" není na tomto místě povolen (Python v tomto ohledu dodržuje algolovské rozdělení příkazů a výrazů). Je pravda, že část else by mohla být nepovinná a fungovat by to mohlo asi takto. Nechce to někdo navrhnout?
a = 5 if cond else NoneNo a ten
if cond: print "OK" napsat jde i ve 2.5
print "OK" if True else None ... já tam pořád cpal ham = print .... Ale právě ta větev else None tam být musí, přitom zbytečně
. Takový krásný překlep ...
, aspon o zadnych nevim)