- Главная
- Форум
- Программирование
- Программирование на Python
- Ноу хау - от мастеров на заметку » Страница 1
Ноу хау - от мастеров на заметку » Страница 1
-Программирование на Python
В этой теме предлагаю публиковать свои прикольные решения частых, наболевших или сложных, короче, повседневных проблем. Примеры рецептов можно найти тут . Активно используйте прикрепленные файлы! Так будет удобнее и надежнее. В сообщении - описание, в файле - решение =)
тема создана:
- 4
- 1
- 2
- 3
- 4
- 5
Пофиксил некоторые неточности.
Спасибо Krust'у. ![]()
Параллельный импорт вспомогательных модулей.
Подробно - в прикр. файле.
Прикрепленный файл #1: parallel_import_by_virtuos86_in_0401201033310_f.zip (1.27 кб)
Интересно. Когда народу надоест писать True вместо того чтоб просто 1 написать... Alen, тогда бы уж ещё способы написал...
y={'a':0, 'b':3}.get(x, None) # если в словаре есть ключ x, y=value, иначе y=None
-------
y=new_y or y # если new_y ложь, остается старое значение y
-------
y=('a','b')[x] # если x==1:y='b'. Частный случай, смена языка note((u'Hi !',ru('Привет!'))[lang])
-------
def add_y():y=(y+1,0)[y==6] # в функции увеличиваем y на 1 пока не достигнет 6, потом он снова 0.
-------
-------------
добавлено в 21.10: Делать было нечего...Вот:
Класс, наследованный от типа словаря. Словарь получил новые методы
# heap.py,by Krust (31,12,2009)
class heap(dict):
def __init__(self, default={}):
self.update(default)
def __call__(self, el=None):
h=self.items()
h.sort()
if el is None:return h # items
else:return [x[el] for x in h] # key or value
def index(self, arg, el=0):
# if el is 0: return key, if 1 return value
return self(el).index(arg)
def keys_v(self,value):
return [item[0] for item in self() if item[1]==value]
if __name__=='__main__':
m=heap({'a':2, 'c':4, 'b':1}) # создание словаря с дополнительными методами
# дальше с m можно работать, как с обычным словарем. Кроме того дополнительно:
print m() # то же что m.items(), только сортированный
print m(0) # ключи словаря, сортированные
print m(1) # значения словаря, сортированные по ключам
print m.index('b') # индекс ключа '1' в сортированном списке ключей
print m.index(2,1) # индекс значения 2
print m.keys_v(2) # список ключей, у которых значение равно 2
Функция возвращает список позиций вхождения строки string в текст text.
Необязательные аргументы:
register=1 # учитывать регист букв
edge=1 # искать слово только "целиком" (если подстрока-часть слова в тексте, она не принимается)
def search(text, string, register=None, edge=None):
if not register:text,string=text.lower(),string.lower()
if edge:
def ist(t):
return t.isalpha()+t.isdigit()*2+t.isspace()*4
ed1,ed2,len_string,len_text=ist(string[0]),ist(string[-1]),string.__len__(),text.__len__()
index,find=[],-1
while 1:
find=text.find(string,find+1)
if find<0:break
if edge and ((find>0 and ist(text[find-1])==ed1) or (find+len_string<len_text and ist(text[find+len_string])==ed2)):find+=1;continue
index.append(find)
return index
search(u'Hello word, aga', u'Aga',0,1) # искать без учета регистра, слово целиком
-------------
добавлено в 01.00: Как скачать маленький файл на низком уровне, чтоб не сожрало из за него всю оперативу без urllib и httplib (если хотите, замените e32socket на socket или iapconnect):
#Retrieve.py,by Krust (24,12,2009)
def retrieve(url, path):
host,url=url.split('/',1)
#print host,url
import e32socket,e32
client=e32socket.socket(e32socket.AF_INET, e32socket.SOCK_STREAM,0,None)
client.connect((e32socket.gethostbyname(host),80))
print 'ok connect'
client.send('GET /%s HTTP/1.0\r\nHost: %s\r\nUser-agent: Python\r\n\r\n'%(url, host))
string=client.recv(1024).split('\r\n')
for t in xrange(string.__len__()):
if not string[t] or string[t].isspace():break
print '\r\n'.join(string[:t+1]) # Header
string=['\r\n'.join(string[t+1:])]
while 1:
e32.ao_yield()
t=client.recv(1024)
if not t:break
string.append(t)
import e32posix as ex
f=ex.open(path,ex.O_RDWR|ex.O_TRUNC|ex.O_CREAT)
ex.write(f,''.join(string))
ex.close(f)
print 'Done'
if __name__=='__main__':
retrieve('python.org/images/python-logo.gif', 'c:\\logo_from_python_org.jpg')
это же в прикрепленном файле.
Прикрепленный файл #1: retrieve_by_krust_in_08012010230648_f.zip ( меньше 1кб)
Как записать русское слово в url без urllib.urlencode.
# Функция:
r=lambda t:repr(t.encode('u8')).replace(r'\x','%').upper()
# Пример:
url='www..../register.py/func?name='+r('андрей')
Хотя можно ещё эту функцию из urllib вырезать. Я вырезал вначале. Там кажется из трех функций состоит. Но вот этот метод мне показался короче.
Модуль на чистом Python для компрессии/декомпрессии строк.
Найден на просторах Интернета.
В качестве побочного применения модуль позволяет зашифровывать строки по автоматически генерируемому ключу.
Смотрим код модуля и разбираемся.
В раздел Модули не вижу необходимости помещать, но если будет нужно перемещу.
Прикрепленный файл #1: textprocessor_by_virtuos86_in_17012010102832_f.zip ( меньше 1кб)
Покуда идея python-вики доводится до завершения, ноу-хау сомнительной свежести.
Если собрались переписать какую-нибудь функцию, то ни в коем случае не нужно сразу бросаться править её код. Ни-ни! ![]()
Копируете эту функцию рядышком (не буквально, конечно, а выше или ниже по исходнику), добавляете к её имени какою-нибудь букву (например, из 'foo' получается 'fooX'). Теперь можно смело редактировать её копию, поскольку 'бэкап' всегда под рукой. Напортачили - всегда можно восстановить исходную версию. Да и вообще помогает, когда не нужно держать в памяти её первоначальный вид; что же там, блин, функция делала благополучно, пока вы не решили её 'улучшить'.
=====
Как вариант, можно сделать копию редактируемого файла под другим именем, и открыть её в другом окне|процессе(это если вы в пишете в Ded).
Но копии нужно делать перед глобальными изменениями в большей степени, или если изменения происходят в нескольких местах сразу.
Ну я тож что нибудь этакое про вставку русского текста в программу, например я знаю эти варианты:
def ru(x): return unicode(x, 'u8')
ru=lambda x: unicode(x, 'u8')
- 1
- 2
- --
- 8
- 9
- »

