17db96d56Sopenharmony_ci'Show relative speeds of local, nonlocal, global, and built-in access.' 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ci# Please leave this code so that it runs under older versions of 47db96d56Sopenharmony_ci# Python 3 (no f-strings). That will allow benchmarking for 57db96d56Sopenharmony_ci# cross-version comparisons. To run the benchmark on Python 2, 67db96d56Sopenharmony_ci# comment-out the nonlocal reads and writes. 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_cifrom collections import deque, namedtuple 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_citrials = [None] * 500 117db96d56Sopenharmony_cisteps_per_trial = 25 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ciclass A(object): 147db96d56Sopenharmony_ci def m(self): 157db96d56Sopenharmony_ci pass 167db96d56Sopenharmony_ci 177db96d56Sopenharmony_ciclass B(object): 187db96d56Sopenharmony_ci __slots__ = 'x' 197db96d56Sopenharmony_ci def __init__(self, x): 207db96d56Sopenharmony_ci self.x = x 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ciclass C(object): 237db96d56Sopenharmony_ci def __init__(self, x): 247db96d56Sopenharmony_ci self.x = x 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_cidef read_local(trials=trials): 277db96d56Sopenharmony_ci v_local = 1 287db96d56Sopenharmony_ci for t in trials: 297db96d56Sopenharmony_ci v_local; v_local; v_local; v_local; v_local 307db96d56Sopenharmony_ci v_local; v_local; v_local; v_local; v_local 317db96d56Sopenharmony_ci v_local; v_local; v_local; v_local; v_local 327db96d56Sopenharmony_ci v_local; v_local; v_local; v_local; v_local 337db96d56Sopenharmony_ci v_local; v_local; v_local; v_local; v_local 347db96d56Sopenharmony_ci 357db96d56Sopenharmony_cidef make_nonlocal_reader(): 367db96d56Sopenharmony_ci v_nonlocal = 1 377db96d56Sopenharmony_ci def inner(trials=trials): 387db96d56Sopenharmony_ci for t in trials: 397db96d56Sopenharmony_ci v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal 407db96d56Sopenharmony_ci v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal 417db96d56Sopenharmony_ci v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal 427db96d56Sopenharmony_ci v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal 437db96d56Sopenharmony_ci v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal; v_nonlocal 447db96d56Sopenharmony_ci inner.__name__ = 'read_nonlocal' 457db96d56Sopenharmony_ci return inner 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ciread_nonlocal = make_nonlocal_reader() 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_civ_global = 1 507db96d56Sopenharmony_cidef read_global(trials=trials): 517db96d56Sopenharmony_ci for t in trials: 527db96d56Sopenharmony_ci v_global; v_global; v_global; v_global; v_global 537db96d56Sopenharmony_ci v_global; v_global; v_global; v_global; v_global 547db96d56Sopenharmony_ci v_global; v_global; v_global; v_global; v_global 557db96d56Sopenharmony_ci v_global; v_global; v_global; v_global; v_global 567db96d56Sopenharmony_ci v_global; v_global; v_global; v_global; v_global 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_cidef read_builtin(trials=trials): 597db96d56Sopenharmony_ci for t in trials: 607db96d56Sopenharmony_ci oct; oct; oct; oct; oct 617db96d56Sopenharmony_ci oct; oct; oct; oct; oct 627db96d56Sopenharmony_ci oct; oct; oct; oct; oct 637db96d56Sopenharmony_ci oct; oct; oct; oct; oct 647db96d56Sopenharmony_ci oct; oct; oct; oct; oct 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_cidef read_classvar_from_class(trials=trials, A=A): 677db96d56Sopenharmony_ci A.x = 1 687db96d56Sopenharmony_ci for t in trials: 697db96d56Sopenharmony_ci A.x; A.x; A.x; A.x; A.x 707db96d56Sopenharmony_ci A.x; A.x; A.x; A.x; A.x 717db96d56Sopenharmony_ci A.x; A.x; A.x; A.x; A.x 727db96d56Sopenharmony_ci A.x; A.x; A.x; A.x; A.x 737db96d56Sopenharmony_ci A.x; A.x; A.x; A.x; A.x 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_cidef read_classvar_from_instance(trials=trials, A=A): 767db96d56Sopenharmony_ci A.x = 1 777db96d56Sopenharmony_ci a = A() 787db96d56Sopenharmony_ci for t in trials: 797db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 807db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 817db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 827db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 837db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_cidef read_instancevar(trials=trials, a=C(1)): 867db96d56Sopenharmony_ci for t in trials: 877db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 887db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 897db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 907db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 917db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_cidef read_instancevar_slots(trials=trials, a=B(1)): 947db96d56Sopenharmony_ci for t in trials: 957db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 967db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 977db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 987db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 997db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_cidef read_namedtuple(trials=trials, D=namedtuple('D', ['x'])): 1027db96d56Sopenharmony_ci a = D(1) 1037db96d56Sopenharmony_ci for t in trials: 1047db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 1057db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 1067db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 1077db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 1087db96d56Sopenharmony_ci a.x; a.x; a.x; a.x; a.x 1097db96d56Sopenharmony_ci 1107db96d56Sopenharmony_cidef read_boundmethod(trials=trials, a=A()): 1117db96d56Sopenharmony_ci for t in trials: 1127db96d56Sopenharmony_ci a.m; a.m; a.m; a.m; a.m 1137db96d56Sopenharmony_ci a.m; a.m; a.m; a.m; a.m 1147db96d56Sopenharmony_ci a.m; a.m; a.m; a.m; a.m 1157db96d56Sopenharmony_ci a.m; a.m; a.m; a.m; a.m 1167db96d56Sopenharmony_ci a.m; a.m; a.m; a.m; a.m 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_cidef write_local(trials=trials): 1197db96d56Sopenharmony_ci v_local = 1 1207db96d56Sopenharmony_ci for t in trials: 1217db96d56Sopenharmony_ci v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1 1227db96d56Sopenharmony_ci v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1 1237db96d56Sopenharmony_ci v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1 1247db96d56Sopenharmony_ci v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1 1257db96d56Sopenharmony_ci v_local = 1; v_local = 1; v_local = 1; v_local = 1; v_local = 1 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_cidef make_nonlocal_writer(): 1287db96d56Sopenharmony_ci v_nonlocal = 1 1297db96d56Sopenharmony_ci def inner(trials=trials): 1307db96d56Sopenharmony_ci nonlocal v_nonlocal 1317db96d56Sopenharmony_ci for t in trials: 1327db96d56Sopenharmony_ci v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1 1337db96d56Sopenharmony_ci v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1 1347db96d56Sopenharmony_ci v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1 1357db96d56Sopenharmony_ci v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1 1367db96d56Sopenharmony_ci v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1; v_nonlocal = 1 1377db96d56Sopenharmony_ci inner.__name__ = 'write_nonlocal' 1387db96d56Sopenharmony_ci return inner 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ciwrite_nonlocal = make_nonlocal_writer() 1417db96d56Sopenharmony_ci 1427db96d56Sopenharmony_cidef write_global(trials=trials): 1437db96d56Sopenharmony_ci global v_global 1447db96d56Sopenharmony_ci for t in trials: 1457db96d56Sopenharmony_ci v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1 1467db96d56Sopenharmony_ci v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1 1477db96d56Sopenharmony_ci v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1 1487db96d56Sopenharmony_ci v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1 1497db96d56Sopenharmony_ci v_global = 1; v_global = 1; v_global = 1; v_global = 1; v_global = 1 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_cidef write_classvar(trials=trials, A=A): 1527db96d56Sopenharmony_ci for t in trials: 1537db96d56Sopenharmony_ci A.x = 1; A.x = 1; A.x = 1; A.x = 1; A.x = 1 1547db96d56Sopenharmony_ci A.x = 1; A.x = 1; A.x = 1; A.x = 1; A.x = 1 1557db96d56Sopenharmony_ci A.x = 1; A.x = 1; A.x = 1; A.x = 1; A.x = 1 1567db96d56Sopenharmony_ci A.x = 1; A.x = 1; A.x = 1; A.x = 1; A.x = 1 1577db96d56Sopenharmony_ci A.x = 1; A.x = 1; A.x = 1; A.x = 1; A.x = 1 1587db96d56Sopenharmony_ci 1597db96d56Sopenharmony_cidef write_instancevar(trials=trials, a=C(1)): 1607db96d56Sopenharmony_ci for t in trials: 1617db96d56Sopenharmony_ci a.x = 1; a.x = 1; a.x = 1; a.x = 1; a.x = 1 1627db96d56Sopenharmony_ci a.x = 1; a.x = 1; a.x = 1; a.x = 1; a.x = 1 1637db96d56Sopenharmony_ci a.x = 1; a.x = 1; a.x = 1; a.x = 1; a.x = 1 1647db96d56Sopenharmony_ci a.x = 1; a.x = 1; a.x = 1; a.x = 1; a.x = 1 1657db96d56Sopenharmony_ci a.x = 1; a.x = 1; a.x = 1; a.x = 1; a.x = 1 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_cidef write_instancevar_slots(trials=trials, a=B(1)): 1687db96d56Sopenharmony_ci for t in trials: 1697db96d56Sopenharmony_ci a.x = 1; a.x = 1; a.x = 1; a.x = 1; a.x = 1 1707db96d56Sopenharmony_ci a.x = 1; a.x = 1; a.x = 1; a.x = 1; a.x = 1 1717db96d56Sopenharmony_ci a.x = 1; a.x = 1; a.x = 1; a.x = 1; a.x = 1 1727db96d56Sopenharmony_ci a.x = 1; a.x = 1; a.x = 1; a.x = 1; a.x = 1 1737db96d56Sopenharmony_ci a.x = 1; a.x = 1; a.x = 1; a.x = 1; a.x = 1 1747db96d56Sopenharmony_ci 1757db96d56Sopenharmony_cidef read_list(trials=trials, a=[1]): 1767db96d56Sopenharmony_ci for t in trials: 1777db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1787db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1797db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1807db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1817db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1827db96d56Sopenharmony_ci 1837db96d56Sopenharmony_cidef read_deque(trials=trials, a=deque([1])): 1847db96d56Sopenharmony_ci for t in trials: 1857db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1867db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1877db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1887db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1897db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1907db96d56Sopenharmony_ci 1917db96d56Sopenharmony_cidef read_dict(trials=trials, a={0: 1}): 1927db96d56Sopenharmony_ci for t in trials: 1937db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1947db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1957db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1967db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1977db96d56Sopenharmony_ci a[0]; a[0]; a[0]; a[0]; a[0] 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_cidef read_strdict(trials=trials, a={'key': 1}): 2007db96d56Sopenharmony_ci for t in trials: 2017db96d56Sopenharmony_ci a['key']; a['key']; a['key']; a['key']; a['key'] 2027db96d56Sopenharmony_ci a['key']; a['key']; a['key']; a['key']; a['key'] 2037db96d56Sopenharmony_ci a['key']; a['key']; a['key']; a['key']; a['key'] 2047db96d56Sopenharmony_ci a['key']; a['key']; a['key']; a['key']; a['key'] 2057db96d56Sopenharmony_ci a['key']; a['key']; a['key']; a['key']; a['key'] 2067db96d56Sopenharmony_ci 2077db96d56Sopenharmony_cidef list_append_pop(trials=trials, a=[1]): 2087db96d56Sopenharmony_ci ap, pop = a.append, a.pop 2097db96d56Sopenharmony_ci for t in trials: 2107db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop() 2117db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop() 2127db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop() 2137db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop() 2147db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop() 2157db96d56Sopenharmony_ci 2167db96d56Sopenharmony_cidef deque_append_pop(trials=trials, a=deque([1])): 2177db96d56Sopenharmony_ci ap, pop = a.append, a.pop 2187db96d56Sopenharmony_ci for t in trials: 2197db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop() 2207db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop() 2217db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop() 2227db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop() 2237db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop() 2247db96d56Sopenharmony_ci 2257db96d56Sopenharmony_cidef deque_append_popleft(trials=trials, a=deque([1])): 2267db96d56Sopenharmony_ci ap, pop = a.append, a.popleft 2277db96d56Sopenharmony_ci for t in trials: 2287db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); 2297db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); 2307db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); 2317db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); 2327db96d56Sopenharmony_ci ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); ap(1); pop(); 2337db96d56Sopenharmony_ci 2347db96d56Sopenharmony_cidef write_list(trials=trials, a=[1]): 2357db96d56Sopenharmony_ci for t in trials: 2367db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2377db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2387db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2397db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2407db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2417db96d56Sopenharmony_ci 2427db96d56Sopenharmony_cidef write_deque(trials=trials, a=deque([1])): 2437db96d56Sopenharmony_ci for t in trials: 2447db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2457db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2467db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2477db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2487db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2497db96d56Sopenharmony_ci 2507db96d56Sopenharmony_cidef write_dict(trials=trials, a={0: 1}): 2517db96d56Sopenharmony_ci for t in trials: 2527db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2537db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2547db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2557db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2567db96d56Sopenharmony_ci a[0]=1; a[0]=1; a[0]=1; a[0]=1; a[0]=1 2577db96d56Sopenharmony_ci 2587db96d56Sopenharmony_cidef write_strdict(trials=trials, a={'key': 1}): 2597db96d56Sopenharmony_ci for t in trials: 2607db96d56Sopenharmony_ci a['key']=1; a['key']=1; a['key']=1; a['key']=1; a['key']=1 2617db96d56Sopenharmony_ci a['key']=1; a['key']=1; a['key']=1; a['key']=1; a['key']=1 2627db96d56Sopenharmony_ci a['key']=1; a['key']=1; a['key']=1; a['key']=1; a['key']=1 2637db96d56Sopenharmony_ci a['key']=1; a['key']=1; a['key']=1; a['key']=1; a['key']=1 2647db96d56Sopenharmony_ci a['key']=1; a['key']=1; a['key']=1; a['key']=1; a['key']=1 2657db96d56Sopenharmony_ci 2667db96d56Sopenharmony_cidef loop_overhead(trials=trials): 2677db96d56Sopenharmony_ci for t in trials: 2687db96d56Sopenharmony_ci pass 2697db96d56Sopenharmony_ci 2707db96d56Sopenharmony_ci 2717db96d56Sopenharmony_ciif __name__=='__main__': 2727db96d56Sopenharmony_ci 2737db96d56Sopenharmony_ci from timeit import Timer 2747db96d56Sopenharmony_ci 2757db96d56Sopenharmony_ci for f in [ 2767db96d56Sopenharmony_ci 'Variable and attribute read access:', 2777db96d56Sopenharmony_ci read_local, read_nonlocal, read_global, read_builtin, 2787db96d56Sopenharmony_ci read_classvar_from_class, read_classvar_from_instance, 2797db96d56Sopenharmony_ci read_instancevar, read_instancevar_slots, 2807db96d56Sopenharmony_ci read_namedtuple, read_boundmethod, 2817db96d56Sopenharmony_ci '\nVariable and attribute write access:', 2827db96d56Sopenharmony_ci write_local, write_nonlocal, write_global, 2837db96d56Sopenharmony_ci write_classvar, write_instancevar, write_instancevar_slots, 2847db96d56Sopenharmony_ci '\nData structure read access:', 2857db96d56Sopenharmony_ci read_list, read_deque, read_dict, read_strdict, 2867db96d56Sopenharmony_ci '\nData structure write access:', 2877db96d56Sopenharmony_ci write_list, write_deque, write_dict, write_strdict, 2887db96d56Sopenharmony_ci '\nStack (or queue) operations:', 2897db96d56Sopenharmony_ci list_append_pop, deque_append_pop, deque_append_popleft, 2907db96d56Sopenharmony_ci '\nTiming loop overhead:', 2917db96d56Sopenharmony_ci loop_overhead]: 2927db96d56Sopenharmony_ci if isinstance(f, str): 2937db96d56Sopenharmony_ci print(f) 2947db96d56Sopenharmony_ci continue 2957db96d56Sopenharmony_ci timing = min(Timer(f).repeat(7, 1000)) 2967db96d56Sopenharmony_ci timing *= 1000000 / (len(trials) * steps_per_trial) 2977db96d56Sopenharmony_ci print('{:6.1f} ns\t{}'.format(timing, f.__name__)) 298