> (...) že to nutí ke změně typových hintů. Protože pokud tam bude def x(y=None), tak typ toho y už nebude "typ", ale "Optional[typ]".
Pokud je problém v tom Optional
, tak ať funkce bere y: Iterable[T]
, a seznam (=implementaci) si z parametru může vyrobit v těle? Výchozí hodnotou může být bezpečná* n-tice, a jediná nevýhoda, která mě takhle z fleku napadá, je absence
_ = x(None) # explicitly requesting default value
Navíc si myslím, že ta "změněná" sémantika typu je vlastně správně - buď tam x dám (x: T) nebo ne (x: None). Typ x-u je otázkou rozhraní, ne toho, co se skutečně stane-
[*]: Samozřejmě záleží na bezpečnosti všech prvků n-tice... ale pokud už člověk musí udělat něco takového, tak si tu nekonzistenci zaslouží.
>>> first = ("eggs", "ham", ["spam"]*5) >>> second = first + ("baked beans",) >>> second[2].append("spam") # even more spam please >>> len(first[2]) 6