Wpis z mikrobloga

@sarveniusz: @fizyk20:

PHP 7.2.4 - 10 milionów
Tablica: 1181.21 ms
Generator: 1136.73 ms

PHP 7.0.29 - 10 milionów
Tablica: 1223.35 ms
Generator: 1624.24 ms

Jakim cudem mu wyszły takie liczby? Zakładam że to wina blackfire, czas mierzyłem microtime w skrypcie.
  • Odpowiedz
@sarveniusz

$ time ./test_list.py
Max memory: 402.81640625 MiB
./test_list.py 0,45s user 0,14s system 99% cpu 0,588 total
$ time ./test_gen.py
Max memory: 16.578125 MiB
./test_gen.py 0,59s user 0,02s system 100% cpu 0,608 total

Tu z pamięcią (i nieznacznie zmienionym kodem, bardziej upodobnionym do kodu PHP).

Trochę mnie dziwi tak wysokie zużycie pamięci, podejrzewam że wlicza w to cały interpreter, ale nie dam głowy.
  • Odpowiedz
@plushy: https://pastebin.com/ux3CD6J1

@mirasKo-Kalwario: Nie da się ukryć. Rozważałem tworzenie listy na zasadzie pętli zwiększającej zmienną o 1 i dopisującej do listy, ale nie chciałem niepotrzebnie komplikować kodu. Właśnie też sobie uświadomiłem, że zastanawiałem się, czy nie zaniżę w ten sposób wydajności, ale chyba dopisywanie do listy w Pythonie jest całkiem wydajne, nie? (łapię się na tym że o wydajności myślę z perspektywy Rusta...)
  • Odpowiedz
@fizyk20:
Range zwraca obiekt range a nie cała tablice/iterator
list(range) iteruje to całym range i zwraca całą zawartość do listy zapisując ją w pamięci

W pythonie generatory i list comprehensions są 'kompilowane' do kodu, który umożliwia wykonywanie na poziomie szybkości zbliżonej do C, o ilem ożna tak powiedizeć w ogóle o wykonywaniu kodu pythona. Zwykłe fory zaś, są wykonywane przez vmke pythona normalnie.

także
for x in range(something):
list.append(x)

będzie wolniejsze
  • Odpowiedz