[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.7536 Reply
File: python-logo-master-v3-TM.png
Png, 81.61 KB, 601×203 - Click the image to expand
edit Find source with google Find source with iqdb
python-logo-master-v3-TM.png
8-лет-на-питоне-кун ответит на все ваши вопросы.
>> No.7537 Reply
>>7536
Что там за траблы с версиями 2х и 3х?
Поменяли синтаксис?
>> No.7538 Reply
>>7536
С чего начал кодить ?
>> No.7540 Reply
>>7537
На это тебе ответит и 2+-года-на-питоне-кун. Синтаксис немного изменился, немного по другому работают стандартные вызовы из втроенных библиотек. Но это не главное. Главное, что досточно много софта написано с поддержкой более древних питонов, типа 2.4-2.5(потому что начал писаться в то время), и этот софт пока никто не собирается переписывать(у разработчика все работает же). Поэтому третий питон - это пока такая демо-версия. Можно поставить, поиграться, но полностью на него не перейдешь.
>> No.7542 Reply
File: python_unicode.PNG
Png, 3.76 KB, 529×168 - Click the image to expand
edit Find source with google Find source with iqdb
python_unicode.PNG
>>7540
Что за херня, как бороться?
>> No.7552 Reply
>>7542
Эта херня называется python cannot into unicode. Бороться костылями.
>> No.7554 Reply
>>7552
> Бороться костылями.
Гуглил и ничего толкового не нагуглил, как бороться то?
>> No.7557 Reply
>>7554
Вот из-за такой хренотени и придумали python3.

s=u'хуита'
import codecs
print codecs.encode(s, 'utf-8')
>> No.7558 Reply
>>7557
Спасибо.
>> No.7562 Reply
File: 1203328550096.jpg
Jpg, 97.06 KB, 480×415 - Click the image to expand
edit Find source with google Find source with iqdb
1203328550096.jpg
ОП в треде.

>>7538
Bash, C, Perl. На первом даже сейчас бывает что-то пишу.

>>7540
Все правильно сказал.

>>7542
В питоне есть два типа данных для работы со строками unicode и str. unicode это внутренний тип для хранения юникода в понятном для питоне формате, str это только набор байтов, потому надо использовать кодеки для переконвертации из одного вида в другой.

Кстати если тебе нужен просто вывод в консоль корректного юникода достаточно чтобы твоя консоль поддерживала юникод.
Возможен еще такой вариант, можешь видеть что encode и decode возвращают str и unicode соответственно.
> > > s = u'хуита'
> > > print s
хуита
> > > type(s)
<type 'unicode'>
> > > print s.encode('utf-8')
хуита
> > > type(s.encode('utf-8'))
<type 'str'>
> > > type(s.encode('utf-8').decode('utf-8'))
<type 'unicode'>
> > > print s.encode('utf-8').decode('utf-8')
хуита
> > >
Спрашивайте еще, постараюсь не слоупочить.
>> No.7563 Reply
Забыл разметку. Ну вы понели.
>> No.7564 Reply
Какими либами лучше парсить xml, html(его IRL версию где закрывающиеся тэги игнорируются, например <table><tr><td>data<tr><td>data2</table>)?
>> No.7565 Reply
>>7564
> его IRL версию где закрывающиеся тэги игнорируются
Как же я не люблю таких криворуких "кодеров". Вы бы только знали.
>> No.7566 Reply
>>7564
По сочетанию скорость работы + удобство использования мне нравится lxml. Если же скорость работы не критична, либо задачу можно легко и быстро распределить, то BeautifulSoup, в нем есть такая вещь как prettify, однако сожрет ли она незакрытые теги я не проверял, по мне это ахтунг.
ОП
>> No.7567 Reply
>>7564
Зачем что-то парсить на питоне? Он для этого не предназначен.
>> No.7568 Reply
>>7562
Посоветуй годную литературу. Книга Лутца хороша, но там много воды, а также мало примеров и практических заданий. Алсо, какую среду для работы используешь?
>> No.7569 Reply
File: pythonxy-logo.png
Png, 4.78 KB, 161×70 - Click the image to expand
edit Find source with google Find source with iqdb
pythonxy-logo.png
>>7536
Качаю@устанавливаю пикрелейтед. Подводные камни?
>> No.7570 Reply
>>7567
Легко дебажить в первую очередь, у тебя никогда не возникнет непонятная ошибка откуда-то из глубин бинарника библиотеки. Кроме того, часто решает не сколько скорость работы программы, а скорость ее написания.

>>7568
> Посоветуй годную литературу.
http://docs.python.org/
> Книга Лутца хороша, но там много воды, а также мало примеров и практических заданий.
Никогда не понимал зачем выполнять практические задания из книг, ведь очень просто придумать себе задачу, отдать более опытному программеру на review.
> Алсо, какую среду для работы используешь?
Я минималист.
vim + ipython + ipdb

>>7569
Не сталкивался с ним, ничего сказать не могу.

ОП
>> No.7575 Reply
File: Kaichou wa Maid-sama! - 03.mp4_snapshot_16.42_[2011.01.29_02.25.32].jpg
Jpg, 85.59 KB, 848×480 - Click the image to expand
edit Find source with google Find source with iqdb
Kaichou wa Maid-sama! - 03.mp4_snapshot_16.42_[2011.01.29_02.25.32].jpg
>>7536
Может, хоть у тебя есть какая-нибудь вменяемая статистика по распространённости PHP, Python, Ruby/RoR на www-серверах? Хотя бы в .ru-зоне?
>> No.7576 Reply
>>7575
но зачем?
>> No.7577 Reply
>>7575
Выяснить, насколько профитно изучение языков и соответственно портирование проектов на них.
>> No.7578 Reply
File: 1296224101564.jpg
Jpg, 56.25 KB, 500×500 - Click the image to expand
edit Find source with google Find source with iqdb
1296224101564.jpg
>>7570
В методах класса over 9000 строк вида self.*
Реально как-нибудь определить пространство имен, чтобы использовать объекты класса как локальные? А то от этого self в глазах рябит.
>> No.7579 Reply
>>7575
Нет не знаю.

>>7577
Куда лучше это сделать поискав по открытым вакансиям. Конечно PHP будет впереди планеты всей обгоняя и python и java.

>>7578
Если именно заебало писать self, то это по меньшей мере странно. Если хочешь можешь закинуть класс сюда, и я могу сделать review, не забудь указать версию питона под которую код.

ОП
>> No.7580 Reply
File: referee.py
Py, 0.01 KB, 0 lines - Click the image to get file
view edit
referee.py
>>7579
> заебало писать self
Нет, с написанием проблем нет, просто не нравится такое несколько навязчивое и малоинформативное удлинение имени переменной. То, что без self красиво записывается в одну строчку, с self'ами приходится расписывать в три.
> Если хочешь можешь закинуть класс сюда, и я могу сделать review
Было бы волшебно. Скриптрелейтед предназначен для игры в реверси 10 между двумя другими программами, проверяет корректность их ходов, определяет победителя.
В_ожидании_доброкритики-кун
>> No.7581 Reply
File: x_4936e2ec.jpg
Jpg, 38.67 KB, 500×500
edit Find source with google Find source with iqdb
x_4936e2ec.jpg
File: referee.py
Py, 0.01 KB, 0 lines
view edit
referee.py

>>7580
Ах да, версия python 2.6.5 и, пользуясь случаем, self.fix() пары оформлятских ошибок.
>> No.7585 Reply
File: referee-2.py
Py, 0.01 KB, 0 lines - Click the image to get file
view edit
referee-2.py
>>7580
> навязчивое и малоинформативное удлинение имени переменной
Вполне такое информативное. То что с self то является аттрибутом класса, то что без - локальная переменная. Как иначе отличать одного от другого? Зачастую, лучше уж удлиннить ее чтобы сделать код более понятным, чем укоротить, а потом вспоминать что же значит короткая переменная из двух букв. Можно пойти обходным путем и сделать что-то вроде:

locals().update([(name, attr) for name, attr in self.dict.iteritems()])

Тогда все свойства объекта станут видимы в локальной области, но я бы бил палкой тех кто так делает, ибо писать self проще и понятнее.

Кстати про программу в целом, я с подобными задачами сталкивался мало, но могу порекомендовать либы numpy и pygame, там есть очень широкие возможности работы с N-мерными пространствами, если программа разрастется, то будет куда проще поддерживать, там должны быть готовые инструменты чтобы крутить вектора, транспонировать матрицы итд итп.

Также по коду могу посоветовать чуть больше внимание уделить нотации, остальное написал с пометкой FIXME.
>> No.7588 Reply
>>7585
Спасибо за обзор. Многое взял на заметку. Про pygame и numpy знаю, использовал, нравится, но в данном случае нужен был простой скрипт, да и разрастаться он не будет, разве что добавится запись сыгранной игры в файл, плюс еще делаю exe версию с помощью py2exe и ради одного массивчика из 100 элементов подключать numpy не хочется.
> locals().update([(name, attr) for name, attr in self.dict.iteritems()])
Это именно то, про что я спрашивал, только с неизменяемыми объектами будут проблемы. Логичное решение, как я сам до этого не додумался...
> но я бы бил палкой тех кто так делает, ибо писать self проще и понятнее.
Ну а если сплошным текстом идут атрибуты класса, а локальных переменных две - три? А еще можно в качестве идентификаторов атрибутов класса использовать слова/словосочетания, а локальные обозначать буквой или как-нибудь типа localFoo, localBar...
В общем спасибо еще раз за обзор.
>> No.7589 Reply
>>7588
> Ну а если сплошным текстом идут атрибуты класса, а локальных переменных две - три?
Это вполне нормально.
> А еще можно в качестве идентификаторов атрибутов класса использовать слова/словосочетания, а локальные обозначать буквой или как-нибудь типа localFoo, localBar...
Возможно и так, я встречал нотации в которых используют _ (подчерк) для всех локальных переменных.
И все же логично делать все по PEP

Кстати немного ступил. Вомзожно сделать так:
[code]
locals().update(self.dict)
[/code]

Тут есть хоть какой-то хэлп по разметке?
>> No.7590 Reply
>>7589
> Тут есть хоть какой-то хэлп по разметке?
http://dobrochan.ru/help/wakabamark
>> No.7591 Reply
явныеаннотациитиповбелкиистерички.пнг
>> No.7595 Reply
File: x.py
Py, 0.00 KB, 0 lines - Click the image to get file
view edit
x.py
>>7588
Только сейчас дошло что метод в корне неправильный, и можно использовать его лишь для чтения свойств, изменять будет нельзя, ибо локальные переменные будут ломаться при разименовывании.
Мой совет - писать self и не париться.
>> No.7598 Reply
File: aaaa.png
Png, 1.11 KB, 295×295 - Click the image to expand
edit Find source with google Find source with iqdb
aaaa.png
Ты нам нужен.
>> No.7601 Reply
Питон это красиво
>> No.7602 Reply
File: 1.PNG
Png, 0.80 KB, 86×19 - Click the image to expand
edit Find source with google Find source with iqdb
1.PNG
Что читать, куда смотреть?
Сначала прочитал пару книжек про разработку игр и питон - лёгкие, да и не столько про игры, сколько про питон - вводные данные, затрагивался Pygame, а я как раз горел желанием сваять одну простенькую игру типа шариков.
Потом нагуглил кучу всякого, порылся по сайту питона, в итоге решил читать всё подряд, начал с Лутцевского Learning Python, заебался, дропнул. Слишком нудно, я с трудом концентрируюсь, хотя книжки "про игры" прочёл с легкостью (всё на английском).

Сейчас вроде "отдохнул", снова хочу продолжать, но от Лутца мутит.
Документацию на сайте, что ли, читать?
Мне бы ещё с задачами, потому что сам себе придумать могу только то, что всё равно на раннем этапе не реализовать.

Алсо образование программирование затрагивало поверхностно, так что быдло-самоучка, хотя думаю, что смысл понимаю.

Капча не обнадежила.
>> No.7603 Reply
>>7575
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Вот на такую ссылку я наткнулся.

>>7602
> Документацию на сайте, что ли, читать?
Самая лучшая документация это официальная.
Либо блоги, но в блогах редко бывает что-то интересное для новичка. Из русскоязычных подписан только на http://pyplanet.ru
> Мне бы ещё с задачами, потому что сам себе придумать могу только то, что всё равно на раннем этапе не реализовать.
Советую все же поставить себе задачу и попытаться ее реализовать. На начальных этапах куда важней практика чем теория, одна небольшая, но реальная программа куда лучше чем прочитанная книга. Книга же может быть полезна только после того как наберется критическая масса знаний, также не рекомендую что-то заучивать или пытаться вникнуть без практики, практика прежде всего.
> Алсо образование программирование затрагивало поверхностно, так что быдло-самоучка, хотя думаю, что смысл понимаю.
Не хочу скатывать тред в образование-срач, но я тоже "самоучка" - на программиста не учился. Хотя во всем программировании это слово звучит по меньшей мере глупо, программист это такая профессия когда постоянно надо учиться, обязательно самому, иначе ты протухнешь как специалист.

ОП
>> No.7604 Reply
>>7603
> Самая лучшая документация это официальная.
Мне показалось как-то слишком пресно, сухо.
А ещё я решил оставить её на "сладкое", после книжек.
Может и глупо, но мне такой вариант показался самым удобным. Не логичный, не рациональный - было как-то не важно.
> Советую все же поставить себе задачу и попытаться ее реализовать.
Ну... Как-то не получается. Для того, что я мог придумать, не хватало знаний, а под то, что уже как-то знал, не работала фантазия. Спасался задачками, но это всё равно не то - хорошо бы как при учёбе: за теорией следует практическое задание, с каждой новой темой увеличиваясь на эту тему.
> образование-срач,
Мне без разницы, просто мне нужно всё-всё с нуля.
>> No.7608 Reply
>>7604
Документацию абсолютно всю читать не обязательно и даже не нужно. Найдешь то что надо когда понадобится. Главное уметь ей пользоваться. Исключения разве что PEP. Есть еще http://diveintopython.org/
>> No.7615 Reply
>>7602
Сам какие книги читал?
>> No.7619 Reply
>>7615
Сначала Beginning Game Development with Python and Pygame.
Потом Invent your own computer games.
Не одну не дочитал до конца - не видел смысла, думал вернусь позже. С Pygame решил не связываться до тех пор, пока не освоюсь с питоном.
Немного оффициальную документацию, совсем чуть-чуть.
А потом Лутц, Learning Python. Бросил уже под конец классов. Было просто невыносимо. По десять раз некоторые абзацы перечитывал.
>> No.7620 Reply
>>7619
> Бросил уже под конец классов. Было просто невыносимо. По десять раз некоторые абзацы перечитывал.
Согласен, пишет он очень нудно, почти одна сухая теория, практики почти нет, легкое он разжевывает, а если что-то посложнее, то на это не остается времени и отправляет к оф. документации. А перечитывал то зачем?
>> No.7621 Reply
>>7620
Потому что понимал, что ничего не понял. За буквами не видел текста. Не знаю, почему так. Некоторые разделы пролетал на раз, но много вот так - перечитывая.
Возможно, на русском такого бы и не было, но четвертого издание не переводили, насколько я знаю.
а может я просто дибил
>> No.7623 Reply
>>7536
Одна тян хочет, чтобы я научил её программированию.
В связи с этим такие вопросы:
1. Подходит ли Питон в качестве 1го языка?
2. Если да, то есть ли подходящие книги? Обязательно на русском, т.к. тян не знает английского.
>> No.7624 Reply
>>7621
Я помню для себя составлял специальный словарик с примерами чтобы сразу мог все вспомнить.
>> No.7625 Reply
>>7623
> Одна тян
Избитая телега.

1. нет
2. пусть учится минеты делать
>> No.7626 Reply
>>7623
> чтобы я научил её программированию.
Конкретнее же. Программирование - это не цель, это средство. Узнай зачем ей программирование а может она просто хочет тебя трахнуть, а занятия программированием так, для предлога? :3.
> 1. Подходит ли Питон в качестве 1го языка?
Подходит.
> 2. Если да, то есть ли подходящие книги? Обязательно на русском
Если дела обстоят так, то посмотри лучше в сторону так называемых учебных языков. http://ru.wikipedia.org/wiki/%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F
Также, если человек не умеет программировать, то нужна литература не по языку, а по программированию в первую очередь.
>> No.7656 Reply
File: 0069.jpg
Jpg, 294.07 KB, 533×800 - Click the image to expand
edit Find source with google Find source with iqdb
0069.jpg
Питон-кун, ты как нельзя кстати!
Есть скрипт на python3.1:
links = ['http://www.test.ru/1', 'http://www.test.ru/2', 'http://www.test.ru/3', 'http://www.test.ru/4']
for link in links:
    file = os.path.basename(link)
    if os.path.isfile(file):
        links.remove(link)
print(links)
В локальной директории имеются файлы с именами '1', '2', '3', '4'. В этой же директории запускается данный скрипт. Я ожидаю, что последняя команда выдаст мне пустой список, но получаю ['http://www.test.ru/2', 'http://www.test.ru/4']
Отчего так?
>> No.7657 Reply
>>7656
Тебе достаточно скопировать лист так:
for link in links[:]:
Иначе получается что ты итерируешь for'ом по листу который изменяешь в процессе, это неправильно, в итоге такой странный результат.

ОП
>> No.7658 Reply
File: 0068.jpg
Jpg, 366.93 KB, 1000×667 - Click the image to expand
edit Find source with google Find source with iqdb
0068.jpg
>>7657
Да, няша, ты прав, спасибо!
>> No.7667 Reply
Я новичок в Пайтоне и схватился за третий вместо второго. Всё потеряно?
>> No.7669 Reply
>>7667
Неужели ты уже успел написать на нем ос - лидера рынка?
Если планируешь на сервера, то придется все же изучить разницу, потому что ни один хостер переходить не планирует. Если на дескоп, да еще и под win, например, то разницы нет, хотя не уверен.
Вообще разница не слишком велика, если не делать что-нибудь масштабного.

Кстати, как py2exe с 3 питоном работает?
>> No.7673 Reply
File: 1231646667803.jpg
Jpg, 18.57 KB, 550×418 - Click the image to expand
edit Find source with google Find source with iqdb
1231646667803.jpg
>>7667
Все потеряно только когда ты умер.
А так полезно знать разницу даже между разными версиями ветки 2.4 - 2.7 она существенна, даже если так не кажется на первый взгляд.
>> No.7679 Reply
File: cat8_gallery__394x400,0.jpg
Jpg, 40.39 KB, 394×400 - Click the image to expand
edit Find source with google Find source with iqdb
cat8_gallery__394x400,0.jpg
>>7669
> ни один хостер переходить не планирует
http://www.webfaction.com/ - тут можно поставить, только нафига?
А вообще, я думаю, надо просто подождать, рано или поздно все перейдут. Алсо, ОП, ты помнишь первый питон? Как переход 1-2 проходил?
> Кстати, как py2exe с 3 питоном работает?
Нет. Есть cx_Freeze, суть та же.
http://www.python.org/3kpoll - результаты голосования "I wish there was Python 3 support in ...".
>> No.7681 Reply
>>7679
Нет я 1 почти не застал. Точных версий с которых начинал не помню, но однозначно ветка 2, может быть 2.2 может быть 2.1, когда начинаешь работать мало заостряешь внимание на таких вещах, тем более каких-то кардинальных перемен, как между 2 и 3 тогда наблюдалось мало.
ОП
>> No.7682 Reply
Питон-кун, что ты думаешь о pygame? Есть ли смысл писать на питоне игрушки?
>> No.7683 Reply
>>7682
Не только игрушки, pygame, пожалуй, самый удобный инструмент для обработки нажатий клавиш, событий мыши, и рисовать в нем можно без проблем особых - готовая библиотека для написания простенького графического редактора, например. Удобно работать со звуком. В общем универсальная библиотека.
>> No.7684 Reply
>>7679
> Есть cx_Freeze
У меня не получилось осилить его в отличии от py2exe, что-то там не так было.

>>7682
Можешь посмотреть еще в сторону pyglet, у него нет зависимостей и опенгл с меньшим количеством абстракций. Правда, похоже все-таки умер.
>> No.7689 Reply
>>7683
И вопрос вдогонку: рисовать спрайты таким вот образом - это нормально?

`
window = pygame.display.set_mode((640, 480))

class Test(pygame.sprite.Sprite):
  def __init__(self):
      #Тут загрузка изображения и прочее
  def draw(self, surface):
      group = pygame.sprite.GroupSingle()
      group.add( Test() )
      group.draw()
test = Test()

while 1:
test.draw()
pygame.display.flip()
`
>> No.7690 Reply
>>7689
Разметку зафейлил.
>> No.7704 Reply
>>7689
Нет. Вот смотри, ты каждую итерацию будешь создавать@удалять два объекта:
group = pygame.sprite.GroupSingle()
group.add( Test() )
То есть каждую итерацию будет выделяться@возвращаться память, загружаться "изображения и прочее", зачем? Почему бы просто не пользовать window.blit?
>> No.7760 Reply
bump
>> No.7763 Reply
Почему процессы pythonw.exe не выгружаются?
>> No.7767 Reply
>>7763
Под windows не писал, сори, не знаю.
ОП
>> No.7777 Reply
У меня много вопросов касательно сложности, не уверен, что ответишь, но всё же 8 лет, кое-что должен бы знать например:
  • какова сложность обращения к списку, словарю и т.д.?
  • какова сложность if element in mylist:?
  • что происходит в голове у пайтона при for i in range(100000000):? Уж не хранит же он весь список? Но тогда - что?
  • что происходит в голове у пайтона при for i in f(x):, где f(x) - функция, возвращающая список? Будет ли он высчитывать её каждый раз? Может ли он понять, что значение функции - константа? Что произойдёт, если f(x) изменится внутри цикла? Запомнит ли пайтон первое или какое-то другое значение?
  • в каком порядке он перечисляет файлы в папке? От чего это зависит?
  • Что лучше, map (lambda x: выражение, list_) или list comprehension? Я так понял, что второе работает быстрее, а разницы особой не видно. Тогда зачем есть map?
Просто я только начал его учить, а в учебниках обычно такое не печатают. В то время как вопросы для динамического языка важные, и как искать на них ответ - я не знаю. Есть что-то, где это понятно расписано?
>> No.7780 Reply
>>7777
> какова сложность обращения к списку, словарю и т.д.?
Получение элемента по ключу/индексу - O(1) и там и там, кроме редких частных случаев.
> какова сложность if element in mylist:?
Сама проверка - O(1)
> for i in range(100000000):? Уж не хранит же он весь список?
Генерирует список, а потом проверяет вхождение. Это очень хреновый способ проверки диапазонов. Есть же специальная идиома if a < x < b:
> for i in f(x):, где f(x) - функция, возвращающая список? Будет ли он высчитывать её каждый раз?
Если она возвращает список, а не итератор, то вызовется один раз, а потом будет итерироваться по полученному списку.
> Что произойдёт, если f(x) изменится внутри цикла?
Сама функция? Ему пофиг. Возвращенный список? Теоретически конечно я представляю как это сделать, но вообще говоря список, по которому происходит итерация, менять нельзя, иначе будут всякие баги.
> Тогда зачем есть map?
map, filter и reduce сейчас итераторы. Т.е. вычисление происходит не сразу, а только когда надо. List comprehension генерирует весь список целиком сразу.

Мимо-проходил-не-ОП
>> No.7781 Reply
>>7780
Спасибо.
Спасибо.
> Это очень хреновый способ проверки диапазонов.
Это не проверка диапазона. Это цикл же. И меня несколько смущает, если для обычного for-цикла с константным числом повторений пайтон создаёт такой огромный список.
> Сама функция?
Нет, конечно.
> Возвращенный список?
Да. Например может измениться x. И этот вопрос следует прямо из предыдущего. Что подумает пайтон, если список после какого-то шага вдруг изменится? Ведь выше уже был пример, когда изменялся возвращённый список, и это исправлялось копированием списка, но из этого непонятна суть проблемы, потому как поведение вроде как указывает на то, что пайтон-таки считает заново значение функции со списком. А ты в предыдущем пункте сказал, что нет. Так всё же как он себя ведёт?
> map, filter и reduce сейчас итераторы
Хм. "Сейчас" - это в третьей версии? Значит, теперь map & filter вообще имеют смысл только в условиях цикла? А как тогда обратиться к элементу? newlist = map (myfunc, mylist) "сейчас" бессмысленно? Вернёт ли что-то map(myfunc, mylist)[4] ?
Кстати, насчёт
> какова сложность обращения к списку, словарю и т.д.?
ещё подумалось. Кортеж неизменяем, значит, по идее, должен работать быстрее, разве нет? Но ты говоришь, что и у списка сложность обращения - константа. Тогда, опять же, в чём смысл? Не должен ли тогда список очень медленно работать при добавлении/изменении/удалении элемента?
>> No.7786 Reply
File: 1249582398388.jpg
Jpg, 91.53 KB, 800×800 - Click the image to expand
edit Find source with google Find source with iqdb
1249582398388.jpg
У меня есть переменная
s = """
тут текст
с юникодом 
в том числе
"""
Как её вывести в юникоде в питонах 2.х?
>> No.7787 Reply
File: 08a45ec4da77d0d615cda251ee91.jpeg
Jpeg, 26.06 KB, 720×576 - Click the image to expand
edit Find source with google Find source with iqdb
08a45ec4da77d0d615cda251ee91.jpeg
И ещё вопрос.
У меня на страничке есть несколько png. Как сделать, чтобы сервер обрабатывал сразу все, а не отдельно каждую описывать?
>> No.7788 Reply
>>7786
Вывести куда?
>> No.7789 Reply
File: 8998534.jpg
Jpg, 254.75 KB, 600×831 - Click the image to expand
edit Find source with google Find source with iqdb
8998534.jpg
>>7788
Например, в $body
wrapper = Template("""
<html>
  <head>
    <title>$title</title>
    $scripts
  </head>
 <body>
  $body
 </body>
</html>
""")
>> No.7790 Reply
File: 1270574221234.jpg
Jpg, 528.62 KB, 708×1000 - Click the image to expand
edit Find source with google Find source with iqdb
1270574221234.jpg
Выводится как-то так.
pages = {
    'index': { 'title': "Blah",
               'scripts' : ind_sc,
               'body': ind_b
              }
    }
>> No.7792 Reply
>>7781
> И меня несколько смущает, если для обычного for-цикла с константным числом повторений пайтон создаёт такой огромный список.
xrange() же.
> Ведь выше уже был пример, когда изменялся возвращённый список,
Выше был пример, когда изменялось содержимое списка, а сам объект/указатель/нутыпонял не менялся. Это совсем другое :)
> медленно работать при добавлении/изменении/удалении элемента
При добавлении и удалении - конечно. А при изменении он просто записывает в ячейку массива.
>> No.7794 Reply
>>7781
> Это цикл же.
Ох, блджад, мне показалось, что там if i in range..., а не for. Да, range для больших диапазонов не рекомендуют использовать. Для этих целей есть итератор xrange, т.е. for i in xrange(100000000):. Итераторы генерируют данные только по требованию, в момент вызова .next(), а не при создании.
> Вернёт ли что-то map(myfunc, mylist)[4] ?
Угу, ошибку. Если надо, чтобы итератор сгенерировал весь список, то list(map(...))
> Тогда, опять же, в чём смысл?
По большому счету в его неизменяемости. Например, туплы имеют __hash__, а списки - нет.
Алсо, http://wiki.python.org/moin/TimeComplexity и http://www.mail-archive.com/python-list@python.org/msg151804.html (правда с 2007го некоторые вещи незначительно изменились)
> Не должен ли тогда список очень медленно работать при добавлении/изменении/удалении элемента?
Как указано в таблице выше, обычно у списка .append тоже O(1)
>> No.7795 Reply
>>7786
s = """
тут текст
с юникодом 
в том числе
"""
Для начала поставь u перед """, т.е. u""", иначе это не юникод, а байтстрим хуй пойми в какой кодировке.
А дальше зависит от того, какие именно проблемы возникли. Если у тебя шаблон тоже юникодовый, то никаких специальных действий для вывода юникода не надо.
>> No.7796 Reply
File: Konachan.com - 24525 sample.jpg
Jpg, 753.58 KB, 2000×1500 - Click the image to expand
edit Find source with google Find source with iqdb
Konachan.com - 24525 sample.jpg
>>7795
u стоит, да.
Шаблон не юникодовый скорее всего, ибо не задана кодировка. И, собсно, сам шаблон был приведен выше. Импортируется из string.
> SyntaxError: Non-ASCII character '\xf3' in file C:\topath\templind.py on line 18, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
Подобное не решает проблемы:
pages = {
    'index': { 'title': "Blah",
               'scripts' : codecs.encode(ind_sc, 'utf-8'),
               'body': codecs.encode(ind_b, 'utf-8')
              }
    }
>> No.7798 Reply
>>7796
> Шаблон не юникодовый
Ну так сделай шаблон юникодовым.
>>> from string import Template
>>> w = Template(u"""<html>$body</html>""")
>>> print w.substitute(dict(body=u"""Русский текст"""))
<html>Русский текст</html>
>> No.7800 Reply
>>7798
> from string import Template
Я только что понял, сколько времени потерял. Читать документацию по диагонали - плохо.
>> No.7804 Reply
File: wutherewrong.py
Py, 0.00 KB, 0 lines
view edit
wutherewrong.py
File: kanako__.jpeg
Jpeg, 382.64 KB, 1000×779
edit Find source with google Find source with iqdb
kanako__.jpeg

>>7798
Тогда оно просто перестаёт работать.
> Traceback (most recent call last):
> File "C:\Python26\lib\wsgiref\handlers.py", line 94, in run
> self.finish_response()
> File "C:\Python26\lib\wsgiref\handlers.py", line 135, in finish_response
> self.write(data)
> File "C:\Python26\lib\wsgiref\handlers.py", line 210, in write
> assert type(data) is StringType,"write() argument must be string"
> AssertionError: write() argument must be string
Загружу сюда код, модет ещё где ошибка закралась, а я пропускаю и не вижу.
В templind просто переменные с текстом, чтобы не загромождать главный файл.
>>7800
м?
>> No.7805 Reply
>>7804
> может
фикс
>> No.7806 Reply
>>7804
Ну да, потому что у тебя все наоборот с юникодом.
> 'scripts' : codecs.encode(templind.main_sc, 'utf-8'),
Вот тут encode не нужен. В темплейтах везде питоновый юникод.
> response = wrapper.substitute(**pages[fn])
> return [response]
А вот тут уже нужно указывать кодировку в явном виде.
Т.е. либо return [response.encode('utf-8')] либо response = wrapper.substitute(**pages[fn]).encode('utf-8') Плюс любой вменяемый сервер должен также указывать кодировку в http заголовке, т.е. в твоем start_response().
>> No.7807 Reply
File: 1277543753213.png
Png, 290.86 KB, 800×600 - Click the image to expand
edit Find source with google Find source with iqdb
1277543753213.png
>>7806
Покушаю и попробую. Надеюсь заработает. Спасибо тебе, анон.
Загрузка картинок переделана на такое:
        fn = util.shift_path_info(environment)
        path = "C:/topath/img/"
        if fn[(len(fn)-4):] == ".png":
            pn = fn
            for i in range(1, (len(fn)-4)):
                if fn[i] == '/':
                    pn = fn[(i+1):]
            pn = path + pn
            response = open(pn, 'rb')
            start_response('200 OK', [('content-type', 'image/png')])
            return response      
Есть какие подводные камни/ошибки?
>> No.7808 Reply
>>7807
> ошибки?
Для манипуляций с путями надо использовать os.path, во-первых он работает для любой платформы, а не только венды, во-вторых он безопасней, в-третьих с ним это все пишется в одну-две строки, без всяких циклов.
Ну и конечно надо проверять существование файла через os.path.exists(somepath), чтобы эксепшонами не плеваться.
>> No.7809 Reply
File: 12825352700965.jpg
Jpg, 651.05 KB, 1183×888 - Click the image to expand
edit Find source with google Find source with iqdb
12825352700965.jpg
>>7808
Ну, мне только для себя оно нужно. И файлов графических будет всего два типа, потому и так.
> os.path.exists
> os.path
А вообще, спасибо.
Хотя в любом случае нужно будет эксепшн вызвать или же послать вручную 404-ответ.
>> No.7810 Reply
>>7804
Я когда-то реализовал такую штуку руками, она загружала файлы, парсила в них регулярками переменные и заменяла их, я ей гордился. А теперь оказалось, что опять в питоне уже есть то, что я делал руками.
>> No.7811 Reply
File: 16149263.jpg
Jpg, 586.37 KB, 1280×904 - Click the image to expand
edit Find source with google Find source with iqdb
16149263.jpg
>>7810
Всё зависит от того, зачем тебе нужно было и что в итоге нужно было получить. Если конкретно под твою задачу, то куда быстрее будет работать тобой написанное вручную (особенно на сях). Если нужно где по работе или не горит быстродействие, но зато горят сроки. То выбор понятное дело на что ляжет.
Ну а в целом да, питон няшен.
>> No.7814 Reply
>>7794
Спасибо большое, это замечательно! Вот теперь я чувствую, что готов начать нормально изучать Python. Добра тебе.
>> No.7815 Reply
>>7794
Алсо,
> какова сложность if element in mylist:?
твой ответ:
> Сама проверка - O(1)
Ответ по первой твоей ссылке:
> list: x in s : O(n)
> set: x in s : O(1), worst case: O(n)
Вот теперь это выглядит логично. Кроме того, вспомнил дофига ситуаций, где можно сэкономить (по видимому) много времени потрудившись сначала преобразовать список в множество.
>> No.7819 Reply
>>7810
В питоне вообще есть всё, что только вздумается написать.
А уж шаблонизаторов там тьма, в т.ч. встроенных.
Я лично предпочитаю Mako, ибо намного более гибкие, чем Templates, .format или %.
>> No.7820 Reply
File: 47666ed12b192f711719acbcf739b5ee.jpg
Jpg, 542.53 KB, 1280×808 - Click the image to expand
edit Find source with google Find source with iqdb
47666ed12b192f711719acbcf739b5ee.jpg
Трудно ли в питоне сделать так, чтобы парсер парсил определённый код, добавлял его в какой-либо файл и сразу же работал с ним, без перезагрузки самого скрипта?
Что-то вроде самодописывающегося скрипта.
Хотя там нужно не совсем код, а просто добавлять ещё одну хтмл-страницу и сразу же уметь её отображать.
Код был тут >>7804
>> No.7821 Reply
>>7820
Что-то мне подсказывает что ты хочешь сделать очень не нормальные вещи. Во первых интерпретаторов питона очень много, и на уровне языка стираются грани между файлами и папками, есть только модули и пакеты. В любом случае даже если ты это сделаешь, то как положено это работать не будет, например о потокобезопасности говорить вообще не приходится.
Еще есть такая вещь как eval, однако если тебе нужно где-то хранить эту страничку, то почему бы не подумать о БД?
Ну и вообще глянь в сторону bottle, werkzeug, flask, web.py, CherryPy и Jinja2 или Cheetath.

Спасибо анонам которые отвечали на вопросы пока я слоупочил.

ОП
>> No.7822 Reply
>>7820
Опиши саму задачу, а не то, как ты её хочешь решать (с)
В целом идея звучит весьма для питона не нормально, и я прозреваю, она имеет типовое, вменяемое решение.
>> No.7823 Reply
File: 72dc32d2d66b25f13d27e18a2b37f7f1.jpg
Jpg, 650.09 KB, 1183×888 - Click the image to expand
edit Find source with google Find source with iqdb
72dc32d2d66b25f13d27e18a2b37f7f1.jpg
>>7821
Вещь действительно извращённая. Но это не рабочий вариант, а для совместной разработки. Чтобы человек мог менять или фиксить веб-страницы и веб-контент, сразу же видя результат.
Хотя думаю пущай будет хтмл-файлами и с каким-то сортом БД.
Джинджу, кстати, советует уже третий человек. Может и вправду почитать документацию.
Спасибо за ответ.
>> No.7824 Reply
File: fb49fcd1e9d943e0dff5f0e520ec8881.jpg
Jpg, 975.63 KB, 870×1200 - Click the image to expand
edit Find source with google Find source with iqdb
fb49fcd1e9d943e0dff5f0e520ec8881.jpg
>>7822
Задача состоит в совместной разработке через интернеты. Я делаю серверную часть, человек веб-контент и веб-странички. Но веб-сервер у меня генерирует странички, а не даёт готовые, потому и спросилось о подобных вещах.
Просто питон только пару дней назад был увиден мною впервые и я много чего ещё не знаю, лол.
>> No.7825 Reply
>>7824
Если человек редактирует только шаблоны, и возможность их редактирования через веб принципиальна, то намного проще использовать вменяемый шаблонизатор (Mako, Jinja2, Cheetah, Genshi), и хранить шаблоны в БД.
Если человеку надо редактировать именно исходный код (в т.ч. контроллеры и модель), то DVCS вам в руки, не надо велосипед изобретать.
>> No.7826 Reply
File: 7d48d717048560a183122492bd5ecab7.jpg
Jpg, 1167.70 KB, 1366×1366 - Click the image to expand
edit Find source with google Find source with iqdb
7d48d717048560a183122492bd5ecab7.jpg
>>7825
Нужно первое, да. Спасибо.
>> No.7829 Reply
Почему в комментах к коду на Питоне так мало мата?
Пруф: http://andrewvos.com/2011/02/21/amount-of-profanity-in-git-commit-messages-per-programming-language/
>> No.7830 Reply
>>7829
Вообще это не комментарии а сообщения через -m при коммите, ну да ладно.
Потому что программисты на питоне понимают, что делают, и им это нравится.
>> No.7832 Reply
>>7829
> Note that I ripped an equal amount of commit messages per language so the results aren't based on how many projects there are per language.
Не заметил на гитхабе обилия питон проектов.
>> No.7842 Reply
>>7832
Как твое высказывание коррелирует с приведенной тобой цитатой? Он же говорит, что взял одинаковое количество коммитов для каждого языка.
>> No.7847 Reply
Оп, перечисли мне вещи, которые должен знать вообще любой претендующий на что-то питонист? что-то такое, за незнание чего ты бы срезал с интервью.

Благодарю заранее.
>> No.7849 Reply
File: 1285363305963.gif
Gif, 9.90 KB, 200×200 - Click the image to expand
edit Find source with google Find source with iqdb
1285363305963.gif
>>7847
> вещи, которые должен знать вообще любой претендующий на что-то питонист?
Чем список отличается от массива.
>> No.7850 Reply
>>7849
смотря что имеется в виду под "списком". Питоновский список или структуру данных "связный список"? Питоновский список (как правило) реализован как массив указателей на объекты, что гарантирует константное время доступа к отдельным элементам. В случае со связным списком, время доступа к n-му элементу линейно зависит от n, по очевидным причинам.
>> No.7852 Reply
>>7849
кроме того еще в стандартной библиотеке есть модуль array, если ты о нем. Эти array'ы почти такие же как списки, но работают быстрее и хранить в них можно только определенные типы данных (числовые). Причем они не гетерогенные, т.е. все элементы должны иметь один тип, емнип. Видимо, под ними сидят обычные C-массивы.
>> No.7853 Reply
>>7849
Что подразумевается под массивом? Это же кортеж? Ты ведь tuple имел в виду. Или все же array из стандартной библиотеки?
> TypeError: 'tuple' object does not support item assignment
Вот главное отличие.
>> No.7854 Reply
>>7853
нее, туплы это далеко не массивы :)
>> No.7868 Reply
>>7847
Я предпочитаю проверять знания не сколько по знанию самого языка, сколько подход человека к архитектуре и к написанию кода. Если программист знает хоть все фишки языка, но не знает как их правильно применить, то пользы от знания языка будет мало.
По питону вот неплохая подборка http://pyobject.ru/blog/2010/02/04/python-quiz/

ОП
>> No.7872 Reply
>>7868
Какой-то сложный этот ваш питон, судя по вопросам.
>> No.7873 Reply
>>7872
Порог вхождения не высокий, но питон далеко не тривиален.
>> No.7874 Reply
File: 1277997153.jpg
Jpg, 15.67 KB, 200×200 - Click the image to expand
edit Find source with google Find source with iqdb
1277997153.jpg
Туплы, списки, массивы... Переполох в БИДОНОКУРЯТНИКЕ.
>> No.7877 Reply
File: tea.jpg
Jpg, 2.81 KB, 114×116 - Click the image to expand
edit Find source with google Find source with iqdb
tea.jpg
>>7874
Ты еще ничего не видел, а уже какой-то недобрый. Кортежи, списки, виртуальные кортежи (типа xrange), array - это только стандартная библиотека.

Для численных вычислений array-ем редко кто пользуется, пользуются NumPy. В numpy есть два типа массивов - ndarray и matrix, причем в случае 2-мерного массива интерфейс у них одинаковый с единственным отличием - оператор умножения действует на ndarray поэлементно, а matrix умножаются, естественно, как матрицы. (Напоминаю, что проверки типов во время компиляции в питоне нет).

Но это не все - там еще есть views. Это типа массива, только данные на самом деле хранятся в другом массиве. Чтобы прочуствовать гибкость и мощь питона, попробуйте создать матрицу 3x3 и сделайте a-=a[1]. Знаете, почему из третьей строчки ничего не вычлось? Потому что когда питон обработал вторую строчку матрицы, правая часть перезаписалась нулями. Ведь a[1] - это view, и вы обязаны об этом помнить.

Добро пожаловать в питон, анонимус.
>> No.7884 Reply
>>7877
> Напоминаю, что проверки типов во время компиляции в питоне нет
у меня от этого БУДАПЕШТ
>> No.7885 Reply
>>7884
А это и не нужно. Это не входит в концепцию "duck typing".
>> No.7888 Reply
>>7885
А duck typing и не нужен. Он не входит в концепцию "compile-time type checking".
>> No.7893 Reply
File: z_d35bcfa1.jpg
Jpg, 157.74 KB, 1067×1024 - Click the image to expand
edit Find source with google Find source with iqdb
z_d35bcfa1.jpg
>>7888
В таком случае не мучай себя питоном и переходи на C# какой-нибудь.
>> No.7956 Reply
bump
>> No.8014 Reply
>> No.8023 Reply
>>8022
>>> import sys
>>> sys.path
['', ...]
>> No.8025 Reply
>>8023
Сорри, я нагуглил и удалил пост.
>> No.8030 Reply
>>8014
В той статье написано, что duck typing в F# работает исключительно для inline-методов. Это как бы негусто. Все равно, что сказать, что C поддерживает duck typing, потому что в нем макросы есть.

Слышал, что google go основан на статическом duck typing. Кто-нибудь может подтвердить?
>> No.8046 Reply
>>8030
осиль уже тайпклассы
>> No.8096 Reply
File: z_073803c4.jpg
Jpg, 81.42 KB, 811×610 - Click the image to expand
edit Find source with google Find source with iqdb
z_073803c4.jpg
>> No.8127 Reply
ух как тут у вас на доброчане охуенно и уютно. заебок. пожалуй, я перебирусь из 2-ch/pr/ даже.
ОП, сколько получаешь?
>> No.8130 Reply
Почему интерпретатор пишет, что
2 + 0j < 'string' - True
а
2 + 0j < 3 + 0j - нельзя сравнивать?
Ваш питон - неимоверная хуита для ленивых домохозяек. Доброчан же!
>> No.8136 Reply
>>8130
Я помню, что натыкался на это в документации.
http://docs.python.org/library/stdtypes.html#comparisons
> Objects of different types, except different numeric types and different string types, never compare equal;
> The <, <=, > and >= operators will raise a TypeError exception when any operand is a complex number.
>> No.8162 Reply
>>7536
Надо: заиметь список всех объектов класса.
Сделал:
class MyClass:
    classmates = {}
    def __init__(self, name):
        self.classmates.update({name: self})
Вопрос: а не было ли готовой переменной хранящей все объекты определенного класса?
>> No.8163 Reply
>>8162
Уже понял, что фигню спросил. Перефразирую вопрос: хорош ли (правильный ли) данный способ решения поставленной задачи?
>> No.8164 Reply
>>8163
Нет. Если тебе понадобился список объектов, ты должен был заранее об этом подмать, и такой список где-то явным образом построить.
>> No.8172 Reply
>>8127
> ОП, сколько получаешь?
Я работаю не в рашке, потому цифры будут неадекватными

>>8163
Все зависит от того что ты хочешь, логичнее такое положить в new, а не в init, если ты хочешь жестко забить чтобы один класс на одни и те же аргументы в init. Почти также реализуется и singletone на python, в этом тоже нет ничего плохого.
ОП
>> No.8179 Reply
Прошу поделиться опытом в самом что ни на есть прямом смысле. Т.е., какие модули/фреймворки кроме стандартной библиотеки у меня всегда должны при себе, и которые мне следует знать (просьба кроме названий упомянуть чем именно они так хороши)? Что из стандартной библиотеки мне сразу следует досканально изучить, чтоб потом не жалеть о потраченном на велосипеды времени?
Ну, то есть, понятно, что по хорошему надо всё осмотреть и всё опробовать, но это уже другой разговор. Короче, пожалуйста, расскажите о своём опыте буквально: что за время использования Пайтона вам полюбилось и оказалось полезным и удобным, на что мне, как начинающему, следует обратить особое внимание, ну и т.п.
>> No.8182 Reply
>>8172 похуй, расскажи. буду знать к чему стремиться
>> No.8194 Reply
File: Victorinox_Multitool.jpg
Jpg, 96.89 KB, 800×600 - Click the image to expand
edit Find source with google Find source with iqdb
Victorinox_Multitool.jpg
>>8179
>>8179
> какие модули/фреймворки кроме стандартной библиотеки у меня всегда должны при себе, и которые мне следует знать
Зависит от рода деятельности: вебдевелоперу, например, будет трудно без SQLAlchemy (работа с базами данных из Python), ибо с помощью стандартной библиотеки только с SQLite можно работать.
> Что из стандартной библиотеки мне сразу следует досканально изучить, чтоб потом не жалеть о потраченном на велосипеды времени?
Тут, думаю, можно просто взять любую книгу по Python и прочитать хотя бы по диагонали.
Еще ОП тут ссылку выкладывал: http://pyobject.ru/blog/2010/02/04/python-quiz/ - весьма продвинутые велосипеды.
Ах да, новичку стоит смотреть в сторону x86, так как у меня, например, были траблы с x64 (интерпритаторами/библиотеками/и прочим), перешел на x86 и жить стало легче. Также выше в треде упоминался Python(x,y) - набор библиотек, в основном для обработки и анализа различных данных, но вместе с ними идет много библиотек общего назначения и пара сред разработки, самое главное, что устанавливается это все дело одним инсталятором http://code.google.com/p/pythonxy/wiki/Downloads?tm=2 жаль, что я не знал о нем когда знакомился с питоном.
> что за время использования Пайтона вам полюбилось
Универсальность. Люблю сравнивать Python со швейцарским армейским ножом: большим ножом работать удобнее, но если надо не туши разделывать, а огурчики-помидорчики порезать, то разница не так уж существенна, зато у нас тут и отвертка, и лупа, и ручка, и напильник, да, по отдельности это все лучше и удобнее, конечно, но сколько это будет занимать места! А китайский вариант пикрелейтеда всегда со мной, и что я им только не делал. Точно также Пайтон одновременно и достойная замена MATLAB (не из коробки, но с парой модулей (scipy/numpy)), и веб приложения можно разрабатывать, и какой-нибудь тетрис написать, и системное что-нибудь, плюс ко всему этому кроссплатформенность же. Вполне возможно, что где-то я заблуждаюсь, надеюсь ОП меня поправит/дополнит.
>> No.8199 Reply
>>8194
Это всё понятно, но, похоже, ты не вполне понял вопрос. Книжки по пайтону я читал, и даже не совсем по диагонали. Но, как правило, книжки это одно, а реальность - другое. Так вот в реальности обычно бывает, что после того, как ты скуришь все мануалы - половина "элегантной теории" выветрится за ненадобностью, зато появится вдвое больше полезной информации, полученной путём набивания шишек. Также через руки разработчика пройдут десятки и сотни разных библиотек, многие из которых повторяют функциональность, но одни чем-то лучше, а другие чем-то хуже. То есть ответ хотелось бы получить примерно такого рода:
> Ну, из испытанных со мной остались:
> ххх - для ххх
> scipy/numpy - хорошая библиотека для расчётов, умеет рисовать графики, но уродливые, красивые графики умеет делать ххх
> для ххх - среди прочих можно выделить два модуля, примерно одинакового качества, ххх и ххх. В первом лучше это, а во втором - вон то.
> ещё постоянно использую ххх, ххх, ххх и ххх.
> Кстати, вот хорошая интернет-коллекция библиотек и плагинов - ххх.
> Алсо, в пайтоне есть такая неочевидная хуйня, о которой многие новички не знают - если, например, ты попытаешься сделать ххх через ххх, то тебя ёбнет током. А ещё многие новички обходят стороной ххх из стандартной библиотеки, а в нём много полезного для того-то и того-то, поэтому этот модуль тебе надо выучить наизусть.
Ну, в общем, спрашиваю что вполне логично, лол не о том, что можно в книжках прочитать, а о том, какой опыт накопился в процессе реальной работы.
>> No.8202 Reply
>>8199
По-моему, это ты не понял объяснений, почему твой вопрос cлишком общий. Но начну отвечать, может быть, станет понятнее.

Для чтения/записи файлов в формате HDF5 существуют два модуля - h5py и pytables. h5py намного приятнее, но реже встречается в дистрибутивах.
>> No.8214 Reply
>>8199
> Это всё понятно, но, похоже, ты не вполне понял вопрос.
Так ночью дело было, засыпал уж потихоньку, задавать надо было поконкретнее. Да и куну постом выше кажется что вопрос слишком общий.
> как правило, книжки это одно, а реальность - другое. Так вот в реальности обычно бывает, что после того, как ты скуришь все мануалы - половина "элегантной теории" выветрится за ненадобностью, зато появится вдвое больше полезной информации, полученной путём набивания шишек.
В общем случае это неверно для python. Он как раз и создавался, в том числе, что бы такой фигни не было. В частном случае появляются разного рода нюансы, но ты скажи, хоть, чем занимаешься и для чего тебе пайтон, тогда возможно получится дать тебе опыт:
> Мне надо взять сигнал, разложить его в ряд Фурье, построить график.
> > Можно с помощью math из стандартной библиотеки, но есть SciPy, NumPy и MathPlotLib (последний это все красиво выведет)
> Нужно обработать изображение
> > Открыть/сохранить изображение, применить к нему фильтр можно с помощью того же SciPy, но удобнее это сделать с PIL, он понимает больше форматов и имеет больше возможностей для редактирования изображений. Если нужно распознавание образов, стоит обратить внимание на opencv и pyopencv...
> Не могу определиться с IDE
> > Могу порекомендовать Spyder 2, одна из самых удобных на мой взгляд, устанавливается просто как библиотека. Веб разработчику стоит посмотреть на Aptana с плагином PyDev...
И так далее.
>> No.8215 Reply
>>8214
Большое спасибо, вот это хороший ответ. Особенно за spyder и pyopencv.
> для чего тебе пайтон
Именно что для всего. Он не очень быстрый, не сильно хорошо поддерживается большинством хостингов, на нём не очень удобно писать и распространять десктоп-приложения, особенно на коммерческой основе. Для научного использования - матлаб пока ещё посильнее, судя по описаниям, будет. Он мне нужен, чтоб избавить себя от дурацкой манеры делать 10 кликов вручную там, где я могу переложить работу на компьютер. Т.е., теоретически, везде. Ну и, конечно, надеюсь, что в будущем для обеспечения материального благополучия он мне тоже пригодится.
  • Например, есть сайт, с которого DownThemAll качать не может - я должен не начинать в унынии кликать по сотне ссылок, а суметь быстро написать парсер, который сохранит то, что мне надо, пока я буду заниматься более интересными вещами.
  • Потом, накачав с гельбуры гигабайт картинок, я выясняю, что пол-гига - картинки на 5 МБ и на борды не постятся. Я не трачу времени на раздумья, что мне нужно - а открываю пайтон, к которому у меня уже на тот момент стоит PIL, и ресайжу все картинкки более 1,5 МБ до постимого размера.
  • Или могу просканить всю свою коллекцию на наличие раржипегов, например.
  • Или мне нужно представить себе какой-то сложный процесс - меня уже ждёт pygame с парочкой написанных на досуге сниппетов, который мне помогает этот процесс визуализировать, ускорив и упростив размышления.
  • Или, наконец, тёте очень захотелось иметь дневник-органайзер, но обязательно чтоб с перламутровыми пуговицами. Разумеется, ей всё равно, на чём он будет написан, и что ей понадобится установить перед тем, как она сможет им пользоваться. И даже производительность не так критична. Ей главное, чтоб было, чтоб было симпатично, удобно и пуговицы перламутровые. А вот мне писать полноценный органайзер с нуля на каком-нибудь С++ ради того, чтоб кнопка в другом углу стояла, да ещё и за спасибо, пускай и от горячо любимой тёти - непозволительная роскошь, тем более что С++ я знаю из рук вон плохо, а Джаву так и вовсе не знаю.
Так продолжать можно до бесконечности, но, думаю, основную идею ты понял. Так вот, это "поделиться опытом" мне нужно, чтоб большинство повседневных задач можно было решать не тратя времени на поиск новых инструментов. Чтоб я заранее знал: изображения - PIL, расчёты - SciPy, GUI - не мучаться выбором,а сразу брать, например, PySide. Кстати, по поводу GUI - вот, собственно, и конкретный вопрос. Что посоветуете? wx, Qt, или всё-таки проще написать гипотетический органайзер для гипотетической тёти на Tk, пусть и выглядеть это будет хреново?
> И так далее.
Поэтому, если можешь продолжить - буду очень благодарен. Если по пути мне придётся нырнуть глубоко и изучить пайтон до серьёзного уровня - не проблема, всё равно я студентота и нормальной работы не имею. Но ты мог бы здорово упростить мне жизнь, подсказав, в какую сторону нырять.
>> No.8216 Reply
>>8214
> Веб разработчику стоит посмотреть на Aptana с плагином PyDev...
Зачем вообще вебдевам IDE? Все прекрасно пишется в блокноте
>> No.8220 Reply
>>8215
> по поводу GUI - вот, собственно, и конкретный вопрос. Что посоветуете? wx, Qt, или всё-таки проще написать гипотетический органайзер для гипотетической тёти на Tk
Qt. Бедноват как-то wx, хотя по сравнению с Tk просто изобилует возможностями, Gtk оставил негативное впечатление своей работой под окнами (код работающий под линуксом приходилось по мелочи допиливать для того, что бы он нормально работал в винде), да и отсутствие виджета для табличного вывода информации вгоняет в отчаяние, так что Qt. Про PySide vs PyQt сказать ничего не могу, работаю только с последним, но поговаривают, что первый его догнал.
> > И так далее.
> Поэтому, если можешь продолжить - буду очень благодарен.
Не могу:
1. Это получится очень долго. Про фишки просто python'а рассказывать долго, а тут еще и сторонние библиотеки.
2. Я не знаю многого.
3. Про самое распространенное уже сказали, во всяком случае навскидку ничего не вспоминается.
> Если по пути мне придётся нырнуть глубоко и изучить пайтон
Пайтон + сторонние библиотеки опять же.
> нужно, чтоб большинство повседневных задач можно было решать не тратя времени на поиск новых инструментов. Чтоб я заранее знал: изображения - PIL, расчёты - SciPy...
Все равно рано или поздно возникнет задача к которой не готов, в этом нет ничего страшного. Да, гугл порой выдает несколько способов решения задачи, выбор между которыми неочевиден, как с теми же h5py и pytables. Так ведь dobrochan.ru и эта борда в частности ни куда не денется, зашел, спросил, ушел довольный (ну подождать надо, да).
Как вариант могу запилить туториал какой-нибудь, например буквально вчера рассказывал другу про pygame, иллюстрируя рассказ написанием небольшого приложения pygame версия вот этой фигни: http://members.iinet.net.au/~pontipak/redsquare.html не hello word, но простенько так, оформить код и выложить займет не много времени.
>> No.8223 Reply
>>8182
Чистый доход без налогов за 2010 год 88128 американских долларов.


>>8194
> будет трудно без SQLAlchemy
SA действительно достаточно мощный инструмент, и найти сравнимаю по мощности ORM которая не являются частью какого-то комплексного фреймворка почти невозможно, однако SA мне не совсем нравится подход, он далек от python-style.
> какие модули/фреймворки кроме стандартной библиотеки у меня всегда должны при себе, и которые мне следует знать (просьба кроме названий упомянуть чем именно они так хороши)?
Лучше знать методы, подходы, архитектурные решения и уметь гуглить. Всегда помнить что как правило самое популярное решение или фреймворк далеко не самые лучший.
> Что из стандартной библиотеки мне сразу следует досканально изучить, чтоб потом не жалеть о потраченном на велосипеды времени?
Из стандартной библиотеки почти все что не deprecated, но в первую очередь itertools, collections, functools, однако специально изучать это не нужно, достаточно знать что это есть и вспомнить в нужный момент.

>>8199
> Кстати, вот хорошая интернет-коллекция библиотек и плагинов - ххх.
http://pypi.python.org
http://github.com
http://bitbucket.org
http://code.google.com

Могу посоветовать все что требует асинхронной работы писать с применением twisted, фреймворк достаточно стабилен, конечно доков по нему мало.
Для таких вещей как графики, я где можно, использую google visualization api, работает почти где угодно и не требуют никаких мощностей на прорисовку.

ОП
>> No.8228 Reply
>>8220
Спасибо. Второй день пользуюсь spyder - просто неописуемый восторг. Конечно, крупные вещи в нём, должно быть, писать не очень удобно, но на коленке кодить - просто великолепно. Удивительно, почему им пользуется так мало народу, в сравнении с другими вещами.
> Как вариант могу запилить туториал какой-нибудь
Конечно, было бы здорово.
>>8223
Спасибо, вашу помощь трудно переоценить.
>> No.8278 Reply
Насколько быстр Питон по сравнению с Перлом и Руби? Раньше было Перл > Питон > Руби, но недавно слышал что Питон дотянул до скорости Перла.
>> No.8279 Reply
>> No.8339 Reply
Есть нубовский вопрос, в общем, даже не про Пайтон, но настолько нубовский, что тут наверняка каждый второй может на него ответить, а я даже не знаю, с чего начать гуглить.
В общем, как пропарсить страницу, которая не общедоступна? Разумеется, предполагается, что лично у меня есть доступ к ней, то есть, например, я могу авторизироваться, имея логин и пароль. Я, собственно, и в теории понятия не имею, как это происходит, а связать с практикой кодинга на Пайтоне и подавно не могу. Я ведь так понимаю, после авторизации данные о том, что вы - авторизированы как правило хранятся в куках каких-то? Т.е. авторизироваться может только браузер, а не скрипт на пайтоне с urllib? Есть вообще какая-то общая логика или на каждом сайте по-своему?
Для примера, допустим я хочу, чтоб скрипт каждую неделю производил поиск по рутрекеру и что-нибудь с него скачивал.
Кстати, при мысле о таком примере возник ещё один вопрос: можно ли сделать так, чтоб скрипт работал в фоновом режиме, не мешая мне всякими окнами и не отбирая кучу памяти, работая всё время, но незаметно из-за маленького приоритета?
Чую, что глупые вопросы, но вы уж извините.
>> No.8341 Reply
>>8339
Почитай в википедии как работает хттп, и тебе все сразу станет ясно.
По второму вопросу гугли о демонах.
>> No.8357 Reply
>>8341
Вот этот все правильно сказал. Плюс ко всему:

1. http://scrapy.org/
2. https://bitbucket.org/lorien/grab/

Возможно поможет.

ОП
>> No.8462 Reply
>>8278
Кому то не похуй, какой из т. н. скриптовых языков медленнее?
Они же все равно не используются там, где скорость в традиционном смысле нужна.
>> No.8463 Reply
File: tumblr_les74hOEV71qerydto1_500.jpg
Jpg, 96.18 KB, 426×640 - Click the image to expand
edit Find source with google Find source with iqdb
tumblr_les74hOEV71qerydto1_500.jpg
Знающие аноны, а существуют ли инструменты реализовующие "edit and continue" для Пайтона?
Ведь это было бы весьма удобно, ящитаю.
>> No.8505 Reply
File: 1280308071668.jpg
Jpg, 52.18 KB, 450×304 - Click the image to expand
edit Find source with google Find source with iqdb
1280308071668.jpg
>>8463
Под CPython точно нет. Под другие реализации возможно что и есть.
Алсо никогда не возникало острой нужды в этом, то что может ipdb реально достаточно.
ОП
>> No.8506 Reply
File: oxime31c25.jpg
Jpg, 100.91 KB, 640×960
Your censorship settings forbid this file.
r-18
>>8505
> Алсо никогда не возникало острой нужды в этом
Просто заебывает каждый раз перезапускать программу сначала, когда она имеет нетривиальное состояние, а работы ведутся достаточно глубоко по стеку вызовов. Хочется писать программу интерактивно-динамически, как бы на лету, как это могут делать лисперы :3
>> No.8508 Reply
File: x_c7339060.jpg
Jpg, 36.39 KB, 321×479 - Click the image to expand
edit Find source with google Find source with iqdb
x_c7339060.jpg
>>8506
Я обычно использую примитивные доктесты либо юнит-тесты. В контексте командной разработки куда более эффективно.
>> No.8509 Reply
File: 00000433_big.jpeg
Jpeg, 123.50 KB, 1000×775 - Click the image to expand
edit Find source with google Find source with iqdb
00000433_big.jpeg
>>8508
> В контексте командной разработки куда более эффективно.
Я не уверен, что мы друг друга понимаем.
Моя вот эта девиация направлена на повышение индивидуальной эффективности и вовсе не пытается конкурировать с техниками ТДД и совсем никак не отражается на внутрикомандной коммуникации.
Вот представим -- есть у нас прога, пускай десктопная, с ГУЙней. От момента старта до того места где я говняшу метод очередной формочки юзер должен был бы изрядно пожмакать интерфейс, чтобы дернулся тот самый метод, который я пишу/фикшу. Т.е. для того, чтобы проверить что же я там наговняшил, мне надо в тестах сэмулировать этот пользовательский сценарий и запусить это все на выполнение.
Так вот, проблема в том, что трата времени на такое развесистое покрытие тестами с домыслами о сценариях использования просто экономически нецелесообразна -- это не мидлварьная либа, это одноразовая гуйня.
Ну можно, конечно, еще тупо руками сценарии прогонять, но иногда это может занять еще больше времени, чем автоматизация.
А вот хотелось бы ничего этого не делать, ни руками не гонять, ни тесты автоматизирующие весь этот процесс не писать. Хотелось бы в начале, или где угодно, не важно, в теле редактируемого метода поставить какую-нибудь контрольную точку(по аналогии с брэйкпойнтами) и чтобы при запуске состояние интерпретатора со всеми загруженными модулями форкалось, тело метода ретранслировалось в байткод и выполнение продолжалось до туда, до куда мне надо с мониторингом всего локального контекста. Т.е. подвинул координату контрола -- запустил метод сначала, не понравилось -- еще раз. И тому подобное в том же духе. Процесс инициализации и эволюции состояния можно один раз сделать руками без всяких автоматизаций, не западло.
В общем это получается смесь пайтоновского шела и кодоредактора с блекджеком. Было бы круто. Наверное.

Альзо, прошу прощения за сумбурность.
>> No.8532 Reply
Недавно пришлось по работе заниматься парсингом страниц, собственно несколько вопросов по улучшению сорцов имеются.
1) Можно ли вот это переписать короче?
   description = description.replace("&nbsp;", " ")
   description = description.replace("\n", " ")
   description = description.replace("\r", " ")
   description = description.replace("&ndash;", "-")
   description = description.replace("&mdash;", "-")
2) И вот это тоже
if line[:2] == 'Р' or line[:2] == 'У' or line[:2] == 'Б' or line[:2] == 'К' or line[:2] == 'И':
   if adress == "":
adress = line
   else: adress += "; " + line
>> No.8533 Reply
>>8532
> description = description.replace("&nbsp;", " ")
> description = description.replace("\n", " ")
> description = description.replace("\r", " ")
> description = description.replace("&ndash;", "-")
> description = description.replace("&mdash;", "-")
description = description.replace("&nbsp;", " ").replace("\n", " ").replace("\r", " ").replace("&ndash;", "-").replace("&mdash;", "-")
>> No.8534 Reply
> if line[:2] == 'Р' or line[:2] == 'У' or line[:2] == 'Б' or line[:2] == 'К' or line[:2] == 'И':
if line [:2] in 'РУБКИ'
Дальше не распарсил.
>> No.8544 Reply
File: x_c6533476.jpg
Jpg, 44.86 KB, 604×404 - Click the image to expand
edit Find source with google Find source with iqdb
x_c6533476.jpg
>>8532
replace_queue = (("&nbsp;", " "), ("\n", " ") ...)

for replaceargs in replacequeue:
    description = description.replace(*replace_args)
Ну и как этот >>8534 сказал


>>8509
C GUI работал мало, и мне больше понравился подход где координаты и прочее расставляются в xml. Если конечно эта реплика вообще в тему.

Код должен быть разделен по логике на абстракции, вроде пользовательских действий и работы с данными. Тогда, если надо как-то поиграть с данными, то я запускаю шелл, импортирую нужные модули и воспроизвожу в консоли какое-то действие. Не знаю поможет ли это.

ОП
>> No.8546 Reply
>>8532
>>8533
Пипец.
>> No.8547 Reply
>>8544
for replaceargs in replacequeue:
description = description.replace(*replace_args)
И это тоже. В очередной раз подтверждается простая истина, что гвидопых - очередная разновидность пыха, а пыхобыдло - эталон быдлокодера, программирует он 8 лет или 8 недель. И почему сажа не рабоает?
>> No.8550 Reply
>>8547
Есть какой-то конструктив кроме сотрясаний воздуха?
>> No.8556 Reply
File: tumblr_leiqnkGd5q1qa19byo1_500.jpg
Jpg, 65.50 KB, 486×640 - Click the image to expand
edit Find source with google Find source with iqdb
tumblr_leiqnkGd5q1qa19byo1_500.jpg
>>8544
> C GUI работал мало, и мне больше понравился подход где координаты и прочее расставляются в xml.
Все правильно, только контролы иногда бывают кастомными, или их положение/поведение/что угодно может вычисляться динамически. Это был грубый и натянутый пример.
> Код должен быть разделен по логике на абстракции, вроде пользовательских действий и работы с данными.
В теории -- да. Но будем реалистами -- часто имеет место очень хуевый дизайн, где сущности не просто сильно связаны, а намертво спутаны. И с этим приходится как-то жить.
>> No.8561 Reply
File: x_f091589d.jpg
Jpg, 34.32 KB, 321×479 - Click the image to expand
edit Find source with google Find source with iqdb
x_f091589d.jpg
>>8556
> В теории -- да. Но будем реалистами
Что-то мне подсказывало что источник потребности как раз это. У меня когда-то был хороший тимлид который следил за качеством кода, потому привык к написанию разделяемого кода. Что же, могу только посоветовать провести рефакторинг, если это коммерческий заказ, то можно выбить время, если для себя, то святое дело переписать.
ОП
>> No.8564 Reply
>>8550
Какой нахуй конструктив, обезьяна? Просто выпились из профессии.
>> No.8565 Reply
File: 1280337408625.jpg
Jpg, 47.87 KB, 332×293 - Click the image to expand
edit Find source with google Find source with iqdb
1280337408625.jpg
>> No.8584 Reply
>>8564
Я именно так и сделаю, послушаю анально уязвленного посетителя /s/ который толком не знает матчасти.
>> No.8586 Reply
>>8584
Попрыгай еще, обезьянка.
>> No.8605 Reply
`lst = (("&nbsp;", " "), ("\n", " ") ...)
description = reduce (lambda x,y: x.replace(*y), lst, description)`

мимо-крокодил
>> No.8610 Reply
>>8605
В python3 работать не будет.
>> No.8611 Reply
>>8610
А нет, спиздел, from functools import reduce будет работать везде.
>> No.8681 Reply
Какую базу данных лучше всего выбрать для проекта на Django?
>> No.8688 Reply
>>8681
Базу лучше не под джангу выбирать, а под проект.
>> No.8704 Reply
>>8681
Смотря что ты хочешь от базы. Для джанги как таковой почти похуй какую СУБД ты используешь, потому выбирай либо ту что лучше знаешь либо наиболее совершенную postgres.
>> No.9009 Reply
А как в Django можно реализовать <select> c загрузкой нескольких полей из базы данных (к примеру, фильтрация по возрасту и городу, записанная в виде "21-DC")? Видел ChoiceField, но в любых примерах использовались статические данные. Придется ли здесь использовать циклы или можно будет обойтись настройкой формы по каким-либо полям?
>> No.9033 Reply
>>9009
Определи в моделе примерно такой метод:

```
def getcustomage(self):
return 'DC-%d' % self.age
```

Это то что тебе нужно?
>> No.9037 Reply
File: 1248791572276.jpg
Jpg, 60.86 KB, 300×240 - Click the image to expand
edit Find source with google Find source with iqdb
1248791572276.jpg
File: 1248791572276.jpg
Jpg, 60.86 KB, 300×240
Your censorship settings forbid this file.
unrated
Доброаноны, как учить пайтон? В плане кодинга не полный нуб. Тред не читал, хотя капча "упустил наибольшее" и возражает.
>> No.9038 Reply
>>9037
Завтра ищешь в интернете книжку Dive into python. Похуй если ничего не поймешь. Затем идешь на python.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию питоньего кода — PEP8, чтобы от зубов отскакивало. Когда напишешь свою первую имиджборду, по пути изучив верстку на html+css, скачиваешь и изучаешь любой питоний асинхронный вебсервер, рекомендую Tornado или Gevent. Как переделаешь имиджборду, чтобы выдавала по крайней мере 5 тысяч запросов в секунду, можешь идти дальше — тебя ждет увлекательный мир хайлоада. Apache Hadoop, сверхбыстрые асинхронные key–value хранилища, MapReduce. Отсос хиккующих выблядков / просто неудачников типа рейфага или сисярп/джава–хуесосов, которые сосут хуй по жизни не заставит себя ждать и уже через пол года ты будешь получать такие суммы, что любая баба будет течь при одном упоминании твоей зарплаты.
>> No.9047 Reply
>>9038
Пичалька, столько времени прошло, а до сих пор не появилось новых паст.
>>9037 - кун
Ну так что? Отвечайте на мой ответ или посылайте туда, где он более к месту, если я вам глаза мозолю.
>> No.9048 Reply
File: 51342263.jpg
Jpg, 50.68 KB, 470×677 - Click the image to expand
edit Find source with google Find source with iqdb
51342263.jpg
стоит ли по данной книге начинать изучать Python?

http://www.ozon.ru/context/detail/id/5730448/
>> No.9066 Reply
>>9048

Книга подойтет тем, для кого это первый язык. Остальным будет неинтересно. Но под рукой иметь полезно на случай возникновения каких непоняток - разжёвано всё очень подробно. По сути это подробное описание языка. Читай лучше diveintopython.org/
>> No.9158 Reply
>>9033

Спасибо, это очень помогло.
>> No.9161 Reply
Вот я тут наслушался всяких фраз вроде "python это прибыльно, python это востребовано" и задумался о том, что можно его попробовать из чисто меркантильных соображений. По ходу дела решил полуркать непосредственно о его востребованности и внезапно нашёл почти что нихрена. Сплошные РНР и ASP.NET. Я где-то не там смотрю или он действительно нахрен никому не нужен?
А Руби?
>> No.9163 Reply
>>9161
> Я где-то не там смотрю или он действительно нахрен никому не нужен?
В рашке не знаю я искал на http://python.org/community/jobs/ до сих пор подписан. вакансий много.
ОП
>> No.9165 Reply
>>9161
Блядь, ну естественно он никому не нужен. Потому что у эстетсвующих задротов есть всякие Хаскеллы и Лиспы, у быдла есть C# и PHP, эстетствующее быдло пишет на Скале и F#, а Питон - абсолютно левая и бесполезная хуйня, не имеющая никаких преимуществ, неимнетресная ни программистам ни работодателям.
>> No.9180 Reply
>>9165
В рашке вообще почти ничего не нужно никому.
>> No.9315 Reply
Можно ли из скриптов на пайтоне вызывать сторонние приложения? Можно ли вообще писать всю ту хуйню, что обычно пишут на bash, с приличным синтаксисом? На худой конец, если на оба вопроса ответ - нет, можно ли встроить в тело скрипта на пайтоне скрипт на баше?
>> No.9317 Reply
>>9315
Да. Да. Можно, но не нужно.
>> No.9319 Reply
>>9317
Мне нужно. Пожалуйста, поделись инструкцией/ссылкой. Если же ты уверен, что не нужно, объясни, пожалуйста, почему.
>> No.9323 Reply
>>9319
Во-первых, все, что можно сделать на Баше, можно сделать и на Питоне, только с гораздо меньшим мудоёбством. Во-вторых, здесь тебе не Вопросы-и-Ответы.
>> No.9324 Reply
>>9323
> Во-первых, все, что можно сделать на Баше, можно сделать и на Питоне
Многие вещи на баше делаются гораздо проще и эффективней.
> Во-вторых, здесь тебе не Вопросы-и-Ответы.
Это именно тред вопросов и ответов.
>> No.9325 Reply
>>9323
Ты, кажется, не в тот тред попал. Посмотри на ОП-пост. Не хочешь - не отвечай. Но и не мусорь.
>> No.9326 Reply
>>9325
Ой, простите, что-то я ступил. Во-первых, Доброчан, во-вторых, тред вопросов и ответов же.

Баш-скрипт эмбедится элементарно - создается строка с bash-скриптом, а потом или вызывается /bin/bash и ему в стандартный поток кидается эта строка, либо вообще эта строка сохраняется в темповый файл, и запускается "/bin/bash tmp_file". Элементарно, Уотсон.
>> No.9327 Reply
> :
пофиксился
>> No.9453 Reply
Есть html страница, хочу из body убрать всё, кроме 1 div-а, в котором ещё чёрт знает что есть. id div-а есть и уникален. Я тупо не знаю, как найти закрывающий его тег. Ну, кроме как цикл в стиле "проверка скобочного выражения на паскале", но ведь можно проще, да? Больше ничего парсить не надо, поэтому чем решение проще - тем лучше.
Заранее спасибо.
>> No.9454 Reply
>>9453
BeautifulSoup
>> No.9455 Reply
>>9454
Ну ты понимаешь, какой у меня уровень, да и скрипт дальше расти не будет... Что, правда нельзя обойтись без сторонних модулей?
>> No.9456 Reply
>> No.10298 Reply
File: cfd498a5f15e8ea5a9b3dee9b4bc1475.jpg
Jpg, 708.33 KB, 1000×1200 - Click the image to expand
edit Find source with google Find source with iqdb
cfd498a5f15e8ea5a9b3dee9b4bc1475.jpg
(чтобы не плодить тредов)
> codecs.encode(u'йо', 'utf-8')
> codecs.encode('йо', 'utf-8')
> s = u'йо'
> s.encode('utf-8')
Каждый случай выдаёт
> SyntaxError: Non-ASCII character '\xe9' in file testweb.py on line 38, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
Хотя в документации написано, что оно так должно работать. Как заставить его работать? Питон 2.7.
И второй вопрос, если переводить на питон 3.х код с 2.7, не слишком много придётся менять всего? Кода там пока мало. Только не бейте по рукам, доброчан же 3:

Питононуб.
>> No.10301 Reply
>>10298
А если поставить комментарий, как написано в ссылке, тогда выдаёт ошибку
> File "blah.py", line 9
> codecs.encode(u'йо', 'utf-8')
> SyntaxError: (unicode error) 'utf8' codec can't decode bytes in position 0-1: unexpected end of data
>> No.10302 Reply
Блин, во я дебил. У меня сам файл *.py был в кодировке ANSI. Теперь всё работает, но декодирует неправильно. Вместо "йо" выводит вот это
> а�аО!
Как починить?
>> No.10303 Reply
>>10302
Так. Просто скопировал весь код в новый файл сразу кодированный в cp1251 (и кодек cp1251 поставлен). Теперь всё работает корректно, но когда пишу только "йо", то выводит
> иН
Если пишу другие слова, всё корректно.
Наркоманство.

Всем спасибо, все свободны.
>> No.10304 Reply
File: Konachan.com - 67782 moon sky touhou yakumo_yukari.jpg
Jpg, 529.51 KB, 1024×768 - Click the image to expand
edit Find source with google Find source with iqdb
Konachan.com - 67782 moon sky touhou yakumo_yukari.jpg
А, да. Про портирование кода с 2.7 на 3.х вопрос остался актуальным.
>> No.10308 Reply
File: 0.jpg
Jpg, 7.42 KB, 279×267 - Click the image to expand
edit Find source with google Find source with iqdb
0.jpg
>>10303
> кодек cp1251
>> No.10309 Reply
File: 1306234689568.png
Png, 1.02 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1306234689568.png
>>10308
> codecs.encode(HT.plain_t, 'cp1251')
Вот это.
>> No.10310 Reply
>> No.10311 Reply
>>10309
>>10310
Пацаны, вы чё. Это по буржуйски "codec", а по нашенски будет "кодировка"
>> No.10335 Reply
Как создать глобальную переменную? Хочу посчитать количество вызовов некой функции, куда запихнуть счётчик?
>> No.10343 Reply
>>10335
Просто объявляешь её после всех import, used и шаблонов.

Скажите, няши, как сохранить передаваемый файл. Например, у меня есть какой-нибудь wsgiref.simple_server . И со странички мне какой-нибудь флеш или яваскрипт посылают серверной программе запрос на сохранение на диск.
Так вот, как его правильно принять? И как правильно оформить запрос? И как конкретно сохранять?
>> No.10344 Reply
>>10335
А, да. А счётчик в саму функцию в её начале, нэ?
>> No.10370 Reply
File: 0f39c31d925e3d2196d26c87944b963f.png
Png, 893.27 KB, 620×876 - Click the image to expand
edit Find source with google Find source with iqdb
0f39c31d925e3d2196d26c87944b963f.png
>> No.10396 Reply
>>7536
Python востребован? Деньги делаешь на нём?
>> No.10404 Reply
>>10344
>>10343
Разумеется, это было первое, что я сделал.
> counter+=1
> UnboundLocalError: local variable 'counter' referenced before assignment
Алсо, да, функция, которую я считаю, определена в теле другой функции.
>> No.10405 Reply
>>10404
Глобальные переменные плохо - сделай функтор, например.
#!/usr/bin/env python

class Functor(object):
    def __init__(self):
        self._calls = 0

    def __call__(self, arg1):
        self._calls += 1
        print(arg1)


functor = Functor()
functor("yoba 1")
functor("yoba 2")
functor("yoba 3")
print(functor._calls)
Получаем
yoba 1
yoba 2
yoba 3
3
Но если уж тебе так хочется глобальной переменной, то надо так, например
#!/usr/bin/env python

calls = [0]

def fun(arg1):
    calls[0] += 1
    print(arg1)


fun("yoba 1")
fun("yoba 2")
print(calls[0])
Ты, видимо, делал обычную переменную, а не список, поэтому при обращении к ней внутри функции просто создавалась новая локальная переменная, а потом ты сразу же пытался из этой переменной читать до того, как присвоил ей какое-либо значение, что и вызывало исключение.
>> No.10413 Reply
>>10405
О, в Питоне можно "()" перегрузить? Блин, круто!
> calls = [0]
> Ты, видимо, делал обычную переменную, а не список, поэтому при обращении к ней внутри функции просто создавалась новая локальная переменная, а потом ты сразу же пытался из этой переменной читать до того, как присвоил ей какое-либо значение, что и вызывало исключение.
При Сталине такой хуйни не было!
>> No.10439 Reply
>>10404
> Local variable 'counter' referenced before assignment
А ты её инициализировал то?
>> No.10440 Reply
>> No.10441 Reply
>>10413
Списки это, конечно, хорошо. Но не для таких целей. Расточительство ведь.
Просто объяви её глобальной, чтобы не было
> просто создавалась новая локальная переменная
Вот так:
calls = 0;

def fun(arg1):
    global calls
    calls += 1
    print(arg1)

if __name__ == '__main__':
    fun("1")
    fun("2")
    print(calls)
>> No.10442 Reply
>>10441
Зато вариант со списком и для замыканий работает
>> No.10444 Reply
>>10413
И ещё. Тут всё дело в том, как тебе нужно. Если у тебя всего одна глобальная - объявляй так (правда это дурной тон). Если массив или много переменных (особенно если сервер и сессии пользователей, например, хранятся так, лол), тогда функтором.
В общем суть в том. Если плевать на память и нужно быстродействие - объявляй глобальной. Если плевать на быстродействие, а нужно экономить память - функтором (ну или если глобальных слишком дофига).
>> No.10456 Reply
>>10439
Ну разумеется.
>>10405
Функтор взял на заметку, как раз недавно хотел такое сделать, понимал, что можно, но не знал как именно. И, разумеется, я не знал, что это называется функтор.
И, да, ты совершенно прав насчёт списка. Спасибо. counter+= и есть то место, которое требовало чтения.
Глобальные переменные - вполне приемлемо, потому как мне всего лишь было трудно понять, какой сложности получился рекурсивный алгоритм. Так что они в коде не остались.
>>10413
А где там перегрузка-то?Что-то не понял. Кстати, да, можно ли в пайтоне перегрузить, например, + для какого-то своего класса?
>>10441
Лол, спасибо. Пытался так сделать, но написал global counter+=1 и получил ошибку. Буду знать теперь.
>>10444
Ну вообще глобальных я избегаю, да и "быстродействие" в пайтоне - громкое слово. Посему интересно узнать, насколько сильно влияют на быстродействие функторы? Не для таких задач, конечно, а если это полноценная функция с запоминанием чего-то. Всё равно расточительно виду каких-то его особенностей, или это только относительно примитивного счётчика?
>> No.10458 Reply
>>10456
> Ну вообще глобальных я избегаю, да и "быстродействие" в пайтоне - громкое слово
А вдруг ты cython или jython компилируешь. Там это может быть заметно.
> Всё равно расточительно виду каких-то его особенностей, или это только относительно примитивного счётчика?
Ну в данном конкретном примере это вообще никак не повлияет. Ну и в целом заметно станет только при тысячах вызовов. Так что если не сервер какой ИБ пишешь, то заморачиваться не о чём.
> А где там перегрузка-то?
Мне показалось это был такой сарказм.
> Кстати, да, можно ли в пайтоне перегрузить, например, + для какого-то своего класса?
Даже в С++ можно, только придётся дочерний класс делать.
class MyClass:
     def __init__(self, MCData):
          self.MCData = MCData
     def __add__(self, MCArg):
          self.MCData = self.MCData + MCArg + 15

if __name__ == '__main__':
    tmp = MyClass(10)
    tmp + 20
    print (tmp.MCData)
Правда это не совсем то что ты хотел. Но я питон не слишком хорошо знаю.
>> No.10462 Reply
>>10458
> > Кстати, да, можно ли в пайтоне перегрузить, например, + для какого-то своего класса?
> Даже в С++ можно, только придётся дочерний класс делать.
Зачем? Перегруженные операторы вполне мирно существуют в одном классе же.

мимокрокодил
>> No.10463 Reply
>>10462
Как-то не подумал, что можно внутри класса переопределить. Бака
>> No.10464 Reply
>>10456
> > А где там перегрузка-то?Что-то не понял. Кстати, да, можно ли в пайтоне перегрузить, например, + для какого-то своего класса?
http://docs.python.org/reference/datamodel.html#special-method-names не?

c:Вам не нужно вводить капчу :3
>> No.10465 Reply
>>10458
> if name == 'main':
А это так принято писать? Или так оптимальнее/лучше/удобнее? Работает ведь и без него.
>> No.10466 Reply
>>10465
> if __name__ == '__main__':
Разметка -_-
>> No.10467 Reply
>>10466
здесь происходит проверка, запускаешь ли ты файл отдельно или ты его импортируешь как модуль. по умолчанию основной файл получает имя "__main__". как то так

10464
>> No.10468 Reply
>>10467
Т.е. я могу там написать программу, а потом просто импортировать файл куда-нибудь и не изменяя код у меня будут классы и методы из него, но код из > if __name__ == '__main__': не выполнится?
>> No.10469 Reply
>>10468
именно!
>> No.10470 Reply
>>10469
Удобно.
Спасибо за ответ.
>> No.10471 Reply
>>10470

Потому и пользуются.
Доброчан же :3
>> No.10472 Reply
>>10458
> Даже в С++ можно, только придётся дочерний класс делать.
Вовсе не обязательно. Я как раз по аналогии с С++ и хотел, знал ещё что в Руби так можно, а вот про Пайтон не видел никогда такого.
> Правда это не совсем то что ты хотел.
Да, но из этого легко сделать то. Просто про add не знал.
>>10464
Спасибо, да. Надо будет почитать подробнее на досуге.
>> No.10473 Reply
>>10472
В питоне можно переопределить почти всё, кроме пары исключений.
>> No.10479 Reply
Прочитал тред и что-то в груди ёкнуло. Так это что, в Питоне таки можно доопределить уже имеющийся класс?
>> No.10480 Reply
>>10473
А доопределить оператор?
>> No.10487 Reply
>>10480

Для встроенного класса не получится. Но можно от него отнаследоваться и делать с пользовательским классом, что хочешь.
#!/usr/bin/env python

def decorate(operator):
    def _decorate(self, arg):
        print("operator is called")
        result = operator(self, arg)
        return result
    return _decorate

# выбросит исключение
#str.__add__ = decorate(str.__add__)

#s = "123"
#print(s)


class MyString(str):
    def __init__(self, *args):
        super(MyString, self).__init__(*args)

    def __add__(self, arg):
        return super(MyString, self).__add__(arg)



s = MyString("123")
print(s)
s2 = s + MyString("456")
print(s2)

# не выбросит исключение
MyString.__add__ = decorate(MyString.__add__)

s3 = s + MyString("456")
print(s3)
Выведет:
123
123456
operator is called
123456
>> No.10502 Reply
>>10480
Доопределить это перегрузить?
>> No.10507 Reply
>>10502
Гвидотермины во все поля. Воистину, обгвидок - не человек.
>> No.10509 Reply
>>10507
Поясни же поясни
>> No.10510 Reply
>>10507
Кто такой обгвидок? Что такое гвидотермины?
>> No.10517 Reply
>>10510
Обгвидок - программист на гвидопыхе.
>> No.10518 Reply
>>10517
Гвидопыха это что? ПХП? Тогда причём там переопределение-то.
>> No.10519 Reply
>>10518
Тьфу, перегрузка.
>> No.10521 Reply
>>10518
гвидопых это питон, ПХП - просто пых.
>> No.10522 Reply
>>10502
Я имел в виду именно возможность доопределить оператор, например
let (|>) x f = f x
>> No.10525 Reply
>>10510
Это он у школьников в /с/ набрался. "Хачкель", "скакалка", "говношарп" и т.д.
>> No.10528 Reply
>>10521
А какое отношение перегрузка имеет усиленно к питону? Это практикуется часто даже в спп и, порой, в си.
>>10522>>10525
Ясно.
>> No.10529 Reply
>>10528
Во я наркоман.
> А какое усиленное отношение
>> No.10531 Reply
>>10522
Экспресс-гугление показало, что есть такой хак
http://code.activestate.com/recipes/384122/
>> No.10540 Reply
Подскажите, где в wsgi луркать принятие файла с веба. Чтобы сохранить его своим сервером. Пожалуйста.
>> No.10658 Reply
File: 18909b44c63dd04507c51c7ccf2ea8bf.png
Png, 479.48 KB, 642×840 - Click the image to expand
edit Find source with google Find source with iqdb
18909b44c63dd04507c51c7ccf2ea8bf.png
>> No.10667 Reply
>>10525
Ты не умеешь, так в /c/ говорят только опущенные. Правильно:
> Хаски
> Скалка
> Сисярп
>> No.10674 Reply
>>10667
Забавные тредыв /s/. Общаются на любые темы, кроме темы треда. Да и на вопросы стараются не отвечать.
>> No.10685 Reply
>>10658
куклотюна тредом ошибся
>> No.10711 Reply
>>10685
Нет не он.
>> No.10724 Reply
А в python есть аналог явового synchronized? А так же инструменты для работы с множеством потоков. Например, в один и тот же файл несколько потоков собираются сохранить данные в файл например они считают количество посетителей. Как на python лучше решить эту проблему?
>> No.10725 Reply
В гвидоне вообще нету многопоточности. Совсем. Только форканье процессов и общение через местную разновидность MPI. Так что про работу с общей кучей можешь забыть.
>> No.10726 Reply
>>10725
Хаскельщиков не спрашивали.
>> No.10727 Reply
>>10726

Но ведь многопоточности там и вправду нет! Только многозадачность на форках.
>> No.10728 Reply
>>10727
А разве её нельзя сделать? Вон в си тоже нет, но это не мешало писать многопоточные сервера на нём.
>> No.10730 Reply
>>10728

Можно. Для этого надо скачать исходники интерпретатора и переделать. Силами самого языка этого не сделать - ограничение в самой платформе.
>> No.10733 Reply
>>10730
Грустно. Но вдруг кто знает какие костыли. Оно не критично, но было бы желательно.
>> No.10735 Reply
>>7536
пришлось немного править питоновский код на днях. Так вот, я вам скажу после джавы это просто лютый пиздец. Оно даже дебажится не умеет. Я имею в виду, не дебаг питонячьего скриптика, запускаемого python file.py, а полноценного приложения, запущенного под апачем с mod_python или как его там. То есть вот представьте себе, я даже не могу зайти на страницу и остановиться на брейкпоинте. FAIL. Ну к этому добавляется отсутствие нормальной IDE до недавнего времени (слава Intellij) и прочие убожества. Ах да, знакомые мне еще недавно говорили, что там еще и с Unicode феерический пиздец творится. Короче, питон оказался большим УГ чем я даже мог предположить.
>> No.10736 Reply
>>10735
> cgi
По-моему ты сказал очевидные вещи для любого cgi-скрипта.
> с Unicode
В 2.х версиях.
>> No.10737 Reply
Бумп.
>>10724
>> No.10738 Reply
Следите, чтобы тред не смыло! Я приду утром, чтобы он тут был.
>> No.10739 Reply
>>10736
> По-моему ты сказал очевидные вещи для любого cgi-скрипта.
я вам скажу по секрету, что джавские сервлеты работают по схожему с cgi принципу и дебажатся, даже будучи за фронтэндом. И как бы всем похуй, если язык не дает возможности дебажить - никого не интересуют причины - его просто обьявляют недоязычком и не используют.
> В 2.х версиях.
http://www.python.org/download/releases/3.0/NEWS.txt
Release date: 03-Dec-2008
Сурово. Недавно же до них дошло.
А заодно подскажите пожалуйста, много ли из фреймворков 2.x работают под 3.x?
>> No.10744 Reply
>>10739
бутылка работает, правда это не фрейворк, а веб-ёба-либа. Но не работает много всего остального, пигментсы например. Ящетаю 3.0 удел фоннатов языка.
>> No.10746 Reply
>>10744
3.х куда лучше 2.х, но почти всё было разработано на 2.х и для 2.х, потому так и получается.
>> No.10747 Reply
File: Безымянный.png
Png, 21.36 KB, 686×754 - Click the image to expand
edit Find source with google Find source with iqdb
Безымянный.png
>>10746
Согласен.
>> No.10752 Reply
>>10747
оси подпиши, деревня.
>> No.10754 Reply
>>10752
Ты ведь хотел сказать "ось"?
>> No.10755 Reply
>>10752
Чтобы нарисованное на картинке каким-то образом пыталось соответствовать действительности? Но я не для этого рисовал картинку.
>> No.10756 Reply
>>10755
На графике показано проблемы в изучении и сложность в написании?
>> No.10757 Reply
>>10756
На картинке проиллюстрировано, что иногда фраза "3.х куда лучше 2.х" может быть малоинформативна, если рассматривать ее вне некоего контекста.
>> No.10758 Reply
>>10757
Ну и, если уж совсем по чесноку, этой картинкой я намекал на то, что питон как ЯП в отрыве от его замечательных батареек - не особо что-то хорошее.
>> No.10759 Reply
>>10757
Ну, тут тред для питона. Очевидно что она в контексте самого языка. А уточнять может быть слишком много.
>> No.10760 Reply
>>10759
Согласен без дополнительных картинок.
>> No.10761 Reply
>>10758
Так у него и цели, сферы использования другие.
Скриптовая оболочка движка хотя тут луа будет лучше, несмотря на тормознутость луа, быстро написать веб-сервер не сильно загруженный запросами, быстро или красиво написать нечто, не сильно углубляясь в новые технологии. Ну и прочие разные вещи.
>> No.10791 Reply
Чем Python лучше Ruby?
>> No.10794 Reply
>>10791
Он старше, быстрее, больше библиотек.
>> No.10801 Reply
File: 1307024447496.png
Png, 1.12 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1307024447496.png
>>10794
Про это я и сам знаю. Я имел в виду как язык программирования.
>> No.10804 Reply
>>10791
Как язык гораздо хуже. Руби вообще с душой сделан, не хуем-с-горы, а человеком с широким крогозором.
Алсо, на Руби работа элитнее и платят больше. На одеске за рельсы или синатру в среднем 35$/час.
>> No.10826 Reply
>>10744
Pygments уже давно работает под питоном 3. Из веб-фреймворков есть tornado, например. Существуют проекты по портированию джанги. Многие либы работают если их просто прогнать через 2to3.
>> No.10828 Reply
>>10826
> Pygments уже давно работает под питоном 3. Из веб-фреймворков есть tornado, например. Существуют проекты по портированию джанги. Многие либы работают если их просто прогнать через 2to3.
То есть питон 2 я смело могу выкинуть и использовать тока 3?
>> No.10843 Reply
>>10828
Можешь, но это будут только твои проблемы, не приноси их обратно сюда.
>> No.10846 Reply
>>10843
Понятно.
>> No.10976 Reply
Почему в 3.2 при чтении через input() в строке остаётся /r в конце? Это нахрен всю логику рушит, не int() не возьмёшь, да и просто по n символов разбивать неудобно.
>> No.10984 Reply
>>10976
Потому что в третьем питоне raw_input() переименовали в input(), который теперь eval(input()), его и используй.
>> No.10986 Reply
>>10984
Это то я знаю, но в 2.6 питоне при raw_input() нихрена нет \r в конце строки. Вот такой херни нет:
> > > i=input()
ololo
> > > i
'ololo\r'
>> No.10987 Reply
>>10986
Интересно, у меня такого не происходит ни в 2.6.6, ни в 3.1.3. Хотя в 3.1.3 raw_input'a вообще нет.
Может быть это - баг конкретной версии?
Можно попробовать i = int(input()) или i.rstrip('\r').
>> No.11590 Reply
Пожалуйста, киньте какую-нибудь хорошо написанную утилитку. Помню, часто обращал внимание на удачное использование стандартных конструкций, все эти иф-мейны, распарсить аргументы для вызова из командной строки, ну и т.п. Да ещё и няшно оформленные комментарии с именем и прочей хуйнёй А вот когда наддо найти - что-то ничего не попадается.
Короче, нужно просто посмотреть, как выглядят "правильные" скрипты.
>> No.11598 Reply
>>11590
Ссылки:
http://www.python.org/dev/peps/pep-0008/
http://effbot.org/pyfaq/tutor-what-is-if-name-main-for.htm
http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html
http://www.siafoo.net/article/52
Знаю, что это не подходит под определение "хорошо написанной утилитки", но сути реквеста, думаю, соответствует.
>> No.11599 Reply
>>11598
Спасибо, но нет. Понимаю, реквест дурацкий, но мне нужны не советы на тему - я всё это как бы читал и знаю - а именно готовый скрипт. Просто, говорю же, многократно видел скрипты с некоторой повторяющейся структурой, которая, по видимому, у хорошо-пишущих людей уже вошла в привычку. Сейчас хочу посмотреть, что же я там такого видел, но найти "не знаю что" не могу. Потому что это и есть "не знаю что", но у кого-то оно обязательно есть, потому что это любой скрипт написанный аккуратным и опытным пейтонописателем.

А последняя ссылка сама по себе довольно интересна, спасибо.
>> No.11600 Reply
File: coding hero.png
Png, 120.27 KB, 680×638 - Click the image to expand
edit Find source with google Find source with iqdb
coding hero.png
>>11599
> с некоторой повторяющейся структурой, которая, по видимому, у хорошо-пишущих людей уже вошла в привычку
Пиши, просто следуя общепринятым рекомендациям, и будет тебе счастье.
http://pypi.python.org/pypi/pep8 - инструмент для проверки соответствия кода pep8
http://pypi.python.org/pypi/pylint - еще один вариант
Это программирование, тут не должно быть особого глубинного смысла и хороший код - это просто понятный даже новичку, хорошо читаемый код, а если он еще и работает как надо, то вообще замечательно.
> скрипт написанный аккуратным и опытным пейтонописателем.
Смотри стандартную библиотеку (%PYTHON_PATH%\Lib), там много всего интересного, даже если и не найдешь то, что ищешь, то знание пайтона прокачаешь.
>> No.11601 Reply
>>11600
Спасибо, но, блджад, неужели так трудно ответить на просьбу? Это и работы потребовало бы куда меньше, чем печатать мне такой ответ, который мне и не нужен-то.
Ладно. Пойду на хабре найду.
>> No.11602 Reply
Но зачем нужен питон, если есть haskell?
>> No.11607 Reply
>>11602
А зачем нужен хэскиль, если есть python?
>> No.11608 Reply
А как на пайтоне сделать CLI, который умеет не только выводить, но и менять строки? Как это вообще делается?

Ну, например, я ввожу
rvm install ruby-1.8.7-p352
и у меня появляется строка вида Всего/Скачано/Скорость/Время и т.д., где сначала все нули, а потом начинают меняться значения в реальном времени, не выводя новых строк. Как это сделать в своей программе?
>> No.11609 Reply
>>11608
> Как это вообще делается?
http://en.wikipedia.org/wiki/Carriage_return
for i in range(100):
    print i, "\r",  # print(i, "\r", end="") для третьего
>> No.11610 Reply
>>11609
Что-то он ничего не выводит. Вообще.
>> No.11611 Reply
>>11610
Где и как запускаешь?
А если так:
from time import sleep
for i in range(100):
    print i, "\r",
    sleep(1)
?
>> No.11612 Reply
>>11611
Естественно, со слипом тоже пробовал. Сохраняю в файл, запускаю из терминала убунты. Честно работает 100 (ну или сколько надо) секунд, выводит текст, который был введён до и после цикла. Но никакого экшона во время самого цикла - нет. И, кстати, даже если б оно работало - это не даёт возможности перемещаться между строчками, так что нормального интерфейса всё равно не выйдет, в то время как я точно помню какие-то игры с чисто АСКИ графикой в терминале.
>> No.11613 Reply
>>11607
Солиднее.
>> No.11614 Reply
>>11612
УМВР. Для линукса такое нашел: http://docs.python.org/howto/curses.html
>> No.11619 Reply
>>11613
что за пиздец.
>> No.11622 Reply
>>11619
у тя баттхёр лол
>> No.11626 Reply
>>11608
См. curses, ncurses, pycurses.
>> No.11678 Reply
А правда, что в пистоне немутабельные строки, нельзя изменять встроенные классы, делать присваивание внутри выражения?
>> No.11679 Reply
File: z_2321226c.jpg
Jpg, 136.75 KB, 682×1024 - Click the image to expand
edit Find source with google Find source with iqdb
z_2321226c.jpg
Ранее учил VB и C++, поверхностно. Писал простенькие игры типа змейки, арканоида. Теперь вопрос: какую литературу по питону качать? Какие программы, компиляторы?
Добра всем, держите няшу.
>> No.11683 Reply
>>11678
> немутабельные строки
Правда. И это хорошо.
> нельзя изменять встроенные классы
Толком не знаю. Но полюбому есть всякие неудобные ограничения. Вроде как "для безопасности", но мне от этого не сильно легче. В Руби удобнее это всё.
> делать присваивание внутри выражения
Не очень понимаю, что ты имеешь ввиду. i++? Да, такого нет.
>>11679
Могу лишь пожелать тебе сгинуть. Няша.
>> No.11684 Reply
>>11679
> литературу
Марк Лутц - Изучаем питон
> программы
vim/emacs, pdb
> компиляторы
Зачем?
>> No.11688 Reply
>>11684
> > Зачем?
Я вообще не знаком с Питоном.
>>11683
Доброчан, да...
>> No.11689 Reply
>>11688
незнаком
самофикс
>> No.11690 Reply
> делать присваивание внутри выражения
То есть так написать нельзя?
string st;
while ((st = file.ReadLine()) != null)
>> No.11691 Reply
>>11690
Нельзя.
>> No.11696 Reply
>>11690
лолнет, но это тоже скорее хорошо. Непитоник, видишь ли. Его суть - императивность в самом что ни на есть буквальном смысле.
>> No.11697 Reply
File: 1286561075730.png
Png, 30.93 KB, 200×200 - Click the image to expand
edit Find source with google Find source with iqdb
1286561075730.png
> немутабельные строки - это хорошо.
Конечно хорошо! Как бы иначе питон отсосал у руби?

Ruby: http://ideone.com/73kSi
> результат: Успешно время: 4.08s память: 4760 kB
Python http://ideone.com/mZJvs
> результат: Превышено ограничение на время время: ∞ память: 163584 kB сигнал: 24 (SIGXCPU)
>> No.11698 Reply
File: laughing_flower1.png
Png, 11.31 KB, 300×300 - Click the image to expand
edit Find source with google Find source with iqdb
laughing_flower1.png
>>11697
У тебя там range всю память съедает, потому что она создает неленивый списак. Сделай xrange и все станет ок.

Хотя то, что такие тонкости надо знать, приближает бидон к байтоебству. В бидоне 3 вроде убрали, но он, как известно, не нужен.
>> No.11699 Reply
>>11698
По времени все равно не влезает в квоту. Неужели бидон даже у руби отсосать по производительности смог?
>> No.11700 Reply
>>11697
Ох бля. Предвидя сообщение о том, что у меня, дескать бугурт, высказываюсь: надо быть полнейшим долбоёбом, чтоб меряться такой хуйнёй. Это на самом деле занятие для умственно отсталых, для посетителей /c/, например. Которые пишут факториалы на хаскелле темплейтами, а потом во всю кричат "ололо сишка соснула у хачкеля!!11" и радуются как дети.
Теперь ближе к делу, но не по делу:
Во-первых, мне как-то не приходилось в реальных задачах встречать такой код. Нахуй его тестировать на производительность? Хуйпроссышь.
Во-вторых, что Руби, что Пайтон - сосут у сишки ололо. Если нужно байтоёбство и такая-то производительность - я не знаю, каким надо быть долбоёбом, чтоб выбрать язык с утиной типизацией. Пора бы уже перестать страдать хуйнёй и заняться делом, если, конечно, любители менряться факториалами на идеоне вообще на что-то кроме этих факториалов способны.
В-третьих, занятно, как ты выбрал Руби1.9.2 и Пайтон2.6.4. Охуенная прощадка для замеров. И да, xrange. И я б не назвал это "тонкостью". Но ничего мерять не буду ввиду вышесказаного.
И, наконец, по существу:
> Конечно хорошо!
Да, хорошо. Потому что иначе - сюрприз сюрприз - они не могли бы быть ключами в словаре. Кстати, тут пригодилась бы картинка, но я пак въебал - подкиньте, если у кого есть, типа "соснувший Йоба", с опущеными уголками рта
И, разумеется, - разумеется любезный читатель это знает, я хочу сказать - в Руби тоже есть иммутабельные строки. Но они изящно выделены в отдельный класс и сделаны синглтонами. Собственно, Руби вообще "изящней", но ... хуй знает как это сказать, я о том, что плюсы "хорошо спроктированного языка" это и его минусы в некотором смысле. Если бы тян (какой-нибудь там биолог или хуй знает какие там ещё специальности) меня попросила научить её писать йоба-скрипты для хуй-знает-чего, я б ей за время выпивания одной чашки чая в кафешке успел бы рассказать все основы пейтона и снабдить примитивными навыками гугления. А Руби? Объяснять ей, что вот это "мутабельная строка, а это иммутабельная, ах да, ты тупая пизда не знаешь же, что такое мутабельность..."? Ну вы понели.
Ну, хотя если ко времени следующего такого эксперимента я целиком перейду на Руби - может быть. А сейчас я даже сам на нём только под веб пишу. А скрипты-пятиминутки на пайтоне до сих пор - по привычке.
>> No.11701 Reply
>>11700
Няша, но у тебя ведь действительно настоящий баттхерт. В первую очередь от хаскелля, не осилил наверное. С чего бы тебе еще вдруг тот спецзабег с темплейтами припоминать? Речь-то шла про два языка с примерно одинаковой областью применения, про хаскель никто и не говорил.
>> No.11702 Reply
>>11700
> "ололо сишка соснула у хачкеля!!11"
Да, эпичный был отсос. Срак разорвало немало, а по тебе видно , что до сих пор болит.
>> No.11703 Reply
>>11701
> у тебя ведь действительно настоящий баттхерт
Ну я прям Ванга. Если тебе интересно - я спокоен как лёд, но кого это ебёт? Впрочем, подозреваю, что ты или вовсе не стал читать мой пост дальше воспоминания о темплейтах, либо так торопился сказать, что у меня бугурт, что не потрудился его осмыслить.
Но ввиду своего графоманства ах да, у меня ж бугурт! отвечу и на это. Поделюсь мыслями, тксть.
> не осилил наверное
О, ты не поверишь... Впрочем, не об этом пойдёт речь.
> С чего бы тебе еще вдруг тот спецзабег
А вот именно об этом. В тот раз я был совершенно поражён. Дело в том, что у меня сложилось какое-то предубеждение о местных Хаскелефагов - мол, упоротые, но в среднем довольно неглупые люди. Думал, что клинические случаи это золотце, ну там ещё пара мимокрокодилов... Короче, не ожидал никак такого от хаскелеёбов. У меня был натуральный шок от того, что я увидел в треде. Ну, знаешь же как это бывает с теми, кто, кхм, привык к бордам - хочется хорошо относится к доске, потому что иногда хочется чем-то поделиться, иногда даже наоборот - спросить совета. Короче, не суть. Суть в том, что я тогда так охуел, что с тех пор даже не заходил в /с/ ни разу. Разочаровался.
Ну и это довольно показательный пример, вот в чём всё дело. Дело ведь ни разу не в Хаскеле - не знаю, почему ты так решил, то ли у тебя у самого зачесалось, то ли ты действительно не потрудился прочесть пост. Просто все эти замеры на идеоне - показатель... ну если не клинического дебилизма, то клинического "нехуй делать". Тест, приведённый ИТТ - классический образец подобного поведения. А те самые темплейты - апогей.
> два языка с примерно одинаковой областью применения
И снова было бы просто разумней сослаться на мой предыдущий пост. Как я сказал, языки разные. Причём идеологически разные. Плюсы Руби - его же минусы. Минусы пайтона - его же плюсы. Это просто разные вещи. И как я уже сказал, даже несмотря на разумность замены пайтона рубями - если я на это способен - я этого так и не сделал для скриптов пятиминуток. Потмоу что писать пятиминутки на пайтоне - легче, быстрее. Он императивен по своей идеалогии, а не по какой-то недоклассификации. А ведь у руби в этой области есть нихуёвый плюс - rake. Правда, библиотек меньше.

Ну и раз ты так настаиваешь на тестировании - напомню (что я видимо зря не сделал в предыдущем посте), что в реальных тестах Руби во всю сосёт у Пайтона, хоть 1.9.2. и стал несколько лучше чем 1.8.7. Причём порядком раздражает, как наплевательски Матц относится к производительности - надеюсь, хоть теперь (с тех пор, как он работает в Heroku, I'm sayin') дела станут лучше.
>> No.11704 Reply
>>11702
Не удержался от фейспалма. Ну, допустим, ты меня просто троллешь, но, блядь, кто-то ведь серьёзно в это верит - ну по тому треду на это было похоже, - и от этого я просто охуеваю. Это же на самом деле идиотизм, даже не как эвфемизм, а болезнь в какой-то удивительно извращённой форме.
>> No.11705 Reply
File: 1295681472221.png
Png, 168.43 KB, 600×600
edit Find source with google Find source with iqdb
1295681472221.png
File: 1307609826889.jpg
Jpg, 15.19 KB, 200×300
edit Find source with google Find source with iqdb
1307609826889.jpg

> занятно, как ты выбрал Руби1.9.2 и Пайтон2.6.4
Я выбрал последнюю стабильную версию интерпретатора.

Суть теста - показать фатальный минус иммутабельных строк. Очевидное решение - создание и использование мутабельных, там где нужно - так как это сделали в руби. Но гвидо этого не понимает. Отсос есть отсос, что бы ты не говорил. И всё. А тут такая струя баттхерта.
>> No.11706 Reply
>>11705
форман.жпг
Я бы подумал, что ты сам на грани батхёрта, поэтому так стараешься уличить в этом других. Но ты ведь, похоже, и правда в это веришь. пиздец. Кругом одни идиоты. Нет пути. Пойду утешу себя чаем с шоколадкой.
>> No.11708 Reply
Наркоманы, результат str(i) нигде не сохраняется. Созданная строка должна сразу же удаляться после выполнения этого выражения. Да, у питона на ideone очевидные проблемы со сборкой мусора, причем тут (им)мутабельность строк?
>> No.11709 Reply
>>11697
Что это за нахуй?
$ time python 1.py 

real	0m5.121s
user	0m4.756s
sys	0m0.180s

$ cat 1.py 
string = 'string'
 
for i in range(10000000):
    str(i)

$ python --version
Python 2.7.1+
В 2.7 мутабельные строки или что?
>> No.11710 Reply
File: 269115653.jpg
Jpg, 50.75 KB, 521×500 - Click the image to expand
edit Find source with google Find source with iqdb
269115653.jpg
>>11708

Okay, теперь сохроняется.

Python с xrange http://ideone.com/kIW7q
> результат: Превышено ограничение на время время: ∞ память: 184704 kB сигнал: 24 (SIGXCPU)
Ruby http://ideone.com/Q3IjK
> результат: Успешно время: 4.77s память: 62880 kB возвращаемое значение: 0
>> No.11713 Reply
>>11710
Иди-ка ты со свои ideone
$ time python 2.py 

real	0m7.110s
user	0m6.172s
sys	0m0.372s
>> No.11716 Reply
>>11713
Может хватит с ними играть? Оставь убогих, не трать своё время на хуйню.
>> No.11739 Reply
мутабельность для быдла, ага
>> No.11742 Reply
Расскажи о модуле sexy
>> No.11784 Reply
Ньюфаг итт. Каковы области применения этого вашего питона? Что на нем делать можно окромя бочки ?
Говна поел, добра въебал.
>> No.11785 Reply
>>11784
Если кратко, то делать на нем можно все, но результат немаловероятно будет сосать по скорости, поэтому Python чаще всего используют для прототипирования и написания всяких одноразовых скриптов типа срезайзить 9000 изображений и добавить на них водяные знаки, чуть реже для web'а и различных научных расчетов.
Также для пайтона существует много привязок к C/C++ библиотекам типа OpenCV и игровым движкам http://en.wikipedia.org/wiki/List_of_game_engines (см Bindings).
А вообще посмотри http://tinyurl.com/python-usage
>> No.11786 Reply
>>11785
> результат немаловероятно будет сосать по скорости
/s/ doesn't know about my PyPy? Скорость там на многих задачах достигает скорости hand-written C благодаря весьма умному JIT компилятору.
>> No.11789 Reply
>>11785
Спасибо, анон.
>>11786
> /s/ doesn't know about my PyPy?
Ну я точно не знаю. В чем различия от "стандартного" питона?
>> No.11790 Reply
>>11786
> на многих задачах достигает скорости hand-written C
Ну, тут ты слегка преувеличиваешь, потому как GIL, например, оттуда до сих пор не убрали и даже не собираются этого делать в ближайшем будущем. Насколько я помню, во всяком случае. А у нас тут не 2005 год даже.
Но судя по
> чаще всего используют для прототипирования и написания всяких одноразовых скриптов
ньюфагам отвечают ньюфаги.
>> No.11792 Reply
File: 1.jpg
Jpg, 75.34 KB, 351×516 - Click the image to expand
edit Find source with google Find source with iqdb
1.jpg
>>11790
> Но судя по
> > чаще всего используют для прототипирования и написания всяких одноразовых скриптов
> ньюфагам отвечают ньюфаги.
Ну давай тогда свое экспертное мнение, мы слушаем.
>> No.11797 Reply
>>11789
> В чем различия от "стандартного" питона?
В наличии JITа, ускоряющего тот же самый питон код до 100x. Например вот тестирование PyPy для реал-тайм обработки видео на чистом питоне, http://morepypy.blogspot.com/2011/07/realtime-image-processing-in-python.html
>>11790
> GIL
multiprocessing для кого придуман? Вообще аппеляции к GIL в вопросах производительности питона это по большей части тролленг, ибо нормальному питон-приложению GIL не мешает.
> даже не собираются
Вообще-то есть как минимум два проекта по его убиранию. Armin недавно публиковал статью на тему замены GIL'а STM'ом, http://morepypy.blogspot.com/2011/06/global-interpreter-lock-or-how-to-kill.html
> ньюфагам отвечают ньюфаги
Унылая предъява от того, кому нечего сказать по существу, да еще с таким-то промахом в авторстве сообщений. Facts or gtfo.
>> No.11804 Reply
>>11797
> нормальному питон-приложению GIL не мешает
Форман.жпг
> два проекта
> > в ближайшем будущем
>> No.11805 Reply
>>11804
> > в ближайшем будущем
Если тебе надо ПРЯМ ЩАС, а multiprocessing ты ниасилил, как и нормальную архитектуру приложения, то PyPy поддерживает greenlets, tealets, stackless и т.д.
>> No.11806 Reply
>>11742
Сэр, мехи не порвите.
>> No.11811 Reply
>>11805
"Нормальная архитектура" в пайтоне формируется его неспособностью делать естественные вещи. И не надо прям так набрасываться - всё с ним заебись, сам знаю. Вот только про преодоление звукового барьера и обход хэнд-райтн Си - это перегиб. И мультипроцессинг не оправдывает невозможность использования треды, которые там всё равно есть. Лучше б там акторов нормальных запилили, ящитаю.
РуРу я использовал только поиграться, так что если можешь рассказать без явных преувеличений, а хоть с какими-то цифрами - с радостью бы послушал. Не на базаре, всё-таки.
>> No.11832 Reply
>>11811
Про цифры я выкладывал ссылки на блоги разработчиков, они вообще очень много разных бенчмарков приводят.
Есть еще http://speed.pypy.org/, там в разделе comparison очень много данных.
> РуРу я использовал только поиграться
Если использовал давно, то он с тех времен СИЛЬНО изменился. У проекта очень большой прогресс за последний год, плюс их теперь финансирует PSF и немного гугль. Они в том числе реализовали c-types и частично Python C API, так что многие экстеншны под cpython работают и на pypy без изменений.
> Вот только про преодоление звукового барьера и обход хэнд-райтн Си - это перегиб
Это такая inside joke проекта, лол.
> Rumors have it that the secret goal is being faster-than-C which is nonsense, isn’t it?
Причем этот goal Alex и Maciej воспринимают вполне серьезно, например, и есть набор бенчмарков для тестирования pure python via PyPy против hand-written C. Случаи, когда PyPy оказывался быстрее, таки были (что впрочем, конечно, говорит прежде всего о качестве C кода, но все же).

Вообще там недавно очень сильно обновили документацию, и советую её полистать. В частности про stackless, http://doc.pypy.org/en/latest/stackless.html
>> No.11842 Reply
File: Screenshot.png
Png, 17.60 KB, 578×147 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot.png
>>11832
Хм, похоже я и правда от жизни несколько отстал. Надо навёрстывать. Много было замечено ВНЕЗАПНЫХ таких проблем при попытках использовать какие-нибудь из достаточно популярных библиотек? Какие планы на 3.х? Алсо,
> Yes, PyPy has a GIL. Removing the GIL is very hard. The first problem is that our garbage collectors are not re-entrant.
P.S.
Тест на пикрелейтед был, конечно, туп и бесполезен, но это всё равно порядком впечатляет, да.
>> No.11846 Reply
>>11842
> Тест на пикрелейтед
Для таких тестов есть специальный модуль, который запускается через ключ интерпретатора, -m timeit:
#> python3.2 -m timeit "for i in range(1000000): x=i+10"
10 loops, best of 3: 170 msec per loop
#> pypy -m timeit "for i in range(1000000): x=i+10"
10 loops, best of 3: 19.4 msec per loop
> достаточно популярных библиотек?
Есть вики, в которой отмечаются работающие/не работающие пакеты. Пока самая большая проблема - несовместимость с numpy/scipy, но их сейчас активно переписывают под pypy, базовые вещи из numpy уже портировали.
https://bitbucket.org/pypy/compatibility/wiki/Home
> Какие планы на 3.х?
Пока они 3.х заниматься не планируют. Хотя я работаю над схожим проектом, и проводил оценку сложности апдейта с 2.7 до 3.1, по моим расчетам там не так уж много изменений (большинство из 3.х бэкпортировано в 2.6/2.7, и соответственно, уже поддерживается), месяца за 3-4 в одиночку можно управиться.
>> No.11851 Reply
>>11811
> хэнд-райтн
ритен же
>> No.11852 Reply
Сложная штука этот питон. Помимо двух веток, еще и реализации разнятся определенно. Поди разберись еще, что и как, и зачем.
всё тот же ньюфаг
>> No.11853 Reply
>>11852
Как будто с реализациями C++ лучше. Никогда не пробовал писать под MSVC и GCC одновременно? То еще удовольствие.
Реализации питона намного более корректны и standard compliant. Значимая разница у CPython, PyPy, Jython и IronPython по сути только в поддержке внешних библиотек.
>> No.11855 Reply
>>11853
> Значимая разница у CPython, PyPy, Jython и IronPython по сути только в поддержке внешних библиотек.
Что удивительно, на самом деле ну и не совсем так, конечно, но всё же. Грех на них пиздеть после этого.
>> No.11868 Reply
>>11853
> Никогда не пробовал писать под MSVC и GCC одновременно? То еще удовольствие.
Я же написал - я ньюфаг. Какое там "писать".
>> No.11872 Reply
>>11852
Пиши на хаскелле, няша, у него всего одна нормальная реализация :3
>> No.11877 Reply
>>11872
> хаскелле
Вакансий на него нету у нас.
>> No.11880 Reply
Карьеро-ньюфажеский вопрос.
Что мне такого написать, чтобы показать как пример своего кода для устройства куда-нибудь веб-питон-джуниором?
>> No.11882 Reply
>>11880
Имиджборду же
>> No.11884 Reply
>>11880
Wiki-движок. Луркай http://www.google.com/search?q=20+minutes+wiki + имя какого-нибудь фреймворка e.g. Django, TurboGears, Pyramid...
>> No.11886 Reply
>>11880
Поучаствуй в каком-нибудь web python FOSS проекте. Бонус пойнт за участие в разработке самого фреймворка, особенно джанги. Это не только код, но еще и такой то экспириенс командной работы!
>> No.11889 Reply
Оп, объясни по-русски Lists Comprehension. Не вдупляю в документацию, на примеры смотрю как на иероглифы.
>> No.11891 Reply
>>11889
>>11889
Это как бы аналог задания множества в математике, смотри пример.
По-русски:
Множество квадратов натуральных чисел от одного до десяти
Математическая запись:
{x² где x ∈ {1, 2, ..., 10}}
Python:
> [x**2 for x in range(1, 11)]
 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>> No.11895 Reply
>>11891
А теперь не на петушином говне, а на языке программирования:
[x ^ 2 | x <- [1..11]]
>> No.11896 Reply
>>11892
ты совсем добра не знаешь?
http://dobrochan.ru/help/wakabamark
>> No.11900 Reply
>>11895
[x ^ 2 | x <- [1..11]]
map (^2) [1..11]
>> No.11902 Reply
>>11900
>>11895
Вообще-то
[x^2 | x <- [1..10]]
>> No.11906 Reply
>>11902
Что за езык?
>> No.11908 Reply
>>11906
каскиль же, не обращай внимание.
>> No.11911 Reply
>>11889
ОП охуел с того что тред до сих пор жив да еще и на нулевой странице. Почитай вот это:
http://www.secnetix.de/olli/Python/list_comprehensions.hawk
http://www.python.org/dev/peps/pep-0202/
>> No.11912 Reply
Типичный код на хаскеле: http://ideone.com/VtnCi
Типичный код на питоне 3: http://ideone.com/CAAbE
Feel the difference. Да никакой разницы.
>> No.11913 Reply
>>11912
Код на хаскеле работает в десятки а то и сотни раз быстрее и для любых типов.
Алсо, http://ideone.com/WI3Ck
>> No.11914 Reply
>>11913
> работает в десятки а то и сотни раз быстрее
Открой уже для себя PyPy и начни различать ЯЗЫК и РЕАЛИЗАЦИЮ.
>> No.11915 Reply
>>11914
В сотни раз быстрее самой лучшей потенциально возможной. Даже если её еще не существует.
>> No.11917 Reply
>>11913
Тащемта скорость замерять на таких мелких программах нечестно, т.к. cpython долго запускается (0.01-0.02 секунды.) И да, оба кода работают для любых типов.
> min' = foldl (\x y -> (min x y) mplus x mplus y) Nothing
Что-что?
>> No.11919 Reply
>>11913
А правда, что у хаскелоёбов маленькие письки?
>> No.11926 Reply
>>11914
>>11917
Тащемта, Хаскиль быстрее, чем cpython и даже чем РуРу. Но не в скорости прелесть Пайтона. Так что вы опять о какой-то хуйне спорите.
>>11915
А вот это ещё схуяли?
>> No.11928 Reply
>>11926
И в чем же тогда прелесть питона, лол? В динамическом петушении?
>> No.11938 Reply
File: 1235570077088.jpg
Jpg, 12.43 KB, 300×300 - Click the image to expand
edit Find source with google Find source with iqdb
1235570077088.jpg
>>11912
И реальная работа этого кода:
хачкель: http://ideone.com/DZ0eS
питон 3: http://ideone.com/6cKrb
Feel the difference. Бидон кривое говно для полуграмотных макак.
>> No.11940 Reply
File: 895b8aa9e9.jpg
Jpg, 31.00 KB, 500×403 - Click the image to expand
edit Find source with google Find source with iqdb
895b8aa9e9.jpg
>>11938
Осталось узнать, как применять хаскиль для чего-то практически ценного. Пик стронгли релейтед.
>> No.11941 Reply
>>11940
> как
иметь мозги и прямые руки
>> No.11942 Reply
>>11941
> иметь мозги
Ах, ну тогда все понятно. То-то мне везде этим хаскелем мозги имеют. Это же его основное применение!
>> No.11943 Reply
>>11942
Ты такой смищной. Правда. Очень.
>> No.11944 Reply
>>11940
Практическая ценность заключается в том, что говнокодеры в Хаскель не могут. Это позволяет быстро фильтровать резюме, например, т.е. если в нём есть слово "Хаскель", можно пропустить часть быдлотестов и сразу начать со следующего уровня.
>> No.11945 Reply
Товарищи хаскелеёбы, заведите себе хаскель-тред и прекратите срать в этом, пожалуйста.
>> No.11947 Reply
>>11944
> говнокодеры в Хаскель не могут
http://www.willamette.edu/~fruehr/haskell/evolution.html Да, конечно, это своего рода юмор, но в каждой шутке есть доля правды.
Даже если и правда не могут, то это совсем не плюс языка с моей, как работодателя, точки зрения. Быдлокодеры нужны, как таджики на стройке: никто не доверит им проектировать здание, но с примитивной работой они справятся не намного хуже высококвалифицированных кадров, а платить им можно в разы меньше.
> быстро фильтровать резюме, например
О, мой друг, тут вы опять ошибаетесь. Да, очень хочется иметь в команде человека, который помимо всего прочего понимает функциональное программирование и знает такой замечательный язык, но как его отличить от фанатика вроде вас? Придется задавать дополнительные вопросы, пока не буду уверен, что не увижу от него НЕХ вида
1 if n == 0 else reduce(lambda x, y: x * y, range(1, n + 1))
там, где это крайне нежелательно. Ну и если он не понимает в чем прелесть Пайтона, то понимает ли он в чем прелесть Хаскеля, или же для него просто «все хуйня кроме пчел»?
>> No.11960 Reply
>>11945
> хаскель-тред
Я джва года хочу такой тред.
Хачконуб
>> No.11961 Reply
>>11960
Так создай.
>> No.11964 Reply
>> No.12015 Reply
File: 1260353211336.png
Png, 67.79 KB, 317×372 - Click the image to expand
edit Find source with google Find source with iqdb
1260353211336.png
Хм, может мне тут посоветуют годную IDE. В принципе, PyScripter понравился, няшный вполне, но как жеж бесят его загоны по поводу кодировок. В результате перепробовав с десяток за вечер IDEшек разных снес все к хренам и вернулся к связке IDLE + nano.
>> No.12016 Reply
File: wingide.png
Png, 297.74 KB, 1680×1050 - Click the image to expand
edit Find source with google Find source with iqdb
wingide.png
>>12015
WingIDE Pro, пикрилейтед.
>> No.12017 Reply
>>12015
> годную IDE
Emacs/Vim. Очевидно же.
>> No.12023 Reply
File: aaaaaaaaaaaaaaaaaaaaa-2.png
Png, 484.87 KB, 1300×1486 - Click the image to expand
edit Find source with google Find source with iqdb
aaaaaaaaaaaaaaaaaaaaa-2.png
>>12016
Комерция
>>12017
Спасибо анон! После этого омерзительного звука, который раздается каждый раз при прокручивании колеса выше/ниже допустимого скрола, я готов вручную лопатить исходники, мною написанный было-код которых вызывает глюки юникода. Все лучше, только бы не слышать этого ужаса.
>> No.12034 Reply
>>12015
ты как то прикрутил nano к IDLE? расскажи как, что ли. если ты их используешь раздельно - тогда не нужно.
алсо, попробуй komodo edit, дешевобесплатно и сердито. прекрасный автокомплит и все такое, не то что в нетбинсе
>> No.12042 Reply
>>12023
Это где такое? В виме всякие попискивания отключаются прописыванием в .vimrc
set visualbell t_vb=
>> No.12065 Reply
>>12023
Spyder хорош. Но сам подсел на gedit в последнее время. Причём довольно плотно так подсел. Иногда возникают мысли выучить "текстовый редактор для настоящих мужчин", но как-то все попытки не увенчались успехом. Слишком уж уёбищен этот не-графический интерфейс, и нет почти ничего нужного, что я могу лего делать там, и до сих пор не могу на гедите. К тому же к гедиту плагины пишутся на пайтоне, что плюс.
Но это всё не IDE, конечно, что это я купился на чьё-то кукареканье выше. Из IDE самое приличное, что я видел - Spyder, но, как я уже сказал, слез с него. Ещё в последнее время возникают мысли перелезть на Eclipse с соотв. плагинами, но это потому, что у меня накопился пакет языков, которые я-таки использую, а без IDE там совсем хуёво. Лучше уж тогда 1 IDE выучить.

Снова отступая от сабжа, emacs продовал. скорее всего уже не вернусь. Осталось попробовать подсесть на vim, но даже не знаю, как к нему подойти, чтоб в первый день не забить. Какие у него там вообще прелести? В чём преимущество перед емаксом? Можно ли поднажать и сделать из него что-то вроде примитивной IDE со всякими пайлинтами, С++ дебаггером и анализом Джавы как в НетБинсе? (Ну это я так, конечно, но интересно, насколько далеко распространяются возможности)
А вообще тут не хватает IDE-треда.
>> No.12067 Reply
>>12042
Emacs - теперь по ночам сниться будет
>>12034
> ты как то прикрутил nano к IDLE
Нет. IDLE под виндой, nano для мелких правок через SSH на дебе.
> попробуй komodo edit
Гляну, вечность в запасе.
Не считая конечно необходимости еще и сам язык учить хоть чуть-чуть.
>> No.12071 Reply
File: vi-emacs2.jpg
Jpg, 45.12 KB, 800×444 - Click the image to expand
edit Find source with google Find source with iqdb
vi-emacs2.jpg
>>12065
> Какие у него там вообще прелести?
Режимы. Очень удобная и эффективная штука.
> В чём преимущество перед емаксом?
Легче, не умеет варить кофе, есть режимы.
> Можно ли поднажать и сделать из него что-то вроде примитивной IDE со всякими пайлинтами, С++ дебаггером и анализом Джавы как в НетБинсе?
Можно, но лучше это делать из емакса.
>> No.12077 Reply
>>12071
Емакс оставил на мне плохое впечатление. К тому же говнолисп. Причём даже не просто лист, а именно какой-то говнолисп с привкусом бороды и потных ног.
А для вим-а я слышал можно писать на Руби, Пайтоне, есть gvim (правда, я не устанавливал и не уверен, что он дейстивтельно прилично выглядит) и крутая версия под макос. Им пользуются рубихипстеры (которые не пользуются ТекстМэйтом) и Джон Ресиг.
Короче, если я и подсяду на настоящий мужыцкий текстовый редактор, то это будет вим. Но никак не могу собраться с духом. Может кто подкинет ссылку на туториальчик, что тако плавненьий, типа садишься, начинаешь следовать инструкциям и ррраз, ты уже на игле! Нет? Надо будет среди рубовских скринкастов поискать, что ли...
>> No.12079 Reply
>>12077
> Может кто подкинет ссылку на туториальчик, что тако плавненьий, типа садишься, начинаешь следовать инструкциям и ррраз, ты уже на игле!
Vimtutor. Другие туториалы не нужны.
> А для вим-а я слышал можно писать на Руби, Пайтоне
Работает это все пока что криво. Придется писать на встроенном vim-бейсике.
> есть gvim (правда, я не устанавливал и не уверен, что он дейстивтельно прилично выглядит)
Выглядит прилично, но пользы от него никакой. А красивые гуевые цветовые схемы можно и из консоли юзать, если немного поколдовать.
>> No.12081 Reply
>>12079
> Придется писать на встроенном vim-бейсике.
А вот это очень плохие новости. И, видимо, раз до сих пор не "выпрямили" - это сложноватая для меня работёнка, надо понимать.
> Выглядит прилично, но пользы от него никакой.
Очень не люблю всё это емаксоподобие. Консолька - лады, ок, куда ни шло. Но в идеале мой текстовый редактор должен выглядеть как текстмейт или допиленный гедит, или Sublime Text 2. Возможно, я бы даже к емаксу привык, если б у него был нормальный интерфейс, а так я просто заблудился в нём при попытке хоть что-то настроить. Нахуй-нахуй.
>> No.12082 Reply
>>12081
> так я просто заблудился в нём при попытке хоть что-то настроить. Нахуй-нахуй.
У емакса отличная встроенная документация. Не представляю, как там можно заблудиться.
> если б у него был нормальный интерфейс
Интерфейс настраивается на любой вкус.
> Но в идеале мой текстовый редактор должен выглядеть как текстмейт или допиленный гедит, или Sublime Text 2.
И вообще, из емакса можно сделать все что угодно.
>> No.12350 Reply
Я тут в последнее время задумываюсь о то, что Руби вроде как илитней и делать веб-приложения на рельсах современней и продуктивней, чем на той же джанге. Но тут надо оговориться, что веб-приложения я вообще ни на чём не делал (если не считать цги-хуйню для развлекухи и JEE на работе). Даже пых не знаю. И как бы никакой срочности нет, просто неправильно это, что я не написал до сих пор ни одной имиджборды ну и вы понели. Но пайтон я худо-бедно знаю, руби - на уровне экспериментов. И, конечно, поковырять я успею всё что угодно, но нужно всё-таки на чём-то сконцентрироваться. Тем более что пайтон довольно прочно занял в моей жизни нишу скриптописания.
Так вот, посоны, что посоветуете? Стоит ли мне сейчас внезапно осваивать Руби с Синатрой/Рельсами (и таки с чем? Ну и вообще, любые советы и напутствия, что вы можете дать, будут приняты с благодарностью) или лучше махнут на всё это рукой и заняться джангой? В общем, буду признателен за любые ваши размыщления по этому поводу, а то у меня за всеми этими хаскелями какое-то распыление сознания в последнее время случилось, не могу понять, что мне нужно, лол.

Был бы тут Руби тред, спросил бы в нём, создавать же оный, не зная, есть ли тут желающие поговорить о всяких хамлах и огурцах как-то не осмеливаюсь.
>> No.12354 Reply
>>12350
может стоит сосредоточится на чем то одном? а потом уже уверенно зная джангу перейти на рельсы, чтобы понять все плюсы и минусы. алсо, вебдев не так уж ужасен. даже я, быдлокодер на пыхе со стажем пару месяцев могу написать борду правда, тогда не стоит смотреть сорцы.
>> No.12356 Reply
>>12354
Лол, конечно вебдев не ужасен. И конечно нужно сосредоточиться на чём-то одном. Вот я и хочу решить, на чём.
Просто что джангу, что рельсы я знаю на одинаковом уровне. т.е. никак. Руби вроде как илитней, и рельсы более совеременный и красивый инструмент, если верить слухам. А Пайтон я уже не очень плохо знаю, но джангу всё равно не трогал.

Пых не надо. Пых я ещё успею поковырять. Собственно, повторюсь, всё что угодно смогу ещё попробовать, но вот конкретно сейчас у меня выбор между Джангой или каким-нибудь Руби-фреймворком, с которым я и побалуюсь в ближайшее время. Собираю советы и мнения. В идеале, конечно, хотелось бы послушать того, кто имеет опыт работы и с тем и с другим.
>> No.12357 Reply
>>12356
тут я буду осторожен в высказываниях. если для тебя не стоит вопрос в поиске работы после изучения, то можешь рискнуть и попробовать рельсы. я выбрал пых не от хорошей жизни. я тоже знаю питон и, бывает, даже пишу на нем для фана, но в моем городишке джанга никому не нужна, а вот быдлокодеры на пыхе нужны. востребованность решила за меня :3
>> No.12380 Reply
>>12357
У меня есть работа, где я пишу, как уже сказано, на Джаве. Её я, впрочем, тоже предполагаю сменить, и может даже на какой-то пых, но речь сейчас не том. Речь сейчас не об абстрактном, завязанном на тысяче социально-экономических факторов "зарабатывании денег", а о реальной, измеримой вещи: "погромист не может написать имиджборду, в только посмотрите на него!"
Пых я всё равно рано или поздно выучу, - причём, думаю, не позднее полугода после этого разговора - потому что жизнь подкидывает факториалы на нём, ну и плюс надо уметь разобраться во внутренностях чужих поделок, которые чаще всего и есть на пыхе. Почему я не рассматриваю как "вебдев" JEE - думаю, очевидно.
Кто-нибудь может описать плюсы Рельсов, плюсы Джанги, сравнительную производительность, сравнительный объём кода на похожих задачах? Или в /s/ только пайтонисты?
>> No.12381 Reply
>>12380
> Или в /s/ только пайтонисты?
да нет, где-то здесь был рубист, что-то рассказывал, только вот я не помню где именно.
>> No.12398 Reply
Нуб ИТТ. Вопрос негуглимый.
В чём хранить данные на жёстком диске? В смысле, да, я знаю, что есть куча способов: текстовые файлы, json, yaml, xml, csv; pickle, бинарные словари и другие сериализованые данные; куча разных баз данных, MySQL, PostgreSQL, sqlite, да ещё и вдовесок ко всему NoSQL базы данных. И что для разных ситуаций применимы разные способы.
Вот только т.к. я нуб, в этом и есть вся проблема. Я не знаю, как выбрать из всего этого многообразия то, что нужно мне для какой-то задачи. Как не забивать шурупы молотком. Собственно, это и есть всё описание проблемы и именно на это описание я хотел бы услышать ответ, но т.к. ждать ответа даже не удосужившись сформулировать вопросы уж совсем нагло, я продолжу:
1. Ну с текстовыми форматами, положим, можно разобраться исходя из структуры данных, но и тут всё не очень ясно, ведь как правило чисто табличные данные - редкая ситуация, обычно они одинаково хорошо ложаться как на csv, так и на словарный формат. Собственно, нужно ли вообще что-то кроме json'a?
2. MySQL vs PostgreSQL и прочее. Есть ли реальная разница в использовании или это чисто вопрос предпочтений? Верно ли я понимаю, что это всё для пиления имиджборд и прочих новостных порталов, и область применения этим чётко определена?
3. NoSQL. Вопрос аналогичен предыдущему. Опять же, стоит ли мне, нубу, делать различие между, допустим, CouchDB и MongoDB? Для чего оно вообще нужно, кроме холиваров на тему SQL vs NoSQL?
4. Сериализуемые словари. Для чего стоит применять, а для чего уже нет, исходя из вопросов производительности.
5. Пример: я решил сделать себе оффлайновый дневничок, с тегами и как положено. Что мне следует выбрать для хранения данных? Моя догадка - папка с текстовыми файлами и pickle для индекса (вида {тег : (кортеж имён файлов)})
6. Пример: трекер прогресса для качков-спортсменов. Т.е. данные в каждой записи достаточно чёткого формата, и при этом должны бы не очень медленно обрабатываться, ведь может быть нужна функция сбора какой-то статистики по данным, например, построить график прогресса, а качок может быть опытный, с несколькими тысячами записей. Или (не могу придумать пример, но наверняка такое бывает ИРЛ, просто не вспоминается) записи добавляются по десятку в день, т.е. может понадобиться обработать и того больше информации.
7. Пример: библиотека музыки, или книг, или картинок. Картинок. Их может быть - ...ну, вы сами понимаете, сколько. Они могут иметь теги, как-то группироваться. А книги могут иметь к себе ещё и комментарии, обширную мета-информацию и приложения (например, код к учебникам по программированию). Вопрос тот же: в каком формате мне следует всё это сохранить?
8. Что делать с действительно большими объёмами, например, с сырьём для дата-майнинга? Тоби Сегаран в своей книжке всё пихал в sqlite (а то и вове в csv), всё верно делал или по-хорошему надо выбрать что-то другое? Трудно ему доверять, т.к. он вообще на python фигово пишет.
9. Какие ещё полезные форматы я не упомянул?
10. Наконец, есть ли вообще какие-то общие рекомендации, о чём думать при выборе формата данных?

Простите за такую пасту, боюсь, никто её вообще читать не будет, но вопрос общий, а как получить эту информация не от людей - я не знаю.
>> No.12410 Reply
>>12398
1. json, xml. Остальное ненужно.
2. Реальная разница конечно есть, но это не значит, что тебе кто-нибудь сможет её показать. Когда речь идет о сравнении СУБД, ничего, кроме унылых холиваров не жди.
>> No.12449 Reply
в треде говорилось про то, что практика - это труЪ. посоветуйте, КОНКРЕТНО что написать [spoiler]:3[/spoiler]
>> No.12451 Reply
>>12350
Не стесняйся, создавай.
>> No.12453 Reply
>>12449
А что бы ты хотел писать?
>> No.12458 Reply
>>12449
Имиджборду, конечно же.
> [spoiler]
> [/spoiler]
Используй %%текст спойлера%%, Люк.
>> No.12476 Reply
File: images.jpg
Jpg, 8.69 KB, 284×177 - Click the image to expand
edit Find source with google Find source with iqdb
images.jpg
Посоветуй, пожалуйста, годную книжку. Про документацию слыхал, но хотет печатный вариант.
>> No.12477 Reply
>>12476
> Про документацию слыхал, но хотет печатный вариант.
Ctrl+P
>> No.12478 Reply
>>12380
> Почему я не рассматриваю как "вебдев" JEE - думаю, очевидно.
нет, неочевидно.
6 лет-на-яве-кун.
>> No.12479 Reply
да, кстати, питон - очень плохая платформа, ибо не дебажится.
Невозможно продебажить программу на той же джанге в реальном окружении.
>> No.12491 Reply
>>12478
Шесть лет на Джаве и не научился называть её по имени. Ну что тут говорить?
>> No.12493 Reply
Чтобы было оче тру, борду писать полностью с ноля, аля самому делать роутинг, модельство и прочее шаблонизаторство, или же норм будет если я заюзаю, например, sqlalchemy с flask'ом?
>> No.12494 Reply
>>12493
шобы было совем труЪ пейши на ассемблере
http://habrahabr.ru/blogs/personal/80409/
>> No.12499 Reply
>>12479
Сам по себе питон вплоне дебажится (я использую для этого поделку для наркоманов eric, например). Джанга тоже вполне дебажится, просто ты об этом не знаешь. Попробуй debug-toolbar для дебага окружения и скула, а также не стоит забывать про django-extensions, тут тебе и shell_plus и консоль на трейсбеках. Вот тебе видия: http://ericholscher.com/blog/2008/sep/12/screencast-django-command-extensions/.
>> No.12524 Reply
>>12499
> консоль на трейсбеках
энто полный фейспальм. Я хочу нормальный дебаг с пошаговым выполнением, с локальными переменными и прочими радостями жизни.
>> No.12526 Reply
>>12524
Дебаггер не нужен
>> No.12527 Reply
File: 1313180277299.png
Png, 0.97 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1313180277299.png
>>12526
капча лучше всего детектирует источник мнения. Олсо, дебаггер нужен.
>> No.12528 Reply
File: 1313180528208.png
Png, 1.16 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1313180528208.png
>>12527
Основной аргумент в том, что вывалится все равно все не у тебя, и без грамотной системы логов ты ничего не поймешь. Дебаггер же способствует созданию заплаток и быстрым решениям (и только для этого он и нужен) в противовес пониманию кода.
Попробуй отдебажить что-то многопоточное или асинхронное, например.
>> No.12529 Reply
>>12528
няша, все дебагеры нужны, все средства отладки хороши - особенно, когда надо просто пофиксить "эту сраную ошибку хз откуда". Сам факт того, что дебаггер иногда позволяет лепить хуйню еще не делает его ненужным.
>> No.12873 Reply
Не знаю где спросить, поэтому спрошу тут.

Есть один sqlite. А бывает даже Postgres. И есть Aptana, которая не умеет в SQL. В боевых условиях я видел Oracle какой-то там девелопер, но это оверкилл. Есть ли какая-то простая бесплатная ИДЕ под Линукс, чтоб я мог смотреть содержимое своих табличек sqlite (а желательно и другого тоже) в удобном оконном интерфейсе с подсветкой синтаксиса?
>> No.12880 Reply
>>12873
Есть смотрелки sqlite, выбираешь любую по вкусу из apt-cache search sqlite (или аналогичной командой твоего любимого менеджера пакетов).
>> No.12887 Reply
>>12524
Ну так запускай сервер в любом дебаггере, и лови. Вот только ловить тебе придется со всей джангой в дебаггере, а как ты хотел, в любом другом языке было бы так же, выполять программу с точки входа до точки выхода. Я тебе еще раз говорю, если ты чего-то не осилил, это не значит, что это не возможно.
Алсо, да, консоль там тоже в окружении и с локальными переменными в любой точке цепочки вызовов. Однако, я все равно не вижу необходимости этому, потому что скриптовым языкам вроде питона дебаггер не особо и нужен, обычно хватает трейбека.
>> No.12972 Reply
File: 1300184570826.jpg
Jpg, 478.39 KB, 1240×870 - Click the image to expand
edit Find source with google Find source with iqdb
1300184570826.jpg
Поцоны, посоветуйте как взаимодейтсвовать с другим окнам линукса?

Точнее я хочу найто нужное окно(через титл), сделать скриншот отдельного компонента окна и нажать на нужную кнопку (или кликнуть на нужную точку)

Какие библиотеки юзаются?
>> No.12975 Reply
>>12972
xlib
>> No.12978 Reply
File: 1242469064813.jpg
Jpg, 268.17 KB, 1000×800
Your censorship settings forbid this file.
unrated
>>12975

Спасибо, держи няшу.

Завтра посмотрю, как заюзать эту либу
>> No.13027 Reply
>>12524
> Я хочу нормальный дебаг с пошаговым выполнением, с локальными переменными и прочими радостями жизни.
ipdb все что тебе нужно
>> No.13037 Reply
А можно ли как-то использовать понаписаное на пейтоне из руби? Ну, подразумеваются более-менее адекватные варианты. не требующие написания интерпретатора пейтона на руби.
>> No.13045 Reply
>>13037
https://github.com/danielfm/pyruby
Достаточно просто конвертируется.
>> No.13168 Reply
Прочитал книгу Лутца Learning Python (по 3 версии), хочу что-нибудь написать вроде простенькой игры, нагуглил библиотеку pygame, но у нее какая-то уебищная документация и нихуя не понятно.
С чего начать?
Алсо Pycharm VS Eclipse+Pydev VS что-то еще
что выбрать?
>> No.13169 Reply
>>13168
Зачем писать игры на питоне? Крайне нерациональное занятие.
Да, я когда-то использовал pyglet, но он вроде умирал тогда.
>> No.13179 Reply
>>13168
про pydev даже книжка была отдельная, не помню какого издательства, но одного из этих, крупных. Тоже хуйня, конечно, но лучше pygame всё равно нихуя нет. Гугли, короче.

Pycharm оч хорош, как и всё JBrain-овское. Но под Линуксом будет уёбищный интерфейс, нах не надо. Сам сейчас использую Aptana. Это, считай, сборка эклипса. С pydev-ом и симпатичной темой искаропки.
>> No.13193 Reply
File: 1269471667_1269417966_blade-of-darkness-3.jpeg
Jpeg, 166.11 KB, 1680×1050 - Click the image to expand
edit Find source with google Find source with iqdb
1269471667_1269417966_blade-of-darkness-3.jpeg
>>13169
EVE пополам с Blade of Darkness смотрит на тебя, как на байтоеба.
>> No.13195 Reply
>>13193
Будто бы питон не байтоёбство.
>> No.13682 Reply
File: 13128173490687.jpg
Jpg, 145.05 KB, 564×800 - Click the image to expand
edit Find source with google Find source with iqdb
13128173490687.jpg
Граблю картинки с одного сервиса. Имя картинки даю по имени сорса, а сорс, соотсветственно, это какой-то маппинг, в котором нет и намёка на расширение. Конечно, убунта их прекрасно открывает, но не комильфо держать огромное число файлов без расширений. Как угадать расширение картинки?
>> No.13683 Reply
>>13682
ответ прост, мой юный друг. Любая порядочная картинка включает в себя заголовок (зарезервированная в начале часть байтов). Собственно, именно по нему убунта и определяет что это за картинка и показывает ее тебе.
>> No.13684 Reply
File: 13128174723703.jpg
Jpg, 176.26 KB, 849×849 - Click the image to expand
edit Find source with google Find source with iqdb
13128174723703.jpg
>>13683
Лол, это я и сам знаю. Как это просто получить в пайтоне, минимально используя всякие монструозные библиотеки? Сам понимаешь, картинок много (а переименовывать я их хочу сразу во время скачивания), лучше не слишком разбрасываться ресурсоёмкими операциями. Ну или как попроще.
В общем, ещё раз: как получить расширение картинки?
>> No.13686 Reply
File: 13128165853768.jpg
Jpg, 620.21 KB, 4218×600 - Click the image to expand
edit Find source with google Find source with iqdb
13128165853768.jpg
А. Нашёл, спасибо. imghdr.what(f) из стандартной библиотеки. Правда, многовато открытий-закрытий получается, хотелось бы сразу из бинарных данных получить (т.е., до сохранения файла).
>> No.13747 Reply
Вообще, вопрос скорее не по пайтону, а общий. Но писать хотел на нём.
Еть папка со скриншотами. На них - рабочий стол, всякая фигня и 1-2 страницы с текстом. Белые прямоугольные страницы страницы, чёрный текст, глазами их увидеть очень просто. Хочу, собственно, сохранить в вырезанном виде все эти страницы. Но так и не смог сформулировать, что же мне надо от компьютера.
Вообще, я думал, что это всё умеет какая-нибудь библиотека типа OpenCV. Но как оказалось, знаниями одного АПИ это не решается, внезапно, да а больше ничего в их документации нет.
Кто-нибудь может мне помочь? Может у кого-то есть что-то похожее написанное? Не обязательно похожая задача, но вообще любые (не сильно сложные) CV/графика программы на пайтоне?
>> No.13756 Reply
Требуется IDE под винду.
С класировзером и прочими ништяками, без аллергии на винду и русский язык.
Бесплатное или опенсорсное.
>> No.13760 Reply
>>13756
> без аллергии на винду
> опенсорсное
а что, так бывает?
>> No.13763 Reply
File: 2011-09-14-151925_802x640_scrot.png
Png, 27.58 KB, 802×640 - Click the image to expand
edit Find source with google Find source with iqdb
2011-09-14-151925_802x640_scrot.png
>>13756
VIM?
>> No.13765 Reply
>>13763
THISTHISTHISTHIS!
Мимо-вимонуб
>> No.13768 Reply
>>13756
pycharm
>> No.13769 Reply
>>13763
А что будет, если я в нём выделю кусок текста мышой, нажму ctrl-x, перемещу курсор в другое место, нажму ctrl-v?

Алсо, сказано же: без аллергии на винду. Это значит что знания стандартных хоткеев должно быть достаточно для старта, а копипаст с другими приложениями не должен повреждать текст.
>> No.13770 Reply
>>13769
> А что будет, если я в нём выделю кусок текста мышой, нажму ctrl-x, перемещу курсор в другое место, нажму ctrl-v?
Ничего — по дефолту на эти комбинации ничего не забинжено. Если хочется — это легко изменить.
> Алсо, сказано же: без аллергии на винду. Это значит что знания стандартных хоткеев должно быть достаточно для старта
Исключительно в твоей голове. Олсо, с твоим синдромом утёнка рекомендую держаться подальше от «бесплатного или опенсорсного» — велика вероятность что всё будет не так, как ты привык, а так, как удобно автору софта.
> копипаст с другими приложениями не должен повреждать текст
Он не повреждает текст. Буфер обмена windows и X11 доступен через регистр «+». При желании его можно сделать буфером по умолчанию.

И да, vim придётся изучать. Это не та программа, с которой можно разобраться методом тыка.
>> No.13771 Reply
>>13769
> выделю кусок текста мышой, нажму ctrl-x, перемещу курсор в другое место, нажму ctrl-v?
Неудобно же. Можно выделить текст и нажать «x», а потом щёлкнуть колесом мыши там, куда нужно вставить (или нажать там «p»).
>> No.13780 Reply
>>13770
> И да, vim придётся изучать.
Изучал. Три года сидел с емаксом, 4 с вимом. Геморрой сплошной эти ваши красноглазые редакторы.
>>13771
Ну неудобно же! Базовые операции должны единообразно выполнятся во всех текстовых редакторах. Все эти yank вместо copy в документации - это огромный шаг на 20 лет назад в плане юзабилити и порога вхождения.

Алсо, не надо тред в холивар скатывать. Просил IDE под винду - предлагают текстовый редактор старше меня возрастом.
>> No.13781 Reply
File: pycharm.png
Png, 39.28 KB, 914×374 - Click the image to expand
edit Find source with google Find source with iqdb
pycharm.png
>>13768
Нет.
>> No.13783 Reply
>>13780
> Изучал. Три года сидел с емаксом, 4 с вимом. Геморрой сплошной эти ваши красноглазые редакторы.
Ты определённо что-то делал не так. У меня после 4 лет плотного использования vim'а огромная зависимость не смотря на то, что я его изучил далеко не полностью. Когда для перемещения строки в буфер надо вместо двух клавиш нажать комбо из 5, убрав при этом рyки с буквенных клавиш — это пиздец, и такие косяки встречаются повсюду и вызывают у меня дикий дискомфорт.
> Базовые операции должны единообразно выполнятся во всех текстовых редакторах.
Другие редакторы не нужны. Vi входит в базовую поставку любой UNIX-подобной ОС. Блокнот windows в большинтве случаев непригоден и требует замены, никто не мешает скачать vim.
Этот пост я пишу в vim, для запуска которого я нажал <C-I> в textarea в браузере.
> yank вместо copy в документации - это огромный шаг на 20 лет назад в плане юзабилити и порога вхождения
http://google.com/search?q=синдром+утёнка
С нуля научиться использовать vim не намного труднее, чем «традиционный» редактор.
> Просил IDE под винду - предлагают текстовый редактор
Из vim'а можно сделать отличное IDE. Разница только в том, что оно не искаропки.
> старше меня возрастом.
Первый релиз vim был выпущен в 1991 году.
>> No.13785 Reply
>>13783
Что ты на гугл ссылку даёшь? Давал бы сразу на люркею, ты же там про синдром утёнка прочитал, школьник-рачок.
>> No.13786 Reply
>>13783
> Блокнот windows в большинтве случаев непригоден и требует замены, никто не мешает скачать vim.
Ты наркоман? IDE! Мне надо IDE, а не аналог блокнота из unix-подобной ОС!
> для запуска которого я нажал <C-I> в textarea в браузере.
> C-I
А браузер у тебя называется emacs?
> синдром+утёнка
Фэйл. Основная претензия к виму в качестве IDE написана в твоём же посте
> Из vim'а можно сделать отличное IDE.
Можно сделать. Можно и самому написать на шелле, используя блокнот в качестве редактора. линукс дома.jpg
Я просил не конструктор, а готовое решение, которое удовлетворяло бы определённым требованиям.
>> No.13788 Reply
>>13783
> Vi входит в базовую поставку любой UNIX-подобной ОС.
> Первый релиз vim был выпущен в 1991 году.
Нет, няша, мы так не играем. Или поставка по стандарту юникса, или 91 год. Потому что тому vi, который можно обнаружить, скажем, в сертифицированной солярке, лет так 30 точно. И никакого вима искоропки там впомине нет.
>> No.13816 Reply
Из Vim-а можно сделать отличное IDE при помощи плагинов. Точно так же, как и любую другую "универсальную IDE" вроде Eclipse или NetBeans.

Мимопроползал
>> No.13819 Reply
>>13816
А не врешь ли? Перечисли какие плагины позволяют сделать из vim'а отличное IDE.
>> No.13820 Reply
File: petrosyan.gif
Gif, 140.70 KB, 581×439 - Click the image to expand
edit Find source with google Find source with iqdb
petrosyan.gif
>>13819
ViVim
>> No.13830 Reply
>>13819
С подобными запросами рекомендую проследовать в биореактор — плагины существуют не для того, чтобы лепить СПЕРМОКОМБАЙН с овердохуя ненужных свистоперделок, а для конкретных задач.
http://www.vim.org/scripts/script_search_results.php?order_by=rating
>> No.13833 Reply
>>13830
Конкретная задача - получить нормальное иде с удобной навигацией по проекту, рефакторингами, интеллисенсами, билдтулзами, документацией, отладчиком, нутыпонел. Что может предложить твой редактор кроме повышения скорости редактриования текста на 3%? Прогроммист - не секретутка, ему с 9 утра до 5 вечера быстро-быстро печатать платёжки не надо.
>> No.13834 Reply
>>13833
> навигацией по проекту, рефакторингами, билдтулзами, документацией, отладчиком
Это есть в виде плагинов.
> интеллисенсами
Что это? Сниппеты что ли?
> Что может предложить твой редактор кроме повышения скорости редактриования текста на 3%?
Программисту vim интересен прежде всего своей парадигмой редактирования текста. Текст редактируется командами, которые можно комбинировать и повторять. При грамотном использовании это снижает количество действий для позиционирования курсора на целый порядок. Пример — для замены текста до второй буквы "z" нужно нажать "c2fz", ввести текст и нажать esc, потом можно повторить эту операцию в другом месте нажатием точки.

Для меня является огромным плюсом то, что vim работает в текстовой консоли. Это позволяет держать его постоянно запущенным на сервере и подключаться к сессии с любого компьютера. Для комфортной работы достаточно пинга 50мс и минимальной ширины канала. Также командный режим позволяет работать с большим пингом, при котором работа с классическим редактором была бы мучением.
> Прогроммист - не секретутка, ему с 9 утра до 5 вечера быстро-быстро печатать платёжки не надо.
Не «быстро-быстро печатать», а не делать лишней рутинной работы. Это как научиться телепортироваться по квартире усилием мысли.
>> No.13835 Reply
>>13834
Будь добр, приложи скриншот процесса отладки из под vim.
>> No.13836 Reply
Вообще, сталкиваясь с древнючими технологиями я каждый раз убеждаюсь, что олдскульные физики, которые внезапно попали за компьютер были намного лучше, чем современные хуесосы, гордо именующие себя программистами. Потому что просто, блядь, делали. А ещё я каждый раз выясняю, что в этих технологиях обязательно забыли кучу мелочей, которые тогда считались роскошью, а сейчас уже вроде как без этого и неприлично, а вставить всем лень. Например, LaTeX искаропки до сих пор не умеет в прибалтийские языки, а чтоб типографская система не начала новую строку в русском языке с тире, нужно лепить тильды вместо пробелов. Это всё, конечно, несерьёзно.
Поэтому давайте пройдёмся по мелочам.
  • Что там в vim-е с кодировками? Если я открываю файл и выясню, что какая-то спермоблядь не потрудилась сохранить файл в utf-8, покажет ли мне vim нормальные буквы и приписку в нижней строке encoding windows-1251, например, или вывалит на экран кучу дерьма?
  • Есть ли такие сборки или пакеты плагинов чтоб пользователь мог бы получить все решения естественных, частых проблем с помощью одной, ну двух инсталляций? А сам доделывать (и искать нужные плагины тоже) только всякую экзотику?
> интеллисенсами
Кстати, да. Подход
> Что это? Сниппеты что ли?
выдаёт в человеке дикаря. Сниппеты это здорово, но по правде - они должны быть внесены в категорию "всякой экзотики". Ну, то есть, если я наштамповал своих бойлерплейтов - это будут мои сниппеты. Мой уникальный и неповторимый стиль вёрстки div-ами, да. Если я таких бойлерплейтов не имею - сниппетов быть не должно вообще. Вернее, должны быть только в духе "предлагаемый стандартный шаблон для файла с расширением .py в который включается комментарий с адресом интерпретатора, кодировка, поля authro, date, и
`
if name == "main":
pass
`
А то, что в GUI-IDE обычно вызывается по Ctrl+Space не должно быть сниппетами. На самом деле это единственная причина, почему меня не устраивает gedit. Если я один раз написал yoba = [1, 2, 3], то yoba. +Ctrl+Space должен предложить мне список всех действий на списках. С документацией и числом аргументов. Подчёркивать чтение незаданных переменных. Если язык статический - не позволить использовать то, что я не определил. Ну и т.д.
Конечно, рефакторинг и навигация по проекту - вещи, которые текстовый редактор может и не предалагать. Но позволить написать простую программку на языке, синтаксис которого я не помню (или с помощью простой библиоткеки, АПИ которой не знаю) не открывая браузер, просто давая грамотные подсказки - это нормально.
>> No.13839 Reply
>>13836
> LaTeX искаропки до сих пор не умеет в прибалтийские языки
Ой, да что там прибалтийские, он и русский не умеет. Сделай указатель терминов, он его будет сортировать как а, б, ц, д, е, ...
>> No.13847 Reply
>>13839
Лол. Не делал этого. Но по-русски я хотя бы печтать могу, хоть для этого и нужны импорты каких-то библиотек (но это простительно, если напомнить себе, что это позиционируется как типографская система, а не просто язык разметки). А для менее популярных языком пакетов для поддержки букв (ебать, это во времена когда всем уже пора перейти на utf-8!) в комплекте вообще нет, приходится искать и доустанавливать.
>> No.13848 Reply
File: 2011-09-17-223140...
Png, 1.79 KB, 204×82
edit Find source with google Find source with iqdb
2011-09-17-223140_204x82_scrot.png
File: 2011-09-17-221524...
Png, 20.14 KB, 698×663
edit Find source with google Find source with iqdb
2011-09-17-221524_698x663_scrot.png

>>13835
Я не занимаюсь отладкой в vim. Я пишу на джанге и читаю трэйсбэки в браузере. Иногда пользую pdb.
Если хочешь скриншот — ищи плагин для отладки на нужном языке и смотри на его сайте.

>>13836
Что там в vim-е с кодировками?
Хорошо всё. Мне хватает строчки
set fileencodings=ucs-bom,utf-8,default,cp1251 в конфиге. Если мало — можно привинтить enca.
> Есть ли такие сборки или пакеты плагинов чтоб пользователь мог бы получить все решения естественных, частых проблем с помощью одной, ну двух инсталляций?
Не знаю. У всех «естественные, частые проблемы» разные.
У меня вообще установлено всего 3 плагина, из которых я активно использую только один (supertab, комплит по табу).
В дебиане есть команда vim-addons с 40 частоупотребимыми плагинами, в gentoo — целая категория app-vim.
> Если я один раз написал yoba = [1, 2, 3], то yoba. +Ctrl+Space должен предложить мне список всех действий на списках. С документацией и числом аргументов.
Пик1релэйтед. В виме такое для пейтона искаропки, только вызывается по дефолту неудобно — по ^X o.
> Но позволить написать простую программку на языке, синтаксис которого я не помню (или с помощью простой библиоткеки, АПИ которой не знаю) не открывая браузер, просто давая грамотные подсказки - это нормально.
А что эта программа будет делать будешь определять методом тыка? Я так когда-то турбопаскаль учил на пару с английским, да.
Кстати, как раз для писания на языке с незнакомым синтаксисом подходят сниппеты. Пик2релэйтед, я набрал «for» и нажал tab.
>> No.13851 Reply
>>13848
Хм. Звучит на удивление неплохо. А библиотеки, не входящие в стандартную поставку он тоже подхватывает? Например, методы определённого тобой класса?
А что-нибудь посложнее он не умеет? Например Aptana подсказывает мне о unused import и т.п. Это тоже довольно удобно.
> А что эта программа будет делать будешь определять методом тыка?
Ну так я говорю не о турбопаскале. Турбопаскаль так учить и правда довольно глупо. Что разве если других источников знаний нет. А если АПИ нормальный - несложную вещь с использованием этого АПИ сумеет написать любой грамотный программист, пользуясь подсказками ИДЕ. Например, какой-нибудь дохуя Сишарпер, писавший свой последний сайтик в позапрошлом году вполне должен суметь написать симпатичную страничку с использованием jQuery, потому что АПИ там простой и внятный, но помнить команды наизусть - странное требование.
Я вот как-то однаждый открыл MonoDevelop, до этого ранее не писав на C#. Так вот, у меня даже получилось накорябать GUI-HelloWorld минут за 15, ни разу не открыв документацию.
>> No.13852 Reply
>>13851
> А библиотеки, не входящие в стандартную поставку он тоже подхватывает? Например, методы определённого тобой класса?
Конечно. Только эти библиотеки не должны кранить при импорте. Для джанги пришлось сделать такой костыль:
if file_readable("settings.py")
    let $DJANGO_SETTINGS_MODULE="settings"
    let $PYTHONPATH="."
    python from django import db
endif
> А что-нибудь посложнее он не умеет? Например Aptana подсказывает мне о unused import и т.п.
http://google.com/search?q=vim+python+unused+import
>> No.13854 Reply
>>13848
> Из Vim-а можно сделать отличное IDE при помощи плагинов. Точно так же, как и любую другую "универсальную IDE" вроде Eclipse или NetBeans.
> Я не занимаюсь отладкой в vim. Я пишу на джанге и читаю трэйсбэки в браузере. Иногда пользую pdb.
Как девки пляшут
>> No.13855 Reply
>>13854
Будь добр, гоняйся за личностями в другом месте. Тут анонимная имиджборда.
>> No.14016 Reply
File: 209.jpg
Jpg, 122.48 KB, 723×1080 - Click the image to expand
edit Find source with google Find source with iqdb
209.jpg
Добрый день!
Я написал себе маленький скриптик-таймер, который каждую секунду пишет в файл число-таймаут. Соответственно, операционная система всегда можнет получить данное значение из файла. А как можно передать изменяемое значение таймаута во внешний мир, не записывая его в файл?
>> No.14018 Reply
>>14016
Планировщик заданий/cron
>> No.14019 Reply
>> No.14024 Reply
File: 164.jpg
Jpg, 429.50 KB, 1440×1080 - Click the image to expand
edit Find source with google Find source with iqdb
164.jpg
>>14019
Что-то я не пойму. В случае, когда я пишу число в файл, всегда можно сделать cat filename и получить это число. А как и откуда мне прочитать перенаправленный вывод?
>> No.14026 Reply
>>14024
одна программа пишет в стандартный вывод, |, другая программа читает стандартный ввод. Это на мой сонный взгляд. Посплю может отвечу чуть поумнее.
>> No.14027 Reply
>>14016

клиент:
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.connect('127.0.0.1', 10000)
s.send("ololo\n")
s.close()
сервер:
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.bind(('0.0.0.0', 10000))
f = s.makefile('rb')
print f.readline()
s.close()
>> No.14029 Reply
File: 201.jpg
Jpg, 112.42 KB, 810×1080 - Click the image to expand
edit Find source with google Find source with iqdb
201.jpg
>>14027
Спасибо, то, что надо!
>> No.14034 Reply
File: 024.jpg
Jpg, 116.55 KB, 842×800 - Click the image to expand
edit Find source with google Find source with iqdb
024.jpg
>>14029
Эх, рано я радовался. Проблема в том, что сервер между обращениями клиента как бы засыпает и всегда выдает значение на единицу меньшее, чем в предыдущем обращении, независимо от того, что реального времени прошло больше. Мне копать в сторону асинхронности, или еще куда?

сервер:
import socket
from time import sleep

HOST = '127.0.0.1'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))

pause = 60
while pause:
	str_pause = str(pause)
	by = str_pause.encode('utf-8')
	s.listen(1)
	conn, addr = s.accept()
	conn.send(by)
	pause -= 1
	sleep(1)
клиент:
import socket

HOST = '127.0.0.1'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
data = s.recv(1024)
print('Received', repr(data))
>> No.14035 Reply
Как на питоне будет выглядеть следующий код?
for i := High(A) downto Low(A) do
А - массив чисел
>> No.14036 Reply
>>14035
A = [1, 2, 3, ... n]
for i in sorted(A, reverse=True):
    print(i)
>> No.14053 Reply
>>14036
for i in range(High, Low, step):
print(i)
Step, естественно, отрицательный
>> No.14140 Reply
Я тут в PIL на какую-то хуйню напоролся. Суть такова:
im = Image.open(filename)
r, g, b = im.split()
Выдаст ошибку. Но если предварительно с картинкой что-то проделать, например
im = im.resize(size)
всё будет Ок. Я так понимаю, PIL производит какие-то неочевидные преобразования форматов во время действий над картинкой. Но если мне не надо ресайзить картинку, как я могу сразу начать делать то, что мне нужно?
>> No.14154 Reply
>>14140
На всем подряд ошибку выдает? У файла формат не gif случаем? Пробовал с разными форматами?
>> No.14158 Reply
>>14154
На жипеге. На всём подряд. С другими форматами не пробовал. И не только на этом методе, вообще говоря. Но как-то не понял закономерность. Короче, хуйня какая-то. Требуется кто-то, кто понимает, как эта библиотека работает.
>> No.14159 Reply
>>14158
Просто УМВРН. Скажи версию пайтона, версию библиотеки и изображение скинь на всякий случай - попробую воспроизвести ошибку.
>> No.14188 Reply
File: simplyfied.py
Py, 0.00 KB, 0 lines
view edit
simplyfied.py
File: 13076747710268.jpg
Jpg, 360.90 KB, 1680×1050
edit Find source with google Find source with iqdb
13076747710268.jpg

>>14159
Прикладываю тест-кит. Картинка роли не играет, но прикладываю ту, с которой пробовал.
Ubuntu 11.04, Python 2.7.1+, PIL==1.1.7
>> No.14189 Reply
>>14034
Сделай на twisted, асинхронность из коробки.
>> No.14190 Reply
>>14188
Не удалось воспроизвести ошибку, и вообще идей нет: если верить твоему трейсбеку, то split загибается на том, что атрибут im содержит None, но в том же самом resize этот im используется и все прекрасно - очень странный глюк.
>> No.14192 Reply
>>14188
Попробуй sleep(1) поставить вместо resize.
>> No.14193 Reply
Если не ошибаюсь, у PIL Image есть .read() или что-то типа того. Этот метод заставляет считать картинку полностью (по дефолту .open() лишь читает некоторые заголовки!), попробуй использовать его перед .split()
>> No.14197 Reply
>>14193
И правда ведь.
> Opens and identifies the given image file. This is a lazy operation; the actual image data is not read from the file until you try to process the data.
Вот же я полудурок невнимательный.
Решается это с помощью im.load()

Спасибо.
>> No.14198 Reply
>>14029
зачем ты АЙГУЛЬ постишь. мм?
>> No.14199 Reply
>>14197
У меня баттхерт. Никогда не буду использовать Питон.
>> No.14200 Reply
>>14199
Тогда вообще отойди от компьютера, няша, и не подходи до тех пор, пока не прочитаешь всю документацию к нему и софту. RTFM, как обычно - вот единственный ответ.
>> No.14202 Reply
>>14197
Image.py PIL 1.1.7
##
# Split this image into individual bands. This method returns a
# tuple of individual image bands from an image. For example,
# splitting an "RGB" image creates three new images each
# containing a copy of one of the original bands (red, green,
# blue).
#
# @return A tuple containing bands.
def split(self):
    "Split image into bands"
    self.load() #WTF?
    if self.im.bands == 1:
        ims = [self.copy()]
    else:
        ims = []
        for i in range(self.im.bands):
            ims.append(self._new(self.im.getband(i)))
    return tuple(ims)
>> No.14211 Reply
>>14199
А при чем тут питон? PIL не является частью стдлиба, это библиотека от какой-то левой компании, которая на эту библиотеку уже несколько раз ложила хуй.
Есть биндинги к ImageMagick, пользуйся ими.
>> No.14215 Reply
>>14211
У меня баттхерт. Никогда не буду использовать PIL.
сампофиксился
>> No.14491 Reply
поцчему gevent называется coroutine-based, хотя кейворд yield там не используется вообще?
>> No.14516 Reply
как хорошо, что успел пока не утонул тред.
дайте мне книжечку по питону, пожалуйста. есть опыт на сях и джавах. и какой-нибур разносторонний сборничек задачек для практики.
пожалуйста!
>> No.14521 Reply
>> No.14531 Reply
>>14198
Это ЛИЛИЯ.
>> No.14591 Reply
File: desuBS.jpg
Jpg, 42.42 KB, 337×418 - Click the image to expand
edit Find source with google Find source with iqdb
desuBS.jpg
>>> Pn = lambda n : [lambda x : x ** m for m in range(n)]
>>> [p1, p2, p3] = Pn(3)
>>> p1(4)
16
>> No.14625 Reply
>>14591
m биндится в лямбду по адресу, а не по значению.
Вот так надо: Pn = lambda n : [(lambda k: (lambda x : x ** k))(m) for m in range(n)]
>> No.14700 Reply
>>14211
Братюни, как делать ватермарки через PythonMagick?
>> No.15063 Reply
Вообще, наверное, нужен редакторотред, но раз уж это тут началось...
В общем, поставил gVim, научился печатать. Темку сменил, что-то в .vimrc вписал, комфорт ещё не пришёл, но в принципе пользовать возможно. Но на нормальной настройке всё как-то остановилось. Инструкции по интернетам лежат разные, плагинов, делающих одно и то же - море. Что удобней - хз.
Поделитесь пожалуйста своими настройками (плагины + то, что в .vimrc).

Алсо, хотел поискать скринкастов, но находится один мусор - не посоветуете ли чего? Не только по виму, вообще не знаю злачных мест.
>> No.15064 Reply
Эй, а тред что, не бампается?
>> No.15073 Reply
>>15064
Конечно, он уже месяц, как в бамплимите.
>> No.15141 Reply
>>15073
Фигово. Новый сделать что ли.. Аль повременить? Вообще, активность как-то ни к чёрту тут в последнее время. В основном флуд, как раньше в /c/.
>> No.17057 Reply
>>14700
Ну, читаешь доки по im-convert, потом переводишь на язык PythonMagick.
Вообще я бы watermarks на баше писал. Скорость некритична, а баш иногда лучший клей.

>>14625
> Pn = lambda n : [(lambda k: (lambda x : x ** k))(m) for m in range(n)]
Упоротые наркоманы. Он только что наплодил дополнительных замыканий. Замыкание - вещь дорогая и с точки зрения памяти весьма опасная.
Писать так надо:
Pn = lambda n: [lambda x, pow=i: x**i for i in range(n)]
Я тут наплодил немного референсов и всё.


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]