Почему не работает timeit Python?
result = [[], [], [], []]
methods = [
'method1(texts_array[y])',
'method2(texts_array[y])',
'method3(texts_array[y])',
'method4(texts_array[y])',
]
texts_array = [
'wergwergwreg',
'wrggtvxfgafd',
'hwrthwrthrtb',
'qerdcjuiuolj',
]
def method1(text):
print(text + '123' + text)
def method2(text):
print(text + '123')
def method3(text):
print(text)
def method4(text):
print(text + text)
def method_name():
for x in range(len(methods)):
for y in range(len(texts_array)):
result[x].append(timeit.timeit(methods[x], globals=globals(), number=100) / 100)
method_name()
Почему не работает timeit? Появляется ошибка: NameError: name 'y' is not defined.
По идее, я ведь написал globals=globals().
Если двойной цикл вынести из метода, тогда все будет работать, но так не подходит, нужно, чтобы он был в методе.
Ответы (1 шт):
Автор решения: GrAnd
→ Ссылка
У вас y - это локальная переменная. Её можно передать, объединив globals() c locals(). Но дальше у вашего кода будет ещё много ошибок.
Так что вот рабочий пример:
import timeit
result = []
methods = [
'method1(text)',
'method2(text)',
'method3(text)',
'method4(text)',
]
texts_array = [
'wergwergwreg',
'wrggtvxfgafd',
'hwrthwrthrtb',
'qerdcjuiuolj',
]
setup="""
def method1(text):
print(text + '123' + text)
def method2(text):
print(text + '123')
def method3(text):
print(text)
def method4(text):
print(text + text)
"""
def method_name():
number = 100
for method in methods:
result.append([])
for text in texts_array:
result[-1].append(timeit.timeit(method, globals={**globals(), **locals()}, setup=setup, number=number) / number)
method_name()
print(result)