[PYTHON] Der zu bewertende Ort kann sich zwischen der Karten- und Listeneinschlussnotation unterscheiden

Bei Verwendung von python2.7.10

Als ich versuchte, ein solches Skript zu verwenden, Das Ergebnis ist, dass die Verarbeitungsgeschwindigkeit der Karte schneller ist, wenn es einfach ist. (Die Speichernutzung ist heikel)

import sys

@profile
def which_is_good():
    print sys.version

    l = range(100000)

    mapped = map(lambda d: chr(65 + d%127), l)
    m_stringed = str(mapped[:])
    del mapped
    del m_stringed

    comped = [chr(65 + d%127) for d in l]
    c_stringed = str(comped[:])
    del comped
    del c_stringed

    mapped, comped = (), ()

which_is_good()

kernprof -vl run.py

2.7.10 (default, Jul 13 2015, 12:05:58) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)]
Wrote profile results to run.py.lprof
Timer unit: 1e-06 s

Total time: 0.155445 s
File: run.py
Function: which_is_good at line 3

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     3                                           @profile
     4                                           def which_is_good():
     5         1           33     33.0      0.0      print sys.version
     6                                           
     7         1         2086   2086.0      1.3      l = range(100000)
     8                                           
     9         1        49070  49070.0     31.6      mapped = map(lambda d: chr(65 + d%127), l)
    10         1        21482  21482.0     13.8      m_stringed = str(mapped[:])
    11         1          150    150.0      0.1      del mapped
    12         1           23     23.0      0.0      del m_stringed
    13                                           
    14    100001        68510      0.7     44.1      comped = [chr(65 + d%127) for d in l]
    15         1        13911  13911.0      8.9      c_stringed = str(comped[:])
    16         1          152    152.0      0.1      del comped
    17         1           27     27.0      0.0      del c_stringed
    18                                           
    19         1            1      1.0      0.0      mapped, comped = (), ()

python -m memory_profiler run.py

2.7.10 (default, Jul 13 2015, 12:05:58) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)]
Filename: run.py

Line #    Mem usage    Increment   Line Contents
================================================
     3   19.551 MiB    0.000 MiB   @profile
     4                             def which_is_good():
     5   19.555 MiB    0.004 MiB       print sys.version
     6                             
     7   22.660 MiB    3.105 MiB       l = range(100000)
     8                             
     9   23.426 MiB    0.766 MiB       mapped = map(lambda d: chr(65 + d%127), l)
    10   28.496 MiB    5.070 MiB       m_stringed = str(mapped[:])
    11   28.246 MiB   -0.250 MiB       del mapped
    12   27.996 MiB   -0.250 MiB       del m_stringed
    13                             
    14   28.730 MiB    0.734 MiB       comped = [chr(65 + d%127) for d in l]
    15   28.840 MiB    0.109 MiB       c_stringed = str(comped[:])
    16   28.590 MiB   -0.250 MiB       del comped
    17   28.340 MiB   -0.250 MiB       del c_stringed
    18                             
    19   28.340 MiB    0.000 MiB       mapped, comped = (), ()

Recommended Posts

Der zu bewertende Ort kann sich zwischen der Karten- und Listeneinschlussnotation unterscheiden
[Einführung in Python] Was ist der Unterschied zwischen einer Liste und einem Taple?
[Einführung in die Udemy Python3 + -Anwendung] 60. Listeneinschlussnotation
Der Operator und des Python-Bewertungsausdrucks scheint vom Ausdruck auf der linken Seite ausgewertet zu werden
Der Zeitpunkt, zu dem der Wert des Standardarguments ausgewertet wird, unterscheidet sich zwischen Ruby und Python.
[Python] Ich habe versucht, das Array, die Wörterbuchgenerierungsmethode, die Schleifenmethode und die Listeneinschlussnotation zusammenzufassen
Extrahieren und listen Sie die Namen von Personen und Orten im Text auf
Wie man Argparse benutzt und den Unterschied zwischen Optparse
[Python] Es kann nützlich sein, die Datenrahmen aufzulisten
Verstehen Sie den Unterschied zwischen der kumulativen Zuordnung zu Variablen und der kumulativen Zuordnung zu Objekten
[Python] Inklusive Notation. Schreiben Sie eine einfache for-Anweisung. (Eine Sammlung ist der Unterschied zwischen einem iterierbaren und einem Iterator.)