[python] (ne)logičnost .join() ?

Radek radek.hnilica na gmail.com
Pátek Březen 31 13:31:50 CEST 2017


On 23 ún, 08:08, "Petr Přikryl" <prik... na atlas.cz> wrote:
> Každý má jiný pohled na věc a jiná očekávání. Podle mého názoru
> je přístup typu ','.join(kontejner) možná na první pohled nezvyklý,
> ale na druhý pohled je velmi logický. Jde o to, že dokáže spojit
> zadaným řetězcem prvky dodané jakýmkoliv kontejnerem,
> který podporuje iteraci a který vrací řetězcové prvky.

Zajisté, pro implemetátora má smysl to definovat na jednom místě.
Takže by byl dobrý mixin nebo třída která implementuje metody nad
iterabilními kontejnery, a ty iterabilní kontejnery podědí nebo si ty
metody mixnou.

Ale když pracujete tak chcete psat něco jako

    neco.jeho_kolekce.transform.sort.jeste_transform.join

a nemáte chuť psát

   join(neco.jeho_kolekce.transform.sort.jeste_transform)

obzvláště když ten řetězec chcete na tečce dále zpracovávat.

 
neco.jeho_kolekce.transform.sort.jeste_transform.join.strip.jiny_transform.split

když to pak přepíšete do závorkové notace, tak je to nečitelné,
protože v závorkové notaci se píše doleva a v tečkové doprava.  Pár
takových závorek v tečkovaném výrazu a nevyzná se v tom ani zvíře
které to má v popisu práce.

A nebo jinak.  Kolikrát v životě jste potřebovali aplikovat join na
řetězec v tečce?
Já si nepamatuju jediný případ.

> A co se týká "volně rozhozených built-in funkcí", ono jich zase
> tak strašně moc není. Nezvyklé je to hlavně pro lidi, kteří
> pracovali v čistě OO jazyce, který funkce nepodporuje

jo, asi tak nějak.  Teď by bodl dokument: "Jak zobjektit Python v
místech kde se tomu brání, resp. kde to ještě nikdo neudělal."

To je asi to nejtrefnější:  Přesně v místech kdy Python nesleduje
objektové principy to bolí, a strašně.




Další informace o konferenci Python