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

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

Интеграция Open Source-решений  

Open Source в облачной среде

Облачные решения становятся всё более популярными в мире. Компании стремятся использовать их для

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

Автоматизация  

Нейросеть вам в руки! Как использовать ИИ для автоматизации задач

Использование ИИ для автоматизации задач помогает компании получить конкурентное преимущество, поскольку объединение

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

Рынок труда  

Специалист по этическому ИИ, инженер по квантовым вычислениям или аналитик по метавселенной?

Новые тенденции в развитии ИТ могут привести к возникновению новых специальностей в

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

Книжная полка  

Учитесь убеждать и побеждать

Издательство «БХВ», как всегда, порадовало своих читателей хорошими книжными новинками. Кроме популярных

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

Сетевая инфраструктура  

Как удаленная работа меняет подход к сетевой инфраструктуре?

С увеличением числа сотрудников, работающих из дома, организации сталкиваются с необходимостью создания

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

Мониторинг  

Какой мониторинг нужен сегодня?

По мнению экспертов ГК InfoWatch, действия сотрудников – самая распространенная причина инцидентов

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

Книжная полка  

Руководство для тех, кто увлечен ИИ, программированием. И дизайном

Накануне лета издательство «БХВ» выпустило книжные новинки, от которых любителям чтения будет

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

Мобильные приложения  

Искусственный интеллект в мобильных приложениях: возможности и перспективы

Обзор современных применений ИИ в мобильных приложениях, анализ перспектив развития этой технологии,

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

ИТ-образование  

Как сделать ИТ-образование эффективным?

Эксперты ИТ-отрасли отвечают на вопросы «СА». Обсуждаем ключевые аспекты для улучшения образовательных

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

Work-life balance  

Как айтишнику найти баланс между работой и личной жизнью?

Обсуждаем инструменты для эффективного управления временем, снижения уровня стресса и достижения гармонии. На

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

Книжная полка  

Всё самое нужное – под одной обложкой

Отличительная черта книжных новинок, выпущенных недавно издательством «БХВ» – это их универсальность. Не просто

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

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

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

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

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

Открытое ПО  

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

03.12.2013г.
Просмотров: 4723
Комментарии: 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