четверг, 21 апреля 2011 г.

Python. Срезы и передача массивов в функцию.

В python присутствует широко используемая операция среза, которая позволяет удобно получить из массива или списка набор элементов.

Например list[1:5] вернёт список из элементов списка list с первого по пятый, а list[3:] - все элементы list, начиная с третьего.

Есть интересный момент (оговорюсь, что я новичок в питоне) - если мы хотим, как в Си, передать в функцию часть массива по указателю, начиная с определенного элемента, то по-простому мы делаем так:

foo(list[n:])

в результате чего производится операция среза, генерируется новый массив из элементов лист (занимается память и тратятся ресурсы), и уже этот массив по ссылке передается функции.

Если массив - это массив строк, то при с увеличением размера файла это даст увеличение времени работы в геометрической прогрессии.

Как же сразу получить ссылку на часть массива, без создания нового?

Похоже, что никак, т.к. можно передать только ссылку на объект, а его надо, соответственно, сначала создать.

Пришлось слегка подкорректировать алгоритм так, что вызываем

foo(list,n)

и уже внутри функции обрабатываем с учетом индекса.

Вопрос, есть ли лучшее решение?