Cpython

Sekcia: Programovanie 30.05.2014 | 01:24
Avatar Zer0 Blbuntu 16.04 gnome-session-flashback | Debian 8  Používateľ

Nemohol som si nevšimnúť, že keď v pythone importujem funkciu z iného skriptu, tak sa vytvorí zložka __pycache__ a v nej je .pyc subor s názvom skriptu. Aj som odmeral čas, za ktorý prebehne rovnaký úkon v mojom skripte a potom v importovanom skripte. Konkrétne:

x=0

while x<100000000:

        x=x+1

a čas v importovanej funkcii bol polovičný.

Mám to teda chápať tak, že toto je ten úžastný cpython?A že všetky funkcie by som mal písať do druhého skriptu a potom importovať pre lepší výkon? Prípadne zachová sa nadobudnutý výkon aj po kompilovaní na .exe?

    • RE: Cpython 30.05.2014 | 07:59
      Avatar ta-ja   Návštevník

      Ako píšeš, tento súbor sa vytvára v cache pri importovaní modulu a vytvára ho práve CPython (alebo nejaká iná modifikácia založená na ňom). Obsahuje kompilovaný bytecode, čo je len akoby predinterpretovaný .py súbor. Nie som si 100%tne istý, no .py a .pyc by mali byť v konečnom dôsledkú rýchlostne na tom rovnako a jediná rýchlostná výhoda je tá, že .pyc je pred spustením už skompilovaný zatiaľ čo .py to ešte len čaká čiže sa rýchlejšie načítajú. 

    • RE: Cpython 30.05.2014 | 08:35
      Avatar Miroslav Bendík Gentoo  Administrátor

      Globálne premenné sú v pythone pomalšie. Stačí obaliť volanie do funkcie main a pôjde automaticky rýchlejšie. Lokálne premenné sú totiž viacej optimalizované (okrem iného globálne by sa nemali prakticky používať, takže nevadí, že prístup k nim je pomalší).

    • RE: Cpython 30.05.2014 | 09:41
      Avatar Zer0 Blbuntu 16.04 gnome-session-flashback | Debian 8  Používateľ

      Máte pravdu. Rozdiel v rýchlosti spôsobovala globálna premenná a ja používam fakt veľa globálnych premenných :D. Ale teraz, keď už viem, že to nie je najlepší a najrýchlejší nápad, tak s tým asi prestanem.