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

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

Мониторинг  

Какая задача мониторинга отнимает больше всего времени?

Многие системные администраторы тратят до 30% рабочего времени на рутину мониторинга. Но

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

Рынок труда  

Какие навыки вы хотите развивать в 2026 году?

Рынок труда меняется быстро. Еще вчера его называли рынком соискателей, а сегодня

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

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

От сисадмина до архитектора: книги, которые прокачают ваш стек в этом году

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

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

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

Автоматизируем рутину: что реально работает?

Многие сисадмины автоматизировали что-то за последний год. Но далеко не все остались

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

Защита ИТ-системы  

Практическая защита: что вы внедрили и что мешает?

Какие меры безопасности реально внедрить в реальных условиях – и что не

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

Вопрос-ответ  

Обеспечиваем безопасную эксплуатацию базы данных

Что для вас чаще всего является причиной инцидентов с БД? Как вы

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

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

От «безопасного» Linux до Контролируемого взлома

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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