Полезные советы по Python::Журнал СА 10.2006
www.samag.ru
Журнал «БИТ. Бизнес&Информационные технологии»      
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

ИТ-инфраструктура  

Системы мониторинга ИТ-инфраструктуры-2025

Без мониторинга ИТ-инфраструктуры не обходится ни одна компания, хотя бы потому, что

 Читать далее...

Открытое ПО  

Безопасность Open Source: рискуем или контролируем?

Компания «Кросс технолоджис» изучила, как используется ПО с открытым кодом в компаниях

 Читать далее...

Работа с нейросетью  

Скажи, есть ли у тебя AI, и я скажу, кто ты

Недавно сервис по поиску работы SuperJob выяснил, что каждый второй россиянин уже

 Читать далее...

Работа с Debian  

О Linux с любовью или Debian: через знание к любви

Конечно, одним лишь перечислением замечательных качеств любовь к Linux не возникнет. Для

 Читать далее...

Опрос  

Защита личных и клиентских данных: как мошенники используют ИИ и как защититься?

По данным RED Security, общее число кибератак на российские компании в 2024

 Читать далее...

Опрос  

Облачные инструменты для разработчиков

Эксперты ИТ-отрасли отвечают на вопросы «Системного администратора» > Как с помощью облака сделать

 Читать далее...

Опрос  

Рынок мобильных приложений: что будет актуальным в 2025 году?

Эксперты ИТ-отрасли отвечают на вопросы «Системного администратора» > Ваши прогнозы: чего ожидать от

 Читать далее...

Рынок труда  

Как успешно пройти все этапы собеседования на ИТ-должность?

По оценкам государства, дефицит ИТ-специалистов составляет от 740 тысяч до 1 миллиона

 Читать далее...

Спецпроект «Базальт СПО». Развитие Open Source в России  

Алексей Смирнов: «Сейчас трудно найти программный продукт, в котором нет свободного кода»

Какое будущее ждет свободное ПО? Влияет ли свободная или несвободная разработка на

 Читать далее...

Спецпроект «Базальт СПО». Развитие Open Source в России  

Николай Костригин: «Мы создали Hantis, конвейер автоматизации. Проекты, исследуемые разными инструментами, переходят от одного исполнителя к другому, развиваются, возвращаются к автору, и так по кругу»

О том, как идет работа по повышению безопасности отечественного программного обеспечения, рассказывает

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 7702
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 7961
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 5311
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3390
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 4181
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 4191
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6706
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3536
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3810
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7697
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 11053
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12780
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14556
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9493
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7461
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5736
Комментарии: 4
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4943
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3802
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3478
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3706
Комментарии: 1
Рецензия на книгу «MongoDB в действии»

 Читать далее...

Друзья сайта  

 Полезные советы по Python

Архив номеров / 2006 / Выпуск №10 (47) / Полезные советы по Python

Рубрика: Программирование /  Программирование

Полезные советы по Python

Используйте функцию map()

И не только её. Python предоставляет три мощных функции для обработки последовательностей – map(), filter() и reduce(). Первая позволяет применить к каждому элементу одной или нескольких последовательностей заданную функцию, вторая – получить подпоследовательность по тому или иному критерию, третья – «свернуть» последовательность (например, просуммировать все элементы):

>>> def tostr(a, b):

...              return a + b

...

>>> list = [1,2,3,4,5]

>>> map(str, list)

['1', '2', '3', '4', '5']

>>> filter(lambda i: i>3, list)

[4, 5]

>>> reduce(tostr, list)

15

>>> reduce(tostr, map(str, list))

'12345'

Это не только удобно, но и быстро, поскольку внутренний цикл этих функций реализован на C. Для функции filter() показано применение lambda-функции. Так же можно было бы поступить и в случае с reduce(), но для наглядности оставлен «классический» способ.

Подружитесь с lambda

Иногда возникает необходимость использовать некоторую функцию «локально». В Python использовать безымянную функцию позволяет оператор lambda:

>>> a = lambda a,b: a*a + a*b + b*b

>>> a(2,3)   # аргументы 2 -> a, 3 -> b

19

>>> (lambda a,b: a+b)(2,3)

5

Гораздо больший смысл она приобретает там, где синтаксис требует указать функцию, но определять её оператором def неудобно. Типичный пример – функции обработки последовательностей, описанные в следующем совете.

Складывайте строки вдумчиво

Сложение строк в Python выполняется не слишком быстро. Поэтому если вам нужно получить строку из списка элементов, лучше использовать для этого метод join:

#s = ''

#for i in xrange(1000000):

#      s += str(i)

s = ''.join([str(i) for i in xrange(1000000)])

Последняя строка, помимо того что занимает меньше места в коде, чем предыдущие три (которые закомментированы и соответствуют «стандартному» решению), ещё и отработает процентов на 15 быстрее. Если работать нужно с уже готовой последовательностью, как и бывает на практике, а не генерировать её искусственно, то прирост скорости будет ещё выше.

А вот повсеместный совет вместо strA + strB использовать форматное преобразование ‘%s%s’ % (strA, strB), на практике не подтвердился – по крайней мере, в Python 2.4.3 простое сложение выполнялось примерно на 35% быстрее, чем форматирование. С ростом размера строк этот разрыв сокращается, но даже при сложении строк из 26000 символов традиционное суммирование выполнялось быстрее.

Используйте xrange()

В Python, как известно, нет цикла for в стиле языка C – здесь for выполняет проход по элементам последовательности (в Perl есть похожий оператор – foreach). Поэтому для построения циклов, записываемых, скажем, в Perl как for($i=0; $i < 1000; $i++), в Python используется функция-генератор последовательности – range(), формирующая список целых чисел, по которому затем и выполняется цикл: for i in range(1000).

Однако это неэффективно на больших значениях – ведь сначала нужно создать список, разместить его в памяти, и только затем начнётся обработка цикла. Избежать этого позволяет функция xrange(), которая не формирует последовательность физически, а создаёт объект, который лишь имитирует её, генерируя нужные элементы по мере необходимости.

Благодаря тому, что внутренне xrange() реализована на C, она выполняется довольно быстро. А поскольку последовательность не требует размещения в памяти, можно писать даже такие циклы:

for i in xrange(10000000):

             . . . .

Использование range() с таким значением привело бы систему к непрерывному «свопингу».

Выносите максимум за пределы цикла

Истина, известная любому студенту. В Python за пределы цикла можно вынести даже определение методов:

list = []

func = list.append

for i in xrange(5000000):

   #     list.append(i)

         func(i)

Казалось бы – какая мелочь! Но благодаря тому, что на каждой итерации цикла интерпретатору не приходится искать метод append() у объекта list, этот код выполняется быстрее «обычного» почти на 30% (на реальных, более полезных циклах, конечно, прирост скорости будет не столь ошеломительным).

Живите в ногу со временем

19 сентября выпущен Python 2.5. Помимо ряда обычных для любой новой версии улучшений и исправлений ошибок, в синтаксисе языка появился ряд новых конструкций, а также заявлена более высокая скорость работы, особенно с Unicode-строками.

Этот релиз объявлен как пригодный для промышленного использования, так что если вы желаете воспользоваться всеми этими преимуществами – смело ставьте новую версию.

Сергей Супрунов


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru