python
библиотечная функция namedtuple
из collections
со ссылкой https://github.com/python/cpython/blob/master/Lib/collections/init.py
def namedtuple(typename, field_names, *, verbose=False, rename=False, module=None):
# Validate the field names. At the user's option, either generate an error
# message or automatically replace the field name with a valid name.
if isinstance(field_names, str):
field_names = field_names.replace(',', ' ').split()
В последней строке кода выше replace(',', ' ').split()
отличается от split(',')
. Мне интересно, в чем причина этого.
Вот тестовый код для измерения затрат времени:
from random import randrange
def create_str(n):
a = []
for _i in range(n):
a.append(str(randrange(101)))
return ','.join(a)
s = create_str(1000)
# print(s)
def test_a():
s.split(',')
def test_b():
s.replace(',', ' ').split()
if __name__ == '__main__':
import timeit
print(['test_a: ', timeit.timeit("test_a()", setup="from __main__ import test_a")])
print(['test_b: ', timeit.timeit("test_b()", setup="from __main__ import test_b")])
Вывод из вышеперечисленного:
['test_a: ', 59.938546671997756]
['test_b: ', 68.51630863297032]
s = create_str(10)
получил следующее:
['test_a: ', 0.9246872899821028]
['test_b: ', 1.2178910280345008]
s = create_str(100)
получил следующее:
['test_a: ', 6.570624853018671]
['test_b: ', 7.8685859580291435]
test_b
быстрее в любом случае.
Обновлено:
https://docs.python.org/3/library/collections.html#collections.namedtuple упомянул следующее:
Имена полей представляют собой последовательность строк, таких как ['x', 'y']. В качестве альтернативы, field_names может быть одной строкой, в которой каждое имя поля разделено пробелами и / или запятыми, например, «xy» или «x, y».