Google Analytics

Показаны сообщения с ярлыком Python. Показать все сообщения
Показаны сообщения с ярлыком Python. Показать все сообщения

воскресенье, 29 августа 2010 г.

Приёмы программирования на Python: обработка списков.

Эффективность программиста сильно зависит от того, насколько хорошо он знает язык программирования и владеет им.Важно привить себе правильные приёмы программирования. И встретив ПРАВИЛЬНЫЙ приём, тут же брать его на вооружение.В этой заметке мы рассмотрим использование некоторых приёмов обработки списков.
Допустим, у нас есть список:
my_list = ["Andrew","Joan","Jack","Betty"]
Для того, что-бы перебрать его, поэлементно мы используем цикл for:
for name in my_list:
 print name

Получение одновременно индекса и значение элемента из списка.

А теперь представьте, что вам нужно каждый раз получать индекс элемента и значение. В эпоху моего раннего чайничества (боюсь и теперь я многого не знаю) - я использовал такие варианты как получение индекса как метод списка
index()
и конструкцию:
for index in xrange(0,len(my_list) ):
 print "{0} on position {1}".format(my_list[index],index)
Если этот метод кривой до ужаса, то вариант с
index()
ещё и создаёт трудноуловимую ошибку. Если в списке есть пару одинаковых элементов - вы получите каждый раз при попадании на повторяющийся элемент индекс ближайшего такого элемента:
for name in my_list:
 print "{0} on position {1}".format(name,my_list.index(name))
А ведь так просто сделать правильно:
for index, name in enumerate(my_list):
 print "{0} on position {1}".format(name,index)

Перебор в цикле for двух списков:

Если у вас есть два списка, значения из которых надо последовательно считать в цикле одновременно, используйте функцию zip().Код примера:
fruits = ['Grape', 'Apple', 'Lime']
colors = ['violet', 'red', 'green']

for fruit, color in zip(fruits, colors):
 print "The color of {0} is {1}".format(fruit,color)
Что же возвращает функция zip? Смотрим на её результат:
[('Grape', 'Violet'), ('Apple', 'Red'), ('Lime', 'Green')]
Сюрприз!На выходе мы видим список из последовательностей вида (fruit,color).

Сортировка списка

Функция sorted() - возвращает отсортированный список.Часто используется в виде:
print sorted(set(fruits))
Функция set() возвращает последовательность.Если при вызове ей передать последовательность, она возьмёт из неё все записи, по сути вернув копию списка или иной последовательности.
Функция reversed() выстраивает записи в обратном порядке.Пример:
print list(reversed(fruits))
Помни!Только правильные приёмы программирования сделают твой труд продуктивным, а процесс написания программ приятным. И не будет отчаянного желания спрятать исходники от глаз более продвинутых программистов.Ведь хороший программист — это тот программист, исходники которого приятно читать и несложно править. Не стесняйтесь пользоваться поиском и задавать вопросы. И я надеюсь что вам повезёт не повторять ошибок многих чайников, изобретавших велосипед из=за плохого знания своего программерского инструментария.

суббота, 28 августа 2010 г.

Приёмы программирования на Python: Вступление

Я думаю, не секрет, что программу можно писать легко и с удовольствием, а можно мучатся и изобретать велосипеды. Что же отличает успешного программиста от его незадачливого коллеги - вечного конструктора ужасных и монструозных велосипедов?Плохое знание языка, стандартных библиотек, и отсутствие хороших привычек программирования.


Мы все стоим на плечах гигантов.На плечах тех, кто изобрёл множество вещей, которыми мы ежедневно пользуемся. И используем приёмы в работе, изобретённые не нами. И было бы наивно отказываться от опыта гигантов программерской мысли. Если они уже столкнулись с какой-то проблемой, которую сейчас решаете вы - надо просто узнать как её уже решали до вас. В 90% случаев вы найдёте оптимальное решение. Такие общепризнанные способы решения задач - это стандартные приёмы программирования.Просто набор хороших привычек.Которые сберегают кучу времени и сил, и уберегают от ошибок.


Я решил записывать все подсмотренные где-то хорошие привычки программирования на питоне. И оформлять их в виде цикла публикаций. Я назову этот цикл публикаций:"Приёмы программирования на Python".Надеюсь они пригодятся ещё кому-то кроме меня.

воскресенье, 13 июня 2010 г.

Если ваш пакетный менеджер(Synaptic или Aptitude) ругается на отсутсвие ключей для добавленнных в /etc/apt/sources.list источников пакетов, и вам это надоело - используйте простенький скрипт на замечательном языке Python , написанный мной примерно после трёхсотого напоминания о непроверенных источниках ПО для моего любимого Ubuntu.

Создаём файл keyadder.py такого содержания:

#!/usr/bin/env python
# -*- coding: utf8 -*-
#Скрипт для добавления ключей репозиториям,добавленным вами вручную.
#Опупликовано по лицензии GPL V2 или выше.

import os.path,sys,string,commands,re

print "Пожалуйста запаситесь терпением,мы получаем недостающие ключи...\nЭто довольно долгий процесс,особенно на слабых интернет каналах.\n"
outp = commands.getoutput("sudo apt-get update ")

if re.search( ur"NO_PUBKEY", outp ):

        outp = outp.split("\n")

        for line in outp:
                match = re.search( ur"[/nA-Z0-9]{16}", line )
                if match > 0:
                        key = match.group()
          print "Ключ " + key + " успешно добавлен."
          commandOutput = commands.getoutput("sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com " + key + " ")
 
else:
        print "Поздравляем!У вас все репозитории имеют ключ верификации.\n"
 quit()

Делаем его исполняемым при помощи chmode. Запуск производим из консоли при помощи команды:

sudo keyadder.py
Или:
sudo python keyadder.py

Будьте осторожны, не стоит использовать ПО из PPA авторов, которым у вас нет доверия. Если есть сомнения, лучше сами заведите себе свой PPA , и собирайте важные для себя пакеты в нём.