Поделитесь плиз ссылкой на best practices для питона, что-то типа Мейерса для с++.
И есть ли для питона что-то типа буста/cpan, то есть набор библиотек, дабы не заниматься производством велосипедов в промышленных масштабах.
... << RSDN@Home 1.2.0 alpha 4 rev. 1102>>
"Бог не терпит голой сингулярности" -- Роджер Пенроуз
Здравствуйте, CiViLiS, Вы писали:
CVL>Поделитесь плиз ссылкой на best practices для питона, что-то типа Мейерса для с++. CVL>И есть ли для питона что-то типа буста/cpan, то есть набор библиотек, дабы не заниматься производством велосипедов в промышленных масштабах.
Здравствуйте, CiViLiS, Вы писали:
CVL>И есть ли для питона что-то типа буста/cpan, то есть набор библиотек, дабы не заниматься производством велосипедов в промышленных масштабах.
вопрос может и боянный, но только ответа я там не нашел. Получается кроме двух книг ("Язык программирования Python" и "Dive Into Python") и нету ничего? Ок, будем изучать статьи с Python.ru и задавать тупые вопросы тут
Например как посчитать количество строк в файле? Могу предложить два варианта: открыть файл в памяти и сделать поиск по "\n\r", или сделать типа
n = 0;
for line in f:
n++
Какой из них более эффективный, с учетом того что понадобится второй проход? Файлы примерно по 10 метров. Или в контексте питона вопрос об эффективности не принято задавать?
... << RSDN@Home 1.2.0 alpha 4 rev. 1102>>
"Бог не терпит голой сингулярности" -- Роджер Пенроуз
Здравствуйте, CiViLiS, Вы писали:
CVL>Например как посчитать количество строк в файле? Могу предложить два варианта: открыть файл в памяти и сделать поиск по "\n\r", или сделать типа CVL>
CVL>n = 0;
CVL>for line in f:
CVL> n++
CVL>
CVL>Какой из них более эффективный, с учетом того что понадобится второй проход? Файлы примерно по 10 метров. Или в контексте питона вопрос об эффективности не принято задавать?
Ответ будет тот же что и для perl, C++ и др. ЯП
Re: [Python] Best practices
От:
Аноним
Дата:
07.05.09 07:17
Оценка:
Здравствуйте, CiViLiS, Вы писали:
CVL>Поделитесь плиз ссылкой на best practices для питона, что-то типа Мейерса для с++. CVL>И есть ли для питона что-то типа буста/cpan, то есть набор библиотек, дабы не заниматься производством велосипедов в промышленных масштабах.
из первых рук. Плюс есть еще блог князя гвидона, ссылку не знаю
CVL>вопрос может и боянный, но только ответа я там не нашел. Получается кроме двух книг ("Язык программирования Python" и "Dive Into Python") и нету ничего?
есть, конечно.. но либо старое, либо на английском
вот например, любопытная книга: http://rapidshare.com/files/75872398/Addison_Wesley_Text_Processing_In_Python.zip
на русском книг почти нет..
а "лучшие практики" можно поискать в блогах.. люди часто пишут по поводу разных решений при использовании питона..
CVL>Ок, будем изучать статьи с Python.ru и задавать тупые вопросы тут
правильно.. на самом деле это всё заговор.. чтоб форум "Динамические языки" не загнулся без вопросов..
Здравствуйте, CiViLiS, Вы писали:
CVL>Поделитесь плиз ссылкой на best practices для питона, что-то типа Мейерса для с++. http://code.activestate.com/recipes/langs/python/ CVL>И есть ли для питона что-то типа буста/cpan, то есть набор библиотек, дабы не заниматься производством велосипедов в промышленных масштабах. http://pypi.python.org/
python.ru уже сто лет не обновлялся, похоже брошенный, смотрите лучше http://python.su/ там и форум активный
Здравствуйте, antiPooH, Вы писали:
PH>python.ru уже сто лет не обновлялся, похоже брошенный, смотрите лучше http://python.su/ там и форум активный
Я на python.ru с пару месяцев назад заходил, так опера тут же выдала, что мне пытаются установить какое-то приложение. Проверять что к чему я не стал, просто ответил Cancel и больше туда не суюсь. Рулит
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Здравствуйте, achmed, Вы писали:
A>Здравствуйте, kochetkov.vladimir, Вы писали:
CVL>>>Например как посчитать количество строк в файле?
A>В чем согласены с моим отчетом?
Ну, скажем так, я не согласен со столь мутной формулировкой из которой непонятно, какой именно ответ (единый для всех ЯП) имелся ввиду
Здравствуйте, CiViLiS, Вы писали:
CVL>Поделитесь плиз ссылкой на best practices для питона, что-то типа Мейерса для с++. CVL>И есть ли для питона что-то типа буста/cpan, то есть набор библиотек, дабы не заниматься производством велосипедов в промышленных масштабах.
Здравствуйте, neFormal, Вы писали:
F>есть, конечно.. но либо старое, либо на английском
Я не привиредлив
F>вот например, любопытная книга: http://rapidshare.com/files/75872398/Addison_Wesley_Text_Processing_In_Python.zip
спасибо почитаю.
F>а "лучшие практики" можно поискать в блогах.. люди часто пишут по поводу разных решений при использовании питона..
К сожалению, в данный момент нету времени на поиски по различным блогам, да и знаний/критериев для поиска. Хотелось бы найти место, где это уже до меня кто нить собрал
F>правильно.. на самом деле это всё заговор.. чтоб форум "Динамические языки" не загнулся без вопросов..
ок
... << RSDN@Home 1.2.0 alpha 4 rev. 1208>>
"Бог не терпит голой сингулярности" -- Роджер Пенроуз
Здравствуйте, SHorrty, Вы писали:
SH>Здравствуйте, CiViLiS, Вы писали:
CVL>>Поделитесь плиз ссылкой на best practices для питона, что-то типа Мейерса для с++. CVL>>И есть ли для питона что-то типа буста/cpan, то есть набор библиотек, дабы не заниматься производством велосипедов в промышленных масштабах.
SH>Много рецептов есть в этой книге: Python Cookbook.
Здравствуйте, kochetkov.vladimir, Вы писали:
CVL>>Например как посчитать количество строк в файле?
KV>С т.з. красоты кода и производительности, можно запитонить что-нибудь типа этого:
Здравствуйте, FR, Вы писали:
FR>с обоих т. з. лучше так : FR>
FR>print sum( (1 for x in open("test.txt")) )
FR>
Не знаю как с точки зрения памяти, но вот с точки зрения производительности этот способ сливает в семь раз всем остальным:
метод
время
краткое описание метода
xline
0.703
for l in input
xline2
0.718
for l in input.xreadlines()
xline2a
1.001
for l in input.readlines()
xline3
6.680
sum(1 for x in input)
xline4
0.797
len(input.xreadlines())
xline4a
0.860
len(input.readlines())
Версия питона 2.6.1, запускал под виндой, компилял с и без оцией -O (от нее результаты практически не зависят):
import profile
def xline(filename, showResult):
input = open(filename, 'r')
count = 0
for l in input:
count += 1
if showResult:
print count
def xline2(filename, showResult):
input = open(filename, 'r')
count = 0
for l in input.xreadlines():
count = count + 1
if showResult:
print count
def xline2a(filename, showResult):
input = open(filename, 'r')
count = 0
for l in input.readlines():
count = count + 1
if showResult:
print count
def xline3(filename, showResult):
input = open(filename, 'r')
count = sum(1 for x in input)
if showResult:
print count
def xline4(filename, showResult):
input = open(filename, 'r')
count = len(input.readlines())
if showResult:
print count
def xline4a(filename, showResult):
input = open(filename, 'r')
count = len(input.readlines())
if showResult:
print count
filename = '3.log'
xline(filename, True)
showResult = False;
profile.run('xline(filename, showResult)')
profile.run('xline2(filename, showResult)')
profile.run('xline2a(filename, showResult)')
profile.run('xline3(filename, showResult)')
profile.run('xline4(filename, showResult)')
profile.run('xline4a(filename, showResult)')
Возможно такой слив из-за вот этого "539498 function calls in 6.680 CPU seconds". У все остальных пишет 5-7 вызовов.
Запускал тесты не один раз, результаты каждый раз чуть другие но тенденция сохраняется.
... << RSDN@Home 1.2.0 alpha 4 rev. 1214>>
"Бог не терпит голой сингулярности" -- Роджер Пенроуз
CVL>def xline4(filename, showResult):
CVL> input = open(filename, 'r')
CVL> count = len(input.readlines()) # должно было быть xreadlines, но это естественно не возможно
CVL> if showResult:
CVL> print count
CVL>
... << RSDN@Home 1.2.0 alpha 4 rev. 1214>>
"Бог не терпит голой сингулярности" -- Роджер Пенроуз
Здравствуйте, CiViLiS, Вы писали:
CVL>Здравствуйте, FR, Вы писали:
FR>>с обоих т. з. лучше так : FR>>
FR>>print sum( (1 for x in open("test.txt")) )
FR>>
CVL>Не знаю как с точки зрения памяти, но вот с точки зрения производительности этот способ сливает в семь раз всем остальным:
Померяй не профайлером а напрямую (хоть clock() из time) будут чудные открытия
Можешь также поменять profile на cProfile но это от "эффекта наблюдателя" сильно не избавит.