from functools import wraps
from time import perf_counter_ns
def time_it(f):
@wraps(f)
def wrap(*args, **kw):
ts = perf_counter_ns()
result = f(*args, **kw)
te = perf_counter_ns()
print(f'func: {f.__name__} args: [{args}, {kw}] took: {(te - ts) / 1_000_000_000} sec.')
return result
return wrap
# A list of 100_000 dictionaries:
l = [{'v': 1} for _ in range(100_000)]
N = 300
@time_it
def test1():
for _ in range(N):
l_copy = list(d['v'] for d in l)
return l_copy
@time_it
def test2():
for _ in range(N):
l_copy = [d['v'] for d in l]
return l_copy
test1()
test2()
ZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCmZyb20gdGltZSBpbXBvcnQgcGVyZl9jb3VudGVyX25zCgpkZWYgdGltZV9pdChmKToKICAgIEB3cmFwcyhmKQogICAgZGVmIHdyYXAoKmFyZ3MsICoqa3cpOgogICAgICAgIHRzID0gcGVyZl9jb3VudGVyX25zKCkKICAgICAgICByZXN1bHQgPSBmKCphcmdzLCAqKmt3KQogICAgICAgIHRlID0gcGVyZl9jb3VudGVyX25zKCkKICAgICAgICBwcmludChmJ2Z1bmM6IHtmLl9fbmFtZV9ffSBhcmdzOiBbe2FyZ3N9LCB7a3d9XSB0b29rOiB7KHRlIC0gdHMpIC8gMV8wMDBfMDAwXzAwMH0gc2VjLicpCiAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgcmV0dXJuIHdyYXAKCiMgQSBsaXN0IG9mIDEwMF8wMDAgZGljdGlvbmFyaWVzOgpsID0gW3sndic6IDF9IGZvciBfIGluIHJhbmdlKDEwMF8wMDApXQoKTiA9IDMwMAoKQHRpbWVfaXQKZGVmIHRlc3QxKCk6CiAgICBmb3IgXyBpbiByYW5nZShOKToKICAgICAgICBsX2NvcHkgPSBsaXN0KGRbJ3YnXSBmb3IgZCBpbiBsKQogICAgcmV0dXJuIGxfY29weQoKQHRpbWVfaXQKZGVmIHRlc3QyKCk6CiAgICBmb3IgXyBpbiByYW5nZShOKToKICAgICAgICBsX2NvcHkgPSBbZFsndiddIGZvciBkIGluIGxdCiAgICByZXR1cm4gbF9jb3B5CgoKdGVzdDEoKQp0ZXN0Migp