Wpis z mikrobloga

to jest coś czym należy się martwić jak ten jeden if


@kao3991: wiesz, to zależy, jeśli ten if będzie wykonywany raz na miesiąc to olać optymalizację, ale jeśli jest to np. kawałek kodu odpowiedzialny za obsługę request'ów na serwerze, to może to być czymś co spowoduje że twoja aplikacja obsłuży 150 zamiast 200 requestów na sekundę... Poza tym czy to jest takie czytelne? Bo na pewno nie ekspresywne. Jak byś powiedział
więc czego byś nie napisał to i tak będzie działało wolno


@Saly: łooo... w pythonie może i nie napiszesz kodeka wideo, ale spokojnie możesz napisać aplikację webową, i możesz ją napisać tak sobie, albo tak żeby działała kilka razy szybciej, żarła mniej pamięci - tak jak w tym przypadku - po co inicjować tablicę, to zżera czas, pamięć i drażni garbage collector.

Poza tym, nie wiem jak to jest w python,
@keny-keczuloki-anuloki: raczej taki if Ci nie zrobi 25% różnicy.
I jest znacznie czytelniejsze, zwłaszcza że to w zasadzie standardowe rozwiązanie, każdy z doświadczeniem w pythonie czyta to jak idiom. Na język mówiony to się nie musi łatwo przekładać, to nie COBOL. Ale i tak się przekłada. Które brzmi naturalniej: "Twoje auto to Tesla albo Porsche?" czy "Twoje auto to Tesla albo Twoje auto to Porsche?"

A zobacz o ile to ułatwia
@keny-keczuloki-anuloki: a skoro wspominasz o JIT... wydaje mi się że "mądre" kompilatory dadzą radę to zoptymalizować. Przynajmniej alokując tablicę raz a nie co wywołanie, bo przecież jest zahardkodowana i się nie zmieni.
Ale tu nie mam pojęcia jak python. GCC zapewne dało by radę ogarnąć coś tego typu :)
@keny-keczuloki-anuloki: aż z ciekawości zmierzyłem przy pomocy timeit jak długo trwają obie wersje.

def first(s):
return s == "aaa" or s == "bbb"

5 0 LOAD_FAST 0 (s)
2 LOAD_CONST 1 ('aaa')
4 COMPARE_OP 2 (==)
6 JUMP_IF_TRUE_OR_POP 14
8 LOAD_FAST 0 (s)
10 LOAD_CONST 2 ('bbb')
12 COMPARE_OP 2 (==)
>> 14 RETURN_VALUE


f("aaa") -> 2.826337125000009
f("bbb") -> 2.8555641469999955
f("ccc") -> 2.821942368000009
f("aaaaaaaaaaaaaaaaaaaa") -> 2.8910420560000603
--------------------

def second(s):
return s