[ /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.37139 Reply
File: -.jpg
Jpg, 69.48 KB, 1280×720 - Click the image to expand
edit Find source with google Find source with iqdb
-.jpg
Предыдущий >>28158 ушёл в бамплимит.

Краткая справка для новичков:
Официальный сайт: http://python.org/
Документация по стандартной библиотеке и разнообразные Tips & Tricks: http://docs.python.org/
неСвежая тема для священной войны, или руководство по выбору между версиями: http://wiki.python.org/moin/Python2orPython3
Ссылка для вопящих про дикие тормоза: http://speed.pypy.org/
Python для микроконтроллеров http://micropython.org или http://www.github.com/micropython
>> No.37140 Reply
С третьего раза таки запилил.
>> No.37143 Reply
>>37140
То-то я смотрю счётчик скачет, а постов не видать.
А вообще я тут >>37133 имел ввиду, что змею надо на второй пик более графонистую
>> No.37146 Reply
>>37143
black python?
>> No.37148 Reply
File: -.png
Png, 64.03 KB, 672×406 - Click the image to expand
edit Find source with google Find source with iqdb
-.png
3D yoba version
>> No.37150 Reply
>>37148
Я надеюсь, эта пикча была отрендерена программой на питоне, а то иначе как-то не кошерно было бы.
Как же питон развращает. Сел сейчас юзерскрипт писать на жс, ебучие скобки эвривее, точку с запятой не поставил - обосрался, итерирование через задницу, охуеть вообще.
>> No.37151 Reply
>>37150
Coffeescript?
>> No.37152 Reply
>>37148
> ебучие скобки эвривее
Лишп не пробовал?
>> No.37156 Reply
>>37152
Не надо меня синтаксисом лиспа пугать, там они вполне уместно смотрятся, хотя и не шибко читабельно в итоге. Для си-подобных языков же синтаксис питона - лучшее, что придумало человечество.
>>37151
Он уёбищный какой-то, вы уж меня извините. Я вот смотрю пример кода у них и он ни разу не шибко-то читабелен, несмотря на закос под питон.
>> No.37157 Reply
>>37156
А я не пугаю, не надо скобок бояться.
>> No.37158 Reply
>>37156
Это вроде больше закос под руби, насколько я понял. Хотел же без скобок, ёлы палы? Там можно просто вообще опускать скобки просто у любой даже пользовательской функции в списке параметров. И никаких точек с запятой. Тобишь вместо
f(x);
пишешь
f x
>> No.37387 Reply
File: getPics.py
Py, 0.00 KB, 0 lines - Click the image to get file
view edit
getPics.py
Не туда написал, но не суть.
Ловите новый скрипт от меня. На этот раз мы шерстим борду и выкачиваем из неё все файлы.
Даёшь паки пикч :3
>> No.37389 Reply
>>37387
Почему ты не хочешь пользоваться батарейками? Есть же православные requests, grab.
>> No.37392 Reply
>>37389
Видимо потому что я не бидонщик.
Мне ближе Си, а это я надёргал с интернета различных реализаций и скомбинировал так, как мне удобно.
Работает жи.

Покажи как правильно.
>> No.37395 Reply
>>37392
Не то что бы у тебя не правильно, просто можно было бы упростить. Например у requests проще управлять ссылками и есть обработчик json

r = requests.get(url)
r.json
>> No.37396 Reply
>>37392
У тебя пиздец в плане оформления. Если бы ты прочитал хотя бы краткий гайд для путешствующих по галактике сишников, осваивающих питон, такой фигни как, например, array[len(array-1)] бы не было.
>> No.37398 Reply
>>37396
Я не осваиваю питон, если что.
Я пишу скрипты, которые помогают в работе и просто помогают делать рутину.
Не гонюсь за красотой кода, но поскольку понимаю, что она нужна - делюсь с вами.
>> No.37399 Reply
>>37387
В питоне отступы 4 пробела.
>> No.37401 Reply
>>37398
Ага, ты убегаешь от нее.
Осло, использовавший будет зобанен, я подозреваю. Потому что качать весь Доброчан - это пиздец.
>> No.37413 Reply
File: 1382285246273.jpg
Jpg, 47.61 KB, 700×523 - Click the image to expand
edit Find source with google Find source with iqdb
1382285246273.jpg
Добряки вы мои, добряки. Нужно открыть и дописать в файл HTML некую информацию. Файл находится дерикторией выше. Как это сделать?
%% А знаете что я делаю?! Форум! В веб форме пишешь что хочешь сказать и отправляешь. Скрипт берет html и дописывает в конец файла.Это гениально! Только вы мне расскжите как искать файлы и я сразу уйду.
%%
>> No.37413 Reply
File: 1382285246273.jpg
Jpg, 47.61 KB, 700×523 - Click the image to expand
edit Find source with google Find source with iqdb
1382285246273.jpg
Добряки вы мои, добряки. Нужно открыть и дописать в файл HTML некую информацию. Файл находится дерикторией выше. Как это сделать?
%% А знаете что я делаю?! Форум! В веб форме пишешь что хочешь сказать и отправляешь. Скрипт берет html и дописывает в конец файла.Это гениально! Только вы мне расскжите как искать файлы и я сразу уйду.
%%
>> No.37415 Reply
>>37413
%%
Как же стыдно
Долбаная разметка
%%
>> No.37417 Reply
>>37413
> Файл находится дерикторией выше.
../file.html
>> No.37418 Reply
А вообще смотря что там у тебя. Какой-нибудь /static для шаблонов.
>> No.37419 Reply
File: 1384625466137.jpg
Jpg, 25.04 KB, 460×332 - Click the image to expand
edit Find source with google Find source with iqdb
1384625466137.jpg
>>37417
Ох лол, как же просто! Спасибо! А можно настроить, где будет начальная дериктория? Ну там , например, запустил интерпритатор питона в /tmp/ , а файл дописываешь в домашней дериктории? Что бы не писать ../../../../../home/etc.
>> No.37420 Reply
>>37419
os.getcwd()
>> No.37421 Reply
>>37420
import os
И открываешь что угодно - open(/home/lazy_fool/... /etc) . Хорошей эрекции тебя, няша, спасибо.
>> No.37423 Reply
>>37421
Спасибо, но я им не пользуюсь в этом плане.
>> No.37427 Reply
>>37413
Наркоман, не годное решение. Совсем не годное.
Объясню почему.
1) Ты блокируешь файл при записи. Что будет если 2 пользователя одновременно Попытаются записать? Один из них пойдет лесом.
2) Операции с диском медленные поэтому при обращении к твоим страничкам больше некоторого числа пользователей одновременно все будет тормозить.
3) Пост на твоем форуме будет сложно отыскать, изменить или удалить.

Теперь альтернатива.
Используй бд. Клади посты в специальную табличку и выдергивай их оттуда при динамической генерации странички.
Из минусов тебе придется узнать как взаимодействовать с базой, и возможно как ее поставить.
>> No.37428 Reply
>>37427
> и возможно как ее поставить.
Можно sqlite, например, в лине искаропки.
>> No.37432 Reply
>>37428
Смотря каком лине. Не замечал в моем арчеке что-бы было из коробки.
Кроме того sqlite плохо подходит для такого рода задач(sqlite подходит для софта на машине, не для веба). Лучше mysql благо мануалов как поставить и настроить тонны.

Вангую у него винда.
>> No.37433 Reply
>>37432

А точно арч? Не LFS? Просто даже ФФ и та пользует sqlite. И в питоне модуль идет в стд наборе, разве что ты его конпелял и что-то там убрал. И вообще, это только твои проблемы, в моем Дебиане всё есть :3

Ну я, например, везде в простых скриптах юзаю sqlite. Хотя есть и Postgre. Я считаю нет смысла заморачиваться с пользователем, с правами, с таблицами, когда всё это можно сделать в одну строчку. Но это для каких-нибудь говнопарсеров, например. Или говнофорума из одной странички.

В шинде есть /tmp и /home?
>> No.37435 Reply
>>37433
Арч, у меня тоже есть sqlite, просто его может и не быть, особенно когда только базовую систему установил ядро + немного обвязки из коробки так сказать.
Скрипт который будет только 1 пользователем запускаться может и sqlite пользовать или настройки там хранить тоже весьма годно. Но что-то большее я не рискну возложить на него. Может быть у меня интерпрайз головного мозга.

Сори проглядел пути.
>> No.37437 Reply
>>37436
Ах да, ещё в планах допилить для получения тредов из архива и с old.dobrochan.com
Потом можно другие доски подключать потихоньку.
>> No.37442 Reply
File: 1383657097752.jpg
Jpg, 646.66 KB, 2048×1536 - Click the image to expand
edit Find source with google Find source with iqdb
1383657097752.jpg
>>37427
Ну ты прям, ангел спаситель. Тоже сначала думал применить MySQL, но у меня ОЧЕНЬ туго со взимодействие с базой данных. Так то что ты говоришь , кошерно ,да? Просто хотелось сделать что то своими ручками, а то куда ни кинься - работа через фреймворк. Не чувствуешь вкуса жизни. Буду гуглить.
   В бубунте sqlite в коробке нет.
>> No.37443 Reply
>>37442
> В бубунте sqlite в коробке нет.
Ну так бубунта и не линукс, еси чо.
>> No.37444 Reply
>>37442
Ох уж эти жизневкусцы. Придумай задачу, где тебе придётся использовать SQL-запросы даже через фреймворк, потому, что готовые методы ORM всё равно не покрывают весь SQL. Исследуй, какие и как идущие через фреймворк запросы работают и оптимизируй. Будет тебе вкус.
>> No.37445 Reply
File: 02.jpg
Jpg, 324.24 KB, 980×396 - Click the image to expand
edit Find source with google Find source with iqdb
02.jpg
>>37443
Мой пукан разорвало в клочья, если чо.
>>37444
Сэр,так точно,сэр. Форум, кстати, отлично подходит для того, что бы все делать через ээ MySQL. Спасибо моему ангелу-дилеру.
>> No.37446 Reply
>>37444
ORM и не обязан покрывать весь sql, к тому же весь sql есть только в книжках про весь sql, в реальных проектах используют лишь малую необходимую часть.
>> No.37450 Reply
>>37446
Читай не только пост, но и к чему он написан.
>> No.37468 Reply
Пытаюсь в пример http://pastebin.com/75ZaCA9a
добавить запрос нескольких url паралельно.
Сделал вот так http://pastebin.com/jfzd1wdJ, но в cbRequest проблема, получается что в цикле for вызов value.deliverBody вроде как перезаписывается.
print success, value печатает:
True, <респонс обджект>
Some data received: # это печатает BeginningPrinter.dataReceived
True, <респонс обджект>
Some data received:
True, <респонс обджект>
Some data received:
И все.
Получается что dataReceived успевает отработать только один раз, а в версии без паралельных реквестов пока загрузится страница dataReceived вызывается несколько раз.
>> No.37471 Reply
>>37468
зачем ты делаешь так?
for url in urls:
    deferr_list.append(agent.request('GET', 'http://example.com/', Headers({'User-Agent': ['Twisted Web Client Example']}), None))
Ведь ты не подставляешь разные урлы?
подключи какую нибудь библиотеку логирования например http://docs.python.org/2/library/logging.html. С ней тебе проще будет отслеживать проблемы.
>> No.37472 Reply
>>37471
http://pastebin.com/iVsQJC9N поправил.
url подставляются, и вместо response.deliverBody должно быть value.deliverBody. Не работает программа написанная по этому примеру, поэтому запостил отредактированный пример и пару раз ошибся. Работает без ошибок, просто неправильно, так что логирование не поможет. Даже известна(скорее всего) проблема: deliverBody(BeginningPrinter(finished)) в цикле вызывается заново каждый раз.
>> No.37477 Reply
>>37471
Вот окончательный вариант http://pastebin.com/fKSFcqe0
Работает если в листе одна ссылка, но печатает 'deferred list' и висит если 3, и не выдает никаких ошибок.
Через getPage получается паралельно скачать все 3 ссылки, а через Agent нет. Где ошибка?
>> No.37478 Reply
>>37477
покажи определение класса DeferredList
>> No.37479 Reply
>>37478
Почему оно не должно печатать 'deferred list'? вся малина начинается после run.
Из предположений какой-то из этих урлов не отвечает, коннект не рвется и приложение висит.
>> No.37481 Reply
>>37478
DeferredList библиотечный, не переопределялся.
>>37479
wireshark показывает:
GET /hr/res/4507.html HTTP/1.1
GET /hr/res/4447.html HTTP/1.1
HTTP/1.1 200 OK (text/html)
HTTP/1.1 200 OK (text/html)
GET /ann?uk=nCd1jE6stJ&info_hash=R%06%fc...
HTTP/1.0 200 OK (text/plain)
GET /api/chan/stats/diff.json HTTP/1.1
HTTP/1.1 200 OK (text/html)
при этом в ничего не печатается
затем идет несколько запросов ответов. потом ошибки
cbRequest
True <twisted.web._newclient.Response object at 0xa62d64c>
deliver_deferr
BeginningPrinter
data received
True <twisted.web._newclient.Response object at 0xa62d7ec>
deliver_deferr
BeginningPrinter
data received
False [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.TimeoutError'>: User timeout caused connection failure. В файлы записывается одна строчка !DOCTYPE <html> .... Откуда берется этот таймаут?
>> No.37501 Reply
>>37481
Что самое странное, с двумя url все происходит нормально, но с тремя получаю таймаут.
С konachan.com загружаются три страницы параллельно, без всяких ошибок. В чем здесь дело?
>> No.37513 Reply
>>37481
я понял что он библиотечный и тем не менее прошу его показать. Возможно сервер держит соединение.
> > откуда берется этот таймаут
скорее всего внутри библиотеки значение по умолчанию.
>>37501
Пробовал все комбинации урлов? Может сбоит какой-то один?
>> No.37521 Reply
>>37513
https://github.com/twisted/twisted/blob/trunk/twisted/internet/defer.py#L751
По одному/двум за раз все скачиваются. Точно не сбоят, треды открываются браузером нормально.
>> No.37531 Reply
>>37521
Браузер обрабатывает кучу случаев.

Вангую глобальный лок в DeferredLock классе

хочешь получить содержимое странички сделай
import urllib.request
html= urllib.request.urlopen("http://url.ru").read()
print(html)

и не мучайся.
>> No.37535 Reply
>>37531
Нужно паралельно, поэтому использую twisted. Такая проблема только с ычаном, с nowere.net и konachan.com паралельно загружаются страницы, без ошибок.
>> No.37542 Reply
>>37535
Если у тебя там не тысячи паралельных запросов, то:
from multiprocessing.pool import ThreadPool
>> No.37549 Reply
File: 1C_programer.jpg
Jpg, 105.36 KB, 541×584 - Click the image to expand
edit Find source with google Find source with iqdb
1C_programer.jpg
Почему когда вызываешь какой нибудь класс без "()" в конце показывает участок памяти? Как посмотреть аттрибуты класса? dict? Dir - это просмотр методов класса? Что делать если документация говно, а читать исходники - из глаз течет кровь, from world import Everything и ты после импорта еще 20 библиотек теряешь сознание и аппетит.

В общем вопрос как питон устроен на низком уровне и если я достигну сатори и пойму как он работает на низком уровне, я буду лучше понимать как работают классы, super, @ и другие адские вафли? Си немножко знаю, но мало. Хотет что бы дали ссылки на такие материалы - "класс выделяет участок в памяти, создаеться dict, а каждый класс Python имеет свой dict(что такое dict на примере памяти?)"

   Желаю материал после которого я буду точно знать что такое класс и обьект класса.
>> No.37550 Reply
>>37542
Ради одной ошибки менять вобще все(не работает только на ычане)?
А если я там уткнусь куда-нибудь, переходить на другую либу?
>> No.37555 Reply
>>37550
Не "вообще всё", а только то что не работает.
from multiprocessing.pool import ThreadPool
from urllib.request import Request, urlopen

HEADERS = {'User-Agent': 'Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Firefox/24.0'}
urls = ['http://iichan.hk/hr/res/4507.html', 'http://iichan.hk/hr/res/4447.html', 'http://iichan.hk/hr/res/4510.html']
data = ThreadPool(len(urls)).map(lambda url: urlopen(Request(url, headers=HEADERS)).read(), urls)
>> No.37557 Reply
>>37550
Альтернатива ходить логировать внутренности twisted найти где в нем возникает ошибка и исправить ее. Скорее всего понадобиться отладчик и куча времени на изучение внутренней логики. Но решать тебе.
Вот этот >>37555 достойный господин на мой взгляд все правильно написал.
>> No.37590 Reply
>>37549
> > Почему когда вызываешь какой нибудь класс без "()" в конце показывает участок памяти
потому что это участок памяти.
> > В общем вопрос как питон устроен на низком уровне и если я достигну сатори и пойму как он работает на низком уровне, я буду лучше понимать как работают классы
посмотри на код интерпретатора http://hg.python.org/cpython/file/b743d709b93b/
нет как работают классы от этого ты лучше не поймешь.
> > Желаю материал после которого я буду точно знать что такое класс и объект класса.
объясняю на пальцах.
Представь что ты повар. У тебя есть рецепт по которому ты готовишь блины. Так вот рецепт это класс. А блины это объект класса. Уловил суть? Класс - описание того что должно быть в объекте.
Объект реальная сущность с которой ты можешь взаимодействовать.

Отпишись понял ли?
Потому что есть некоторые моменты которые объясняются после того как ты поймешь это.
>> No.37591 Reply
>>37549
> класс без "()" в конце показывает участок памяти
Отрабатывает repr(класс), действие по умолчанию.
http://docs.python.org/3/reference/datamodel.html?highlight=__repr__#o[...]epr__
http://hg.python.org/cpython/file/b743d709b93b/Objects/object.c#l455
> атрибуты класса
По умолчанию хранятся в класс.dict
а dir(), это: http://docs.python.org/3/library/functions.html#dir
Немного про атрибуты: http://www.cafepy.com/article/python_attributes_and_methods/python_att[...].html
> как питон устроен на низком уровне
Python это только язык программирования.
Как именно он выполняется на низком уровне, зависит от конкретной реализации интерпретатора: enwiki://List_of_Python_software#Python_implementations
Самая распостранённая реализация интерпретатора, это CPython.
Про то, как примерно она работает есть интересная серия статей http://tech.blog.aknin.name/category/my-projects/pythons-innards/
с переводом http://habrahabr.ru/company/buruki/blog/189972/
> понимать как работают классы, super, @ и другие адские вафли?
Понимать как именно они работают в конкретной реализации интерпретатора, будет полезно только для отлова багов и модификации этой реализации.
А для программирования на Python, достаточно только знать что они делают.
> что такое класс и обьект класса.
Всё что не ключевое слово, в Python называется объект. http://docs.python.org/dev/reference/datamodel.html
Объект класса - это объект созданный данным классом.
А класс - это объект класса type. http://docs.python.org/3.3/c-api/typeobj.html
Немного про объекты класса type: http://www.cafepy.com/article/python_types_and_objects/python_types_an[...].html
>> No.37603 Reply
Питонобоги, подскажите.
Из параметра беру имя файла, но если в нем присутствует кириллица - при попытке открыть замещает кириллицу на знаки вопроса и ругается. Пробовал всячески менять кодировку но безрезультатно.
import sys
import string
from string import maketrans
import os.path
import codecs
  
filename = sys.argv[1:]
filename = str(filename)[2:-2]
filename = filename.encode('utf-8')
newname = filename+"utf8.cue"
if filename[-3:] != "cue":
	print "not cueball, exit script"
else:
	if os.path.exists(newname):
		print "file exists, exit script"
	else:
		fo = open(filename,  "r")
		contents = fo.read()
		fo.close()
		contents = contents.decode('cp1251').encode('utf8')
		fo = open(newname, "w")
		fo.write(codecs.BOM_UTF8)
		fo.write(contents)
		fo.close()
		print "file converted, copy saved"
sys.exit()
>> No.37604 Reply
>>37603
Похоже не в питоне дело.
Запускаю из такого батника:
"python.exe" "1251-to-utf8.py" %1
У винды локаль английская.
Пробовал chcp перед запуском скрипта но не помогло.

Олсо если кому интересен мой скрипт то там ошибка:
> newname = filename+"utf8.cue"
newname = filename[:-3]+"utf8.cue"
>> No.37606 Reply
>>37604
os.path.basename
os.path.splitext
>> No.37607 Reply
File: 1392234587009.jpg
Jpg, 21.71 KB, 512×383 - Click the image to expand
edit Find source with google Find source with iqdb
1392234587009.jpg
>>37590
> объясняю на пальцах.
> Представь что ты повар. У тебя есть рецепт по которому ты готовишь блины. Так вот рецепт это класс. А блины это объект >класса. Уловил суть? Класс - описание того что должно быть в объекте.
> Объект реальная сущность с которой ты можешь взаимодействовать.
Кажеться понял. Класс- матрица которой шлепают, например, саморезы. Конструктор класса делает длину самореза,  шаг  резбы и т.д.
>>37591
Так, почитаю на досуге.
Спасибо ребята за ответы.То есть не столь важно как все работает на низком уровне?
>> No.37608 Reply
>>37603
> python2.x
> обработка текста
> присутствует кириллица
Запасайся кучей .encode(), .decode(), гуглом и терпением.

Основной алгоритм такой:
  • получаешь закодированную строку (.read(), sys.argv[], "бла бла..")
  • определяешь её кодировку (гугл)
  • декодируешь её в юникод (.decode())
  • ... обрабатываешь ...
  • кодируешь её в требуемую кодировку (.encode())
  • пишешь куда надо
ВСЕ не юникод строки в python2.x, на самом деле массивы байт.
Разные не юникод строки могут быть в разных кодировках.
Операции над не юникод строками могут давать разные, интересные результаты в зависимости от кодировки.
>>> len(u"Доброкодер".encode('utf-8'))
20
>>> len(u"Доброкодер".encode('utf-7'))
29
Полезные ссылки:
http://docs.python.org/2/howto/unicode.html
http://pythonhosted.org/kitchen/unicode-frustrations.html
http://stackoverflow.com/questions/9226516/python-windows-console-and-[...]p1252

ставь python3
>> No.37610 Reply
>>37607
Инкапсуляция, наследование, полиморфизм - основные принципы ООП. Суть:

Инкапсуляция - сокрытие данных. Класс скрывает данные в полях и закрывает к ним доступ. При этом он предоставляет методы, которые позволяют удобно работать с объектами класса. Любой класс, как библиотечный, так и созданный тобой, должен тщательно продумываться при создании, чтобы он мог применяться без знания его внутреннего устройства, как чёрный ящик. Если класс не допускает такого использования или вызывает чрезмерно много необходимости обращаться к данных непосредственно, то вероятно он плохо спроектирован.

Наследование - создаётся класс, который является наследником другого. Это значит, что он перенимает все методы и поля своего предка. Используется в основном, чтобы переопределить некоторые методы или добавить новых полей и методов. Помогает, когда нужно то же самое, но немного по-другому.

Полиморфизм - если у классов есть общий предок, то наряду с предком они имеют те же методы и поля, что и сам предок(в основном). Это значит, что можно работать одинаково с объектами разных классов иерархии, опираясь на общий для всей иерархии интерфейс. При этом у всех объектов под одним и тем же интерфесом может скрываться разный код. Скажем, картинки разных форматов все могут иметь метод "нарисовать", который для каждого формата имеет свою реализацию. При этом имея стопку картинок можно все их "нарисовать", не думая об их формате.

Существует ещё много других принципов, а так же готовых "паттернов проектирования", как выразить программу в виде классов, это очень долгая и сложная тема, но эти принципы - самые базовые. ООП - одна из парадигм организации кода, а организация кода - ключ к понятным, расширяемым, изменяемым, гибким, большим и многозадачным программам.
>> No.37618 Reply
>>37606
не совсем понял.
>>37608
долблюсь головой, безрезультатно.

может ли кто-нибудь дать мне пример питонокода, получающий кириллицу из консоли из параметра?
>> No.37620 Reply
>>37603
ебучее говно, разобрался.

может кому понадобится - переводит .cue файлы в утф8:
import sys
import string
import os.path
import codecs
  
filename = sys.argv[1].decode('1251')
newname = filename[:-3]+"utf8.cue"
  
print filename
print newname
  
if filename[-3:] != "cue":
	print "not cueball, exit script"
else:
	if os.path.exists(newname):
		print "file exists, exit script"
	else:
		fo = open(filename,  "r")
		contents = fo.read()
		fo.close()
		contents = contents.decode('cp1251').encode('utf8')
		fo = open(newname, "w")
		fo.write(codecs.BOM_UTF8)
		fo.write(contents)
		fo.close()
		print "file converted, copy saved"
sys.exit()
>> No.37621 Reply
>>37603
>>37620
это просто пушка: чтоб скрипт заработал, пришлось поставить русскую локаль, в результате чего надобность в скрипте отпала.
>> No.37622 Reply
>>37620
Зачем мне твой скрипт, когда есть iconv.
>> No.37665 Reply
File: 314n_org.png
Png, 21.35 KB, 1485×1038 - Click the image to expand
edit Find source with google Find source with iqdb
314n_org.png
Аноны, пожскажите как можно вывести картинку в консоли? Пока получается только пикрелейтед. Можно ли его улучшить?
>> No.37668 Reply
>>37665
Непонял. Картинку в текстовую консоль?
Тогда можно только ASCII символами отобразить, других вариантов нет.
>> No.37692 Reply
>>37665
Погляди на libcaca. Может оно что-то умеет.
>> No.37712 Reply
File: l1048755889.jpg
Jpg, 62.51 KB, 604×519 - Click the image to expand
edit Find source with google Find source with iqdb
l1048755889.jpg
Я дико извеняюсь, но я видать тупой. Объясните мне за дискрепторы классов. Что это такое, и зачем оно мне надо?
   Если серьезно вообще не могу понять что это такое. Изменяют объект класса на ходу? Дают доступ к методам метакласса породившего класс из которого сделали объект класса? Это превращает код в труднопонимаемый код? Или просто я труднодогоняемый?
   Дайте ссылки где на пальцах объясняют за жиз... эээ за дискрепторы, декораторы , super.
>> No.37714 Reply
>>37712
Дескриптор это класс реализующий что то из __get__, __set__, __delete__ и будучи назначен атрибутом какого нибудь объекта, перехватывают обработку чтения/записи/удаления этого атрибута.
Используется в основном, для реализации getter/setter паттерна.
http://docs.python.org/3/howto/descriptor.html

Декоратор это просто "функция высшего порядка" http://legacy.python.org/dev/peps/pep-0318/
но работает и с классами http://legacy.python.org/dev/peps/pep-3129/

super() возвращает прокси объект на родителя класса, в котором была вызвана.
https://rhettinger.wordpress.com/2011/05/26/super-considered-super/
>> No.37720 Reply
>>37668
Угу, в консоль.
>>37692
Точно, и как я про неё забыл? Это же то, что доктор прописал! Правда какие-то разрабы озабоченные. Названия их продуктов: libcaca, libpipi, toilet...

Теперь вопрос №2.
Как победить связку python2+windows+utf8? У меня то "'utf-8' codec can't decode byte", то "'charmap' codec can't encode character".
>> No.37722 Reply
>>37139
Анон, нуб в треде.

Какой уровень сложности такой задачи:
Написать программу, которая связывается с роутером и отображает список подключенных по Wi-Fi клиентов с MAC и IP?

(Единственное что я писал на питоне это кривой определитель количества кратных числа...)

Что потребуется, чтобы написать подобное? Какие библиотеки?
>> No.37725 Reply
>>37722
Скачать нужную страничку со списком клиентов, распарсить, показать. В стандартных библиотеках уже есть всё необходимое.
>> No.37726 Reply
>>37722
telnetlib стандартная, если роутер может в это.
>> No.37748 Reply
File: window-2014-02-22-172945.png
Png, 154.13 KB, 634×534 - Click the image to expand
edit Find source with google Find source with iqdb
window-2014-02-22-172945.png
>>37668
> Тогда можно только ASCII символами отобразить, других вариантов нет.
>> No.37749 Reply
>> No.37750 Reply
>>37748
Это фреймбуфер, а не текстовая консоль.
>> No.37751 Reply
>>37748
Лопни мои глаза, рэйджер умеет в картинки! Пошёл настраивать.
>> No.37764 Reply
Здесь людей, юзающих MVC, больше всего, так? Можете объяснить побольше о том, как выглядит управление контентом и вообще дальнейшая эксплуатация сайта/приложения на MVC-фреймворке типа джанги/рельс/симфони? Прежде всего, как контент-менеджеры работают со статическими данными? Как меняют логотип, страницы типа "О нас", надписи на лейауте и т.п.? Динамически данны в моделях и они управляются из админки управлением моделями. А как администратор/контентщик должен менять статические данные? Если создать модель, то это ж будет таблица из одной строки, как-то глупо. И тогда ещё надо, чтобы модель следила, чтоб не было больше или меньше строк. Или лучше всегда интегрировать фреймворк с CMS?
>> No.37769 Reply
>>37748
Это похоже на какой-то файловый менеджер в иксах.
Попробуй так в tty.
>> No.37770 Reply
>>37139
А как перевести десятичное в hex в питоне? А потом сделать это строкой?
>> No.37771 Reply
>>37770
'{:x}'.format(число)
>> No.37776 Reply
>>37771
Спасибо, анон. А где про эти переводы в мануале можно найти?
>> No.37779 Reply
>>37770
>>37771 какой-то наркоман. hex(число) в данном случае всё-таки рациональней.
Ну а про .format() можно почитать здесь: http://docs.python.org/3/library/string.html#formatstrings
>> No.37785 Reply
>>37779
Хм... hex(число) выдает префикс 0x. А я ищу как раз вариант без префикса. А есть, наверное, и другие способы? Обрезать первые два символа строки?..
>> No.37788 Reply
>>37785
Конечно есть другие способы.
format(15, 'x')
'%x' % 15

import string

def digits(x, radix):
    while x:
        x, r = divmod(x, radix)
        yield r

def int2base(x, base=16, symbols=string.digits + string.ascii_lowercase):
    if base > len(symbols):
        raise ValueError('Not enough symbols ({}) for given base ({})'
                         .format(len(symbols), base))

    return ('-' if x < 0 else '') + ''.join(reversed([symbols[i] for i in digits(abs(int(x)), base)]))
>> No.37800 Reply
>>37788
Спасибо, анон. Всё-таки удивительная вещь — программирование. Даже для того, кому это в хобби, то есть для меня.
>> No.37995 Reply
class My_tuple(tuple):
    def __new__(cls, t, num):
        cls.num = num
        return super().__new__(cls, (t,2))
a = My_tuple("first",1)
b = My_tuple("second",2)
Не могу разобраться, как ведет себя этот фрагмент кода. Мне нужно, чтобы атрибут был равен второму параметру, но после выполнения a.num == 2 и b.num == 2. Если изменить атрибут у одного из них, у второго атрибут не изменится.
>> No.37997 Reply
>>37995
Хм. Признаюсь, что сам до конца не понимаю, что там у тебя происходит. Вроде как, делая cls.num, ты меняешь какое-то свойство всего класса, но тогда не понятно, почему после создания для отдельных инстансов ты его менять можешь.
Но вот что-то такое работает так, как тебе надо:
```
> > > class MT(tuple):
... def new(cls, t, num):
... res = super().new(cls, (t, 2))
... res.num = num
... return res
...
> > > a = MT("fst", 1)
> > > b = MT("snd", 2)
> > > a, a.num
(('fst', 2), 1)
> > > b, b.num
(('snd', 2), 2)
```
>> No.37998 Reply
>>37997
Опять разметку сломал, прости.
> > > class MT(tuple):
... def new(cls, t, num):
... res = super().new(cls, (t, 2))
... res.num = num
... return res
...
> > > a = MT("fst", 1)
> > > b = MT("snd", 2)
> > > a, a.num
(('fst', 2), 1)
> > > b, b.num
(('snd', 2), 2)
>> No.37999 Reply
>>37995
Как тебе уже верно сказали, атрибут класса общий для всех объектов этого класса. Когда ты его меняешь через объект, объект получает свой собственный атрибут и больше не зависит от классового.
>> No.38706 Reply
Python 2.7

Допустим есть такой класс
class T(object):
    d = {}
Я хочу, чтобы можно было писать так
class D(T):
    d['fgh'] = 123
Это вообще возможно?
>> No.38707 Reply
>>38706
class T(object):
    d = {}

class D1(T):
    d = dict(T.d, fgh=123)

class D2(T):
    d = T.d
    d['fgh'] = 123
А чтобы юзать super(), нужно писать свой @class_property, так как в стандартной библиотеке его нет.
>> No.38708 Reply
>> No.38709 Reply
>>38707
>>38708
Спасибо.
>> No.38722 Reply
Как создать символьную ссылку? Пробовал subprocess, os.symlink - получаю нерабочую ссылку. Имя файла с пробелами. Пробовал заменять через имя.replace(' ', '\\ ') - не работает.
>> No.38723 Reply
>>38722
https://docs.python.org/3/library/os.html?highlight=link#os.symlink
УМВР, с пробелами и без.
Может ты "делаешь что то не так?"
>> No.38727 Reply
>>38723
Можешь попробовать в python 2.7.3?
>> No.38728 Reply
>>38727
Нет, но могу попробовать в 2.7.6:
$ python2 --version
Python 2.7.6
$ echo test > orig.txt
$ python2 -c "import os; os.symlink('orig.txt', 'name with spaces.txt')"
$ ls -l
total 2
lrwxrwxrwx 1 <user/group> 8 Apr 18 23:49 name with spaces.txt -> orig.txt
-rw-r----- 1 <user/group> 5 Apr 18 23:45 orig.txt
>> No.38733 Reply
File: 1935251_original.gif
Gif, 174.48 KB, 800×575 - Click the image to expand
edit Find source with google Find source with iqdb
1935251_original.gif
Есть функция


def define(url,url1,url2,url3):
`q = browser(url)`
`w = browser(url1)`
`e = browser(url2)`
`r = browser(url3)`
Как это реализовать если урлов может быть 2, а может 100500?
>> No.38735 Reply
>>38733
Не понял что делает твоя процедура, а для неопределённого количества аргументов есть *.
def foo(*список_переданных_аргументов): pass https://docs.python.org/3.4/glossary.html#term-parameter
>> No.38838 Reply
Анон, по работе надо установить BioPython, но для него сначала нужно установить numpy.
Я обычный юзер с виндовсом и понятия не имею, что там (https://pypi.python.org/pypi/numpy) написан в инструкциях по установке. Есть ли какой-нибудь универсальный способ, как можно подключить библиотеку из консоли или какие-нибудь установщики библиотек?
Как вы вообще подключаете новые библиотеки?
>> No.38840 Reply
>> No.38843 Reply
>>38838
Есть готовые сборки питона. Там есть numPy, sciPy и много чего еще.
Вот, например: https://www.enthought.com/products/epd/free/
А лучше погугли, их довольно много.
>> No.38844 Reply
>>38722
Слеши не перепутал опять?
>> No.38847 Reply
>>38838
У activepython есть пакетный менеджер, там довольно богатый набор.
>> No.38848 Reply
File: Untitled.png
Png, 34.30 KB, 802×389 - Click the image to expand
edit Find source with google Find source with iqdb
Untitled.png
>>38847
Проверил сразу.
>> No.38902 Reply
Какую штуку я нашёл.
http://www.lfd.uci.edu/~gohlke/pythonlibs/
>> No.38910 Reply
File: worm.py
Py, 0.00 KB, 0 lines - Click the image to get file
view edit
worm.py
Анон, почему не работает петля?
Программка должна по клику рисовать червяков, которые расползаются в разные стороны.
Собственно нарисовать червяка не составило проблем, а заставить его двигаться не получается. Я правильно использую after?
Заменить root.after на self.root.after не помогло.
>> No.38923 Reply
File: -.png
Png, 21.87 KB, 1086×609 - Click the image to expand
edit Find source with google Find source with iqdb
-.png
>>38910
Держи
--- worm.py	2014-05-08 15:41:13.561445704 +0000
+++ worm.py	2014-05-08 15:39:08.274003746 +0000
@@ -3,6 +4,7 @@
 canvas_size = 500
 r = 9
 delay = 100
+worms = []
 root = Tk()
 canv = Canvas(root, width=canvas_size*2,height=canvas_size,bg="lightblue", cursor="cross")
 canv.pack()
@@ -41,9 +50,8 @@
         del self.worm[0]
         del self.cord[0]
         self.draw_seg()
-        self.wait()
-    def wait(self):
-        root.after(delay, self.cont_worm())
+        root.after(delay, self.cont_worm)
+
     def draw_seg(self):
         angle = random.uniform(self.pi-1.57, self.pi+1.57)
         x1 = self.x - self.r
@@ -64,6 +74,6 @@
         for el in self.worm:
             self.canv.delete(el)
         del self
-worms = []
+
 canv.bind('<Button-1>', click)
 root.mainloop()
>> No.38931 Reply
>>38923
Что это такое?
Какой-то метод, выводящий исполняемый код строчка за строчкой? trace или не он?
>> No.38932 Reply
>>38931
Это unified diff.
http://stackoverflow.com/questions/987372/what-is-the-format-of-a-patch-file

tl;dr 1
+ <- добавить строку
- <- удалить строку

tl;dr 2
root.after(delay, self.contworm()) -> root.after(delay, self.contworm)
>> No.38933 Reply
>>38932
Ясно. Спасибо большое.
А почему ты перетащил worms = []. Это из разряда правил хорошего тона?
И таки как убрать скобки из-под self.contworm() помогает? Это же функция, разве там не надо скобок?
И я считал, что root.after если ведёт в саму же функцию, то приводит к бесконечной рекурсией.
>> No.38938 Reply
>>38933
> Это из разряда правил хорошего тона?
Да. Три раза перечитывал def click(), ища там определения worms.
> И я считал, что root.after если ведёт в саму же функцию, то приводит к бесконечной рекурсии.
Вызов (со скобками) функции, в теле самой функции, приведёт к бесконечной рекурсии.
А передача функции, как параметра root.after, в теле функции, приведёт к бесконечному циклу (что в данном случае и требуется).
>> No.38964 Reply
http://www.pythonchallenge.com/
10/10 gospodi 10/10
Вообще непосредственно к питону отношение минимально, но требуется как минимум хорошая поддержка строк.
>> No.38965 Reply
>>38964
А впрочем нет, таки предполагается использовать кучу других питоновских библиотек. Хотя это всё больше переходит в ковыряние байтов, нежели непосредственно программирование.
>> No.38966 Reply
>>38964
С какого задания там начинается Питон?
>> No.39290 Reply
есть ngnix Лог со строками вида

178.137.91.215 - - [21/Feb/2014:06:44:53 +0000] "GET /work/homepages-maths-year-6/ HTTP/1.0" \
200 10427 "178.21.22.22:7070" 0.123

В общем хочу сделать так, чтобы выдавали, допустим, только все строки где время "0.123" было бы больше 0.100 или допустим статус был бы не 200

Я начал гуглить, но мне выдало огромное решение с матпакетом и какой-то либой в виде import apachelog, panda и numpy - вообще не понятно.

Как парсить файл и строки эти, чтобы только нужное выводило.


Есть ли какое либо более просто решение, можно пример, пожалуйста.
>> No.39291 Reply
File: hipowl.gif
Gif, 11.46 KB, 249×318 - Click the image to expand
edit Find source with google Find source with iqdb
hipowl.gif
>>39290
Очевидно же.
>> No.39294 Reply
>>39291
Я что-то слышал про регэкспы, но я ньюфаг в программировании, что по этому можно посмотреть?
>> No.39295 Reply
>>39294
Следуй за совой, самая годная книга. В питоне тот же pcre.
>> No.39296 Reply
>>39295
Спасибо, но я тут нашел что можно shlex Использовать, спрашивал и разобрался как работать с одной строкой.

from shlex import split
src, , , date, gmt_offset, req, rcode, wtf, dst, time = split(
'''178.137.91.215 - - [21/Feb/2014:06:44:53 +0000] "GET /work/homepages-maths-year-6/ HTTP/1.0" 200 10427 "178.21.22.22:7070" 0.123'''
)
А вот как работать с целым файлом. В мане прочитал про

shlex.infile
The name of the current input file, as initially set at class instantiation time or stacked by later source requests. It may be useful to examine this when constructing error messages.

shlex.instream
The input stream from which this shlex instance is reading characters.

Но не то.


from shlex import split
log = open("file.txt", "r")
src, , , date, gmt_offset, req, rcode, wtf, dst, time = split(log)
print rcode

Понятное дело не работает.



Как мне импортировать тот же txt где на каждой строке будет как раз такой текст, как я понял надо через цикл гнать, после того как прочту файл?
>> No.39297 Reply
>>39296
открой файл и for для хэндла.
>> No.39298 Reply
>>39297
Не понял.
>> No.39299 Reply
>>39298
with open('filename.txt') as fh:
    for line in fh:
>> No.39302 Reply
Когда я читал про питон, меня пугали лямбда-выражения, но потом я успокоился, когда понял, что если кто-то вложил друг в друга кучу лямбда-выражений, значит он - идиот, не заботящийся о читаемости кода.
>> No.39308 Reply
>>39302
> что если кто-то вложил друг в друга кучу лямбда-выражений, значит он - идиот, не заботящийся о читаемости кода.
каррирование
>> No.39326 Reply
>>39290
#!/usr/bin/env python

# Логи nginx-а резделяются пробеламы (смотри переменную log_format в конфиге).
# Парсить регексом лень, поэтому просто выясним, какие номера элементов нам нужны
LOGFILE = 'nginx.log'

for n, item in enumerate(open(LOGFILE, 'r').readline().split()):
print(n, item) 
0 178.137.91.215
1 -
2 -
3 [21/Feb/2014:06:44:53
4 +0000]
5 "GET
6 /work/homepages-maths-year-6/
7 HTTP/1.0"
8 200
9 10427
10 "178.21.22.22:7070"
11 0.123

# Выигрышные номера: 8 и 11. Пишем ленивый генератор.

def fluctuations(f):
for line in open(f, 'r'):
# Оборачиваем в Try/Catch, чтобы не падал на левых данных
    try:
        items = line.split()
        if items[8]!='200' and float(items[11])>=0.100:
            yield line.strip()
    except IndexError:
        raise StopIteration
# Проверяем
for fuckup in fluctuations(LOGFILE):
print('SLOW REQUEST DETECTED: {}'.format(fuckup))
#Результат:
#SLOW REQUEST DETECTED: 178.137.91.215 - - [21/Feb/2014:06:44:53 +0000] "GET /work/homepages-maths-year-6/ HTTP/1.0" 500 10427 "178.21.22.22:7070" 0.123

# Времени потрачено: 7 минут (включая чай). Домашнее задание: переписать генератор на fluctuations = lambda filename: [line for line in ... if ... ]

Мимокрокодил
c; голубя хотеть
>> No.39327 Reply
File: ici.jpg
Jpg, 161.72 KB, 600×631 - Click the image to expand
edit Find source with google Find source with iqdb
ici.jpg
>>39326
Я из-за разметки сломал indentation.
>> No.39329 Reply
>>39326
Разделяются пробелами, но в самых значениях тоже пробелы могут быть, не?
Эти скобочки и кавычки какбе намекают. Так что халтурка.
>> No.39330 Reply
>>39329
> Разделяются пробелами, но в самых значениях тоже пробелы могут быть, не?
Нет. Замечание резонное, но только в общем случае: у нгинкса формат без пробелов. Нужно ценить собственное время и не тратить его на псевдогенерализованные решения.
Но, если бы такой фичи не знал, на регексал бы.
>> No.39331 Reply
>>39330
В догонку: Регекс будет работать медленнее, чем разделение по пробелам. А в масштабах лог-файлов это критично.
>> No.39332 Reply
>>39330
Ну в юзерагенте точно же пробелы есть.
>> No.39333 Reply
>>39331
Не очень убедительно. http://pastebin.com/JzhBsjNi
В питоне не знаю как забенчмаркать, лол.
>> No.39335 Reply
>>39332
А здесь его нет.
>> No.39336 Reply
>>39333
Вот результаты моего теста. Сам код:
#/usr/bin/env python
import cProfile
import re
LOGFILE='nginx_full2.log'
def fluctuations(f):
    for line in open(f, 'r'):
        line.split()
def regex_test(f):
    for line in open(f, 'r'):
        re.match(r'^([^ ]*) ([^ ]*) ([^ ]*) \[([^\]]*)\] "([^"]*)" ([^ ]*) ([^ ]*) "([^"]*)" (.*)$', line)
cProfile.run('regex_test(LOGFILE)')
cProfile.run('fluctuations(LOGFILE)')
nginx_full2.log: 4.7GB, 38382822 строк, находится в памяти. Создан для чистоты эксперимента, чтобы никакие промежуточные кеши не влияли.

Выхлоп:
Для сплита:
         39591670 function calls in 52.236 seconds
   Ordered by: standard name
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000   52.236   52.236 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
        1    0.000    0.000    0.000    0.000 codecs.py:251(__init__)
        1    0.000    0.000    0.000    0.000 codecs.py:300(__init__)
   604419    0.802    0.000    1.881    0.000 codecs.py:310(decode)
        1   22.413   22.413   52.236   52.236 lol.py:9(fluctuations)
        1    0.000    0.000   52.236   52.236 {built-in method exec}
        1    0.000    0.000    0.000    0.000 {built-in method nl_langinfo}
        1    0.000    0.000    0.000    0.000 {built-in method open}
   604419    1.078    0.000    1.078    0.000 {built-in method utf_8_decode}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
 38382823   27.942    0.000   27.942    0.000 {method 'split' of 'str' objects}
Для регекса:
         116358387 function calls (116358324 primitive calls) in 140.391 seconds
   Ordered by: standard name
  
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000  140.391  140.391 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 _bootlocale.py:23(getpreferredencoding)
        1    0.000    0.000    0.000    0.000 codecs.py:251(__init__)
        1    0.000    0.000    0.000    0.000 codecs.py:300(__init__)
   604419    0.894    0.000    2.187    0.000 codecs.py:310(decode)
        1   33.882   33.882  140.391  140.391 lol.py:13(regex_test)
 38382823   24.483    0.000  104.322    0.000 re.py:153(match)
 38382823   29.583    0.000   29.584    0.000 re.py:273(_compile)
        9    0.000    0.000    0.000    0.000 sre_compile.py:315(_simple)
     19/1    0.000    0.000    0.000    0.000 sre_compile.py:33(_compile)
        1    0.000    0.000    0.000    0.000 sre_compile.py:341(_compile_info)
        2    0.000    0.000    0.000    0.000 sre_compile.py:442(isstring)
        1    0.000    0.000    0.000    0.000 sre_compile.py:445(_code)
        1    0.000    0.000    0.001    0.001 sre_compile.py:460(compile)
       27    0.000    0.000    0.000    0.000 sre_parse.py:126(__len__)
       72    0.000    0.000    0.000    0.000 sre_parse.py:130(__getitem__)
        9    0.000    0.000    0.000    0.000 sre_parse.py:134(__setitem__)
       34    0.000    0.000    0.000    0.000 sre_parse.py:138(append)
    28/10    0.000    0.000    0.000    0.000 sre_parse.py:140(getwidth)
        1    0.000    0.000    0.000    0.000 sre_parse.py:178(__init__)
       79    0.000    0.000    0.000    0.000 sre_parse.py:183(__next)
       62    0.000    0.000    0.000    0.000 sre_parse.py:202(match)
       61    0.000    0.000    0.000    0.000 sre_parse.py:208(get)
        1    0.000    0.000    0.000    0.000 sre_parse.py:253(_class_escape)
        2    0.000    0.000    0.000    0.000 sre_parse.py:295(_escape)
     10/1    0.000    0.000    0.001    0.001 sre_parse.py:351(_parse_sub)
     10/1    0.000    0.000    0.001    0.001 sre_parse.py:429(_parse)
        1    0.000    0.000    0.000    0.000 sre_parse.py:67(__init__)
        9    0.000    0.000    0.000    0.000 sre_parse.py:72(opengroup)
        1    0.000    0.000    0.000    0.000 sre_parse.py:724(fix_flags)
        1    0.000    0.000    0.001    0.001 sre_parse.py:736(parse)
        9    0.000    0.000    0.000    0.000 sre_parse.py:83(closegroup)
       19    0.000    0.000    0.000    0.000 sre_parse.py:90(__init__)
        1    0.000    0.000    0.000    0.000 {built-in method compile}
        1    0.000    0.000  140.391  140.391 {built-in method exec}
       77    0.000    0.000    0.000    0.000 {built-in method isinstance}
  241/232    0.000    0.000    0.000    0.000 {built-in method len}
       38    0.000    0.000    0.000    0.000 {built-in method min}
        1    0.000    0.000    0.000    0.000 {built-in method nl_langinfo}
        1    0.000    0.000    0.000    0.000 {built-in method open}
       22    0.000    0.000    0.000    0.000 {built-in method ord}
   604419    1.293    0.000    1.293    0.000 {built-in method utf_8_decode}
      205    0.000    0.000    0.000    0.000 {method 'append' of 'list' objects}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
        8    0.000    0.000    0.000    0.000 {method 'get' of 'dict' objects}
        1    0.000    0.000    0.000    0.000 {method 'items' of 'dict' objects}
 38382823   50.255    0.000   50.255    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
        9    0.000    0.000    0.000    0.000 {method 'remove' of 'list' objects}
Итого 28 секунд на сплит против 50 на регекс. Справедливости ради, его можно переписать, но в задаче нужно сравнение, так что named groups не избежать. Думаю, через ([\d\w.-]\s)+? будет побыстрее.

c: закинуться
>> No.39337 Reply
>>39336
А если с re.compile?
>> No.39338 Reply
>>39337
То не будет вот этой строчки
 38382823   29.583    0.000   29.584    0.000 re.py:273(_compile)
Я её не считал.
>> No.39339 Reply
>>39338
А, ну да. Получаем 25% проседания на перле и 50% на питоне.
Можно бы ещё похакать саму регекспину, конечно, но уже лениво, лол.
>> No.39341 Reply
>>39339
Ну, и в перле и в питоне это regex лишь обвязка на C функции, так что скорее всеге перл тоже около 40 процентов (нужно тоже cProfile гонять на мгновенно доступном текстовом файле).
Просто regex - это более универсальное решение для парсинга. Хотя, в ситуации с наличием пробелов в юзерагенте, всегда можно выполнить items[-2] (другими словами, захватывать с конца).
Я очень люблю спорить в интернете, так что спасибо за дискуссию :3
c:счастливые
>> No.39356 Reply
>>39326
fluctuations = (lambda filename:
    print(
        '\n'.join( map(
            'SLOW REQUEST DETECTED: {}'.format,
        
            (''.join(items).strip()
                 for items in (l.split() for l in open(filename))
                 if len(items) == 12 
                 if items[8] != '200' and float(items[11]) >= 0.1
            )
        ))
    )
)

fluctuations(LOGFILE)
мимо домашнее задание :3
>> No.39381 Reply
File: shit-just-got-real.jpeg
Jpeg, 7.91 KB, 500×280 - Click the image to expand
edit Find source with google Find source with iqdb
shit-just-got-real.jpeg
Господа питонисты, а поясните за асинхронный питон. Куда гуглить, где применяется, что читать\писать. Сам пока только торнадо начал тыкать, план работ совершенно неясен.
>> No.39398 Reply
>> No.39537 Reply
>>39381
Отрицание дерьма.
(√(-shit))² = (√((-1)(shit)))² = (√(-1)√(shit))² = (i√(shit))² = i²(√(shit))² = -shit.
Добавьте минус перед скобочкой.
>> No.39579 Reply
>>39537
Там комплексное дерьмо возводится в квадрат.
>> No.39642 Reply
Я собрал киви под ведро. Хз с какой попытки. И понятия не имею, чего ему раньше не хватало.
>> No.39651 Reply
File: L0a3GTH.jpg
Jpg, 960.75 KB, 2560×1440 - Click the image to expand
edit Find source with google Find source with iqdb
L0a3GTH.jpg
Анон, подскажи пожалуйста какой-нибудь однодневный курс/мануал чтоб поправить спектр плохих привычек питона?
>> No.39653 Reply
>>39651
О каких плохих привычках питона идет речь?
>> No.39659 Reply
>>39653
Возможно о таких:
http://acmonette.com/here-there-be-pydras.html
"here-there-be-pydras.html" - говорящее название
>> No.39665 Reply
>>39659
Ну так в доках прямо говорится, что это темная магия и вы не хотите перегружать этот метод.
>> No.39747 Reply
>>39653
Ну например я с большим фанатизмом пихаю все в один файл и не знаю как правильно разбивать код, ненавижу кросс референсы (или в каждом файле импортировать каждый другой файл и не париться?).
Названия переменным даю не ахти.
Часто изобретаю велосипеды.
Много глобальных переменных.

Это что-то вроде антипаттернов вроде, знаю, плохо, а как лучше сделать - хз. Глаза разбегаются.
>> No.39749 Reply
File: u8.jpeg
Jpeg, 35.59 KB, 450×360 - Click the image to expand
edit Find source with google Find source with iqdb
u8.jpeg
>>39747
Антипаттерн токо глобальные переменные. Излечивается за полгода-год общения с ирлонгом, проверено.
>> No.39874 Reply
File: 1404846385071.png
Png, 266.08 KB, 553×399 - Click the image to expand
edit Find source with google Find source with iqdb
1404846385071.png
Как правильно наследовать часть методов базового класс?
Например мой класс наследует класс А, и при этом мне не нужны все атрибуты из А - нужна только часть. Можно при создании экземпляра моего класса в init удалить ненужные атрибуты - но это похоже на костыль. Можно ли как-нибудь определить класс с частью атрибутов от базового?
>> No.39877 Reply
>> No.39878 Reply
>>39874
Выдели нужную тебе часть класса A в отдельный класс и инкапсулируй её в класс A и в твой класс. Если класс A написал не ты, или тебе нельзя его править по другим причинам - смирись, наследуйся от него и жри говно.
>> No.40397 Reply
>> No.40407 Reply
>>39874
> наследует класс А, и при этом мне не нужны все атрибуты из А - нужна только часть
Значит ты неправильно используешь наследование. Наследование, это отношение "является", а у тебя твой класс не является A. Используй отношение "содержит". Как и показал >>39877
>> No.40411 Reply
Здравствуйте, доброкодеры!
Не могли бы вы, пожалуйста, на простом примере написать, как делать системы с плагинами на setuptools (http://pythonhosted.org/setuptools/pkg_resources.html#overview)?
Хочу запилить прогу на Python с плагинами, при этом плагины предполагается размещать в отдельных модулях.
Заранее большое спасибо!
>> No.40412 Reply
>>39651
М. Фаулер "Рефакторинг".
Или посмотреть на YouTube какой-нибудь курс по рефакторингу Python-приложений. Думаю, там должны рассказать основные code smell'ы.
>> No.40415 Reply
>>37139
Собственно проблема:
pkg_resources.DistributionNotFound: sqlalchemy-migrate
При этом при вводе pip freeze sqlalchemy-migrate таки есть в списке пакетов. Что не так? На шиндоусе все нормально работает.
>> No.40543 Reply
File: Copy-of-2LList.py
Py, 0.00 KB, 0 lines - Click the image to get file
view edit
Copy-of-2LList.py
Анон, выручай.
Я хочу сделать сортировку вставками для двунаправленного списка.
И вот всё бы хорошо, да только последний элемент в списке не хочет сортироваться.
И что странно, когда я вырезаю этот последний узел, он имеет и данные, и ссылки вперёд-назад. А потом предаю его значение функции для вставки узлов, и он превращается в Nonetype без данных и без ссылок.
В чём причина?
Надеюсь, ты поймёшь, что к чему в моём коде. Я там даже принты поставил везде-везде, чтобы следить за ходом сортировки.
>> No.40544 Reply
>>40543
> передаю его значение
> передаю его самого
>> No.40545 Reply
>>37139
Аноны, кто сталкивался с установкой GStreamer (и gtk, соответственно) на винду с python3?
Рылся неделю в интернетах, ставил переменные окружения, а всё капризничает и не импортится.
>> No.40618 Reply
File: mangaupdates.jpg
Jpg, 135.77 KB, 923×519 - Click the image to expand
edit Find source with google Find source with iqdb
mangaupdates.jpg
Анон, мне срочно нужна твоя помощь. Есть один сайт https://www.mangaupdates.com/ и он is down for everyone. Возможно и не поднимется, а спарсить инфу с него хочется. Есть штука для этого: https://github.com/fake-name/MangaCMS, но у меня нет совершенно никаких скиллов. Я установил питон и застрял на пункте
> Installing: Run the installDeps.sh script in the setuptools directory (note: must be run with sudo or as root. Please review it before running for security reasons).
installDeps.sh я открыл, сделал >Run >PythonShell, а дальше я ничего не понимаю.

Можешь провести меня за ручку как маленького?
>> No.40619 Reply
>>40618
Тебе нужно запустить sh-файл через терминал на линухе.
>> No.40622 Reply
>>40619
Был бы у меня Линух, я бы тут нубские вопросы не задавал.
>> No.40623 Reply
>>40622
Если у тебя винда и ты задаешь вопрос о запуске sh-файла, то это был нубский вопрос.
>> No.40624 Reply
>>40618
>>40622
Разверни линупсца через vagrant, самый простой способ.
>> No.40656 Reply
>>40624
Без Линукса питон не работает? Что-то не верится. Потом еще с кривым линуксовым интерфейсом мучиться.

Ладно, сайт поднялся, пойду луркать в гугле, как это все работает.
>> No.40657 Reply
>>40656
> кривым интерфейсом
> консоль, куда вводишь текст
Не сказал бы.
>> No.40658 Reply
>>40656
Там не только питон. И вообще оно похоже под бубунту заточено.
Там устанавливается postgre и какие-то приблуды к нему, насколько я понял, плюс всякие мелочи. Потом либы для работы с картинкми. Потом из какой-то жопы вытаскивают пип для питона, потому что видите ли убунтовские репы старые. И только после этого устанавливают либы для питона.
Ах да, ещё там "gfortran", лол. Страшно представить как оно всё работает.
>> No.40684 Reply
>>40618
Возьми wget и набери "wget -r -p -np адреск"
>> No.40898 Reply
File: TAF5.txt
Txt, 0.66 KB, 0 lines
view edit
TAF5.txt
File: all3.py
Py, 0.00 KB, 0 lines
view edit
all3.py
File: bbace3ec3391af052...
Jpg, 211.99 KB, 800×600
edit Find source with google Find source with iqdb
bbace3ec3391af052...

Анон, почему так?
Почему мой наивный поиск работает быстрее, чем Кнута-Мориса-Пратта (у которого в худшем случае время работы вообще линейно) и Рабина-Карпа?
Причём РК отстаёт от наивного на порядок, хотя у них одинаковое время в худшем случае.
>> No.40899 Reply
>>40898
Для начала, вот это
> if pattern[i] == 'A': p += '1'
> p = int(p)
Ебаный пиздец. Сделал по-человечески, на 6 секунд время уменьшилось (с 13.8 до 7.5).
А дальше мне лень разбираться, я вообще не знаю, что это за алгоритмы такие.
>> No.40903 Reply
>>40899
> Сделал по-человечески
Как?
С нас на алгоритмах требуют,чтобы как можно меньше прибомбасов использовать. Даже append под запретом.
===
Алсо, такой вопрос: когда я жму в какой-нибудь программе кнтрл-ф, каким алгоритмом будет искаться моё слово? Все используют один оптимальный алгоритм или же у всех он разный?
>> No.40904 Reply
>>40903
Твой изврат через строку и есть прибамбас. Это же обыкновенная арифметика.
>> No.40906 Reply
>>40904
ОК, сделал, так:
> if pattern[i] == 'A': p += 110*(m-i-1)
Но всё равно долго. Было с p = int(p) 4.738, а без - 3.442.
>> No.40907 Reply
>>40906
Имел в виду:
if pattern[i] == 'A': p += 1*10**(m-i-1)
>> No.40908 Reply
File: all3.py
Py, 0.00 KB, 0 lines - Click the image to get file
view edit
all3.py
Вот новая версия
>> No.40913 Reply
>>40898
Потому что наивный поиск ты написал более менее прямо и по делу, а остальные -- пб..
Возможно ты не понял, что именно делает их быстрее и в каких ситуациях.
>> No.41144 Reply
Няши, как реализовать "крестики-нолики" на django, чтобы еще использовать ajax?

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

Еще есть такие пункты:
2. Реализовать на PHP, с использованием jQuery, CSS3, AJAX, JSON.
...
14. Интерфейс игры должен быть красивым, аккуратным, с анимацией и т.п. Здесь вы сможете проявить свои творческие способности.
15. Приветствуется использование самых современных технологий.

Думаю написать для Google App Engine. Читаю книги по django, потом буду читать про GAE.
Какие технологии посоветуете?
>> No.41151 Reply
File: IMG_1086.JPG
Jpg, 241.55 KB, 960×1280 - Click the image to expand
edit Find source with google Find source with iqdb
IMG_1086.JPG
>>41144
Няш-няш, обычно делают так. Морду делают отдельным проектом на любом современном JS client-side фреймворке (angularJS, reactJS, emberJS,...), скафолдят это дело при помощи gulp\grunt. Серверная часть - это только апи, работа с БД, вычисления. Потом накрываются это добро nginx, который выдает js как статик, а что не статик, то перенаправляет на апи. Апи лучше делать на фласке, он очень быстрый в освоении. Или на торнадо\твистед для асинхронности.

В твоем случае ситуация совсем другая - ты пилишь не веб, а гейм-дев. Тогда берешь http://crossbar.io/ и пилишь сервер и клиентов на чем хочешь. Для анимации опять же есть несколько вариантов: есть фреймворки поверх тегов svg, canvas (http://html5gameengine.com/ - я только threeJS юзал) или анимация через CSS на джаваскрипте (http://absurdjs.com/ + все, что около реакта болтается), но это больше для перелистывания страниц подойдет.
>> No.41152 Reply
>>41151
О, круто, мне ответили, а то уже начал думать, что я в премоде.
Спасибо за ссылки, буду курить маны, только у меня такие вопросы:
Что значит "скафолдить"?
Как сервер будет отправлять клиенту сообщение о приглашении? Слыхал что-то о технологии Comet, но это было давно, а теперь как обстоят дела?
>> No.41159 Reply
>>41152
> а теперь как обстоят дела
Если старые IE тебя не интересуют (а они тебя не интересуют) - можешь поюзать websocket.
>> No.41161 Reply
>>41152
Я не совсем отвечал на вопрос, а просто говорил про общее положение дел. У тебя есть два пути разработки:
> для бедных
Пилить бесполезные крестики-нолики на LAMP стеке: шаблонизаторы джанго+jquery, какая-то там ORM поверх Mysql, apache.
> для умных
MEAN-стек условно. С одной стороны продвинутый JS (скафолдинг -> начни гуглить отсюда http://yeoman.io/generators/), с другой стороны restful api поверх монги
>>41159
Доброчую. Для бедных: всякий long-polling поверх ajax. Для умных: http://socket.io/

Тащемта рекомендую сначала делать работающие, красивые шняги на самых последних тулзах, а потом разбираться, что там под капотом. Опять же есть две разновидности водителей: бедные копаются по помойками и собирают велосипед, умные гоняют на спортивных тачках.
>> No.41172 Reply
>>41161
Удобряю это сообщение.

А то так ведь можно и вылететь с рынка, не вписавшись вовремя.
>> No.41548 Reply
Объясните, пожалуйста, ка на питоне сделать нормальный таймер. Мне нужно что-то вроде крона, но запускать не скрипты по дате-времени, а чтобы в заданное время, например, 7 января 2015 года выполнилась функция, с изменяемыми параметрами. Единственный вариант, который пришел на ум, скрипт принимает параметры через sys.argv ну и в кронтаб. Есть еще какие-то варианты?
>> No.41550 Reply
>>41548
Для этого есть at, а не крон.
Насчет чисто питоновоского не знаю.
>> No.41551 Reply
>>41550
Или at, ты прав. Такое невозможно сделать на чистом питоне?
>> No.41552 Reply
>>41551
Ну если не на планировщик, то придется оставлять ждущий процесс. Модули для такого должны быть.
>> No.41553 Reply
>>41552
Думал про процессы, но вдруг надобно будет через два месяца что-то сделать, а там случайный ребут и т.д. Да и слишком усложненно для простой плюшки получится. В какую сторону гуглить хоть скажи, сам даже не представляю.
>> No.41554 Reply
>>41553
python schedule function call или как-то так, очевидно.
>> No.41555 Reply
>>41554
Спасибо, буду искать.
>> No.41568 Reply
Анон, тут такое дело. Изучаю питон по LPTHW Зеда, дошел до классов и понял, что уперся в стенку.
Что такое "класс" я еще более или менее понимаю: по сути, объект, кусок кода, который вмещает в себя все, что угодно, и обладает определенными свистоперделками.
Теперь вопросы:
1. Зачем нужен аргумент self?
2. Зачем нужна функция int()?
3. Что делает getattr()?
>> No.41569 Reply
>>41568
Главное сначала понять, что такое инкапсуляция, наследование и полиморфизм. Тебе по началу будет казаться, что это нах не надо, но только до тех пор, пока всё не поймёшь и пока не станешь пытаться писать что-то длинное.
>> No.41570 Reply
>>41568
Алсо, после первых трёх, полезно познакомиться с SOLID и паттернами.
>> No.41571 Reply
>>41568
> Зачем нужен аргумент self
Чтобы через него добираться до полей и методов текущего объекта.
> Зачем нужна функция int()?
Чтобы преобразовывать другие типы в целое число. По всем неизвестным тебе функциям не бойся читать доку, знаний английского должно хватить: https://docs.python.org/2/library/functions.html#int
> Что делает getattr()?
https://docs.python.org/2/library/functions.html#getattr
>> No.41578 Reply
>>41571
Имелся ввиду (underscore * 2)int(underscore * 2), разметка не позволяет.
Внезапно, в доках более-менее доходчиво расписано.
> добираться до полей и методов текущего объекта
Грубо говоря, если объект - это скала, то self - это прибитые к ней столбики, чтобы по ним карабкаться?
>> No.41583 Reply
>>41578
> int
Вангую ты наркоман и там __init__ ибо, если бы ты использовал __int__, ты бы знал зачем он нужен.
> скала
> столбики
Охщи, охщи. Нет. Селф - это просто ссылка на объект, для которого вызывается данный метод. При вызове obj.func(...) этот самый obj автоматически пойдет первым аргументом, например.
>> No.41605 Reply
>>41583
Лолда, я наркоман. Там __init__ на самом деле.
> просто ссылка на объект
Теперь более-менее понятно, спасибо.
>> No.41606 Reply
И да, стало даже интересно: а всю эту мудотень с вышеназванными аргументами и функциями вообще обязательно понимать и использовать? Просто это пока самая трудная вещь в языке для меня.
>> No.41607 Reply
>>41606
Если тебе не нужны объекты, не используй их.
>> No.41608 Reply
>>41606
Сейчас модно быть функциональщиком. Говори прямо в лицо - ООП нинужно!
Если ты даже это не осилил, то куда двигаться дальше?
>> No.41609 Reply
>>41606
Ты вероятно читаешь книгу о языке. У тебя написано, видимо, только описание синтаксиса использования ООП в этом отдельно взятом языке. ООП требует отдельного изучения и довольно долгого. Можешь не понимать и не использовать. Это если ты не прочь отбросить часть библиотек и фреймворков, которые основаны на этом подходе. И часть вакансий. И конечно, если ты думаешь, что сможешь организовать расширяемость, изменяемость и возможность повторно использовать один и тот же код и без этого вашего ООП. Ну или если тебе это не впало. Только потом, когда окажется, что эту тупые клиенты, внешние или внутренние, опять неправильно написали ТЗ и ты не можешь ничего переделать, не стоит винить одних только их. Почитай вон Б. Мейера по ООП.
>> No.41610 Reply
>>41607
Если бы я хотя бы знал, что мне нужно, а что нет. Я питон как первый язык изучаю.
>>41609
Окей, попробую почитать.
>> No.41613 Reply
Вроде подразобрался, в общем.
Грубо говоря, у нас есть некий объект со встроенным методом.
class Obj1(object):

def __init__(self, x, y):
`self.x = x`
`self.y - y`
Self всегда является аргументов объекта и просто служит для привязки к нему других аргументов и функций.
'init' же просто определяет аргументы, которые всегда будут в объекте.
То есть если мы объект примем за переменную и ей передадим определенные аргументы,
foo = Obj1('egg', 'python') то 'init' передаст их сразу же в свою встроенную функцию. Оттуда уже можно плясать с другими методами, к примеру,

def printarg(self)
`print self.x`
`print self.y`
И дальше вызывать аргументы объекта просто через точку.
foo.printarg() Если же встроенные аргументы не нужны, то можно обойтись и без __init__, но тогда функцию придется вызывать отдельно, а не сразу через объект.

Поправьте, если не прав.
>> No.41661 Reply
Что читать/делать дальше после прочтения Invent With Python и прохождения кодакадеми? Думаю попробовать кодить всякие мелкие проекты и спрашивать свои ответы на StackOverflow.
И да, как после основ перейти к GUI и собственно созданию программ?
>> No.41662 Reply
>>41613
Obj1 - это класс.
foo - объект типа Obj1. Читай внимательнее то, что ты там читаешь.
>> No.41663 Reply
>>41606
Класс — это тип, методы — функции над типом, привязанные к типу и имеющие доступ к его внутренностям.
Инкапсуляция — сокрытие данных от функций, не являющихся методами данного класса или наследника. Один из простейших способов лимитировать побочные эффекты.
Полиморфизм: возможность определения функций, аргументу которой сопоставляется множество типов. ОО-языки реализуют полиморфизм включения посредством наследования.
Наследование: определение подтипа для некого типа, причём подтип наследует от исходного типа (или по-другому, надтипа) методы и поля. Кроме того, функции, берущие в качестве аргумента значение, тип которого является надтипом данного типа, способны принимать и значения, тип которых является данным типом. Таким образом реализуется полиморфизм включения.

Видишь как всё просто? Учи хаскель.
>> No.41664 Reply
>>41663
Всё правильно кроме последней строчки.
>> No.41671 Reply
Проще посмотреть, как ООП устроено в каком-нибудь С++ или яве, правда возникнет другой вопрос - какого черта ООП в питоне так через жопу пишется.
>> No.41672 Reply
>>41671
Подозреваю, что в питоне он развивался эволюционным путем, поэтому костыли-костылики неизбежны.
>> No.41715 Reply
Есть ли способ, помимо регэкспов, пройтись по html-файлу и выдернуть из него все http(s)://*.jpg?
if string.count(), например, с вилдкардом, но что-то у меня не получается.
>> No.41716 Reply
>>41715
https://docs.python.org/2/library/htmlparser.html
Первая же ссылка. Но если тебе без разницы в где оно встречается, то регекспом действительно проще.
>> No.41717 Reply
>>41671
ООП в статически типизированных языках очень ущербно, к сожалению. Например, в с++ два механизма множественной наследованности + абстрактные типы - это раз. Два, с\с++ - это языка с weak typing, то есть пропускают некорректные программы, хотя не должны. Три, класс совпадает с типом, что не дает прогать "на типах". То есть с++ это типизированный язык, но на самом деле нет. Это полностью сказывается на классах. В java чуть получше с типами. И классы там не имеют мультинаследования, вместо этого там есть механизм абстрактных классов и интерфейсы. Но там свои косяки: type erasure для типов, и главное - слишком boilerplate коде для любых около-class dispatch методик или reflections (монкипатчинг и метапрограммирование в питоне соответственно).

Питон не имеет типов и поэтому ему не нужны abstract, final, interface\trait (но было бы неплохо заполучить аналоги Mixins Из руби с доступом к local scope=self). Но при этом он имеет мультинаследование и метапрограммирование (оба свойства очень спорны), то есть у всех едет чердак и чуваки применяют паттерны из с\javа (типа синглетона и прототипирования). Вообще, проблема ООП в том, что там слишком много бесполезных или сложных паттернов, я за функциональную декомпозицию и правильную систему типов.
>> No.41804 Reply
File: 1236366198564.jpg
Jpg, 128.03 KB, 800×800 - Click the image to expand
edit Find source with google Find source with iqdb
1236366198564.jpg
Здравствуйте, сразу прошу прощения за глупый вопрос, читаю курс на буржуйском, может пропустил чего.
Я правильно понял, что табуляция в Питоне имеет значение? А конкретно в расположении if/elif/else?
>> No.41805 Reply
>>41804
Да. И это не баг, а фича.
>> No.41806 Reply
>>41804
Да, отступы в питоне имеют значение. Причём табы и пробелы в питоне лучше не смешивать и PEP-8 рекомендует юзать пробелы и только пробелы.
> if/elif/else
И class и def и прочих. В общем-то там все конструкции выглядят примерно так:
def foo(x, y):
    # отступ увеличился
    # все эти строки внутри метода foo

# отступ стал меньше - метод закончился
>> No.41808 Reply
>> No.41825 Reply
>>41717
> > Например, в с++ два механизма множественной наследованности + абстрактные типы - это раз
Лол что, что за два механизма наследования? Пример в студию. Абстрактные типы? Примеры.
> > Два, с\с++ - это языка с weak typing, то есть пропускают некорректные программы, хотя не должны.
Плюсовая строгость в самый раз, где подходит клас родителя там походит и класс потомка. Или ты про шаблоны? Так они призваны давать максимум гибкости. Генерики это совсем другой механизм, если ты их возжелал.
> > Три, класс совпадает с типом, что не дает прогать "на типах".
очень даже дает почитай Александреску и осиль шаблоны.
> > Питон не имеет типов.
Воу воу воу парень, очень даже имеет попробуй typeOf
> > Вообще, проблема ООП в том, что там слишком много бесполезных или сложных паттернов
При написании больших и сложных систем они нужны. И да множественное наследование очень редко требуеться, но поверь когда оно нужно без него как без рук.
>> No.41826 Reply
>>41806
> Причём табы и пробелы в питоне лучше не смешивать
А и интерпритатор табы вместо пробелов в 99% случаев не сожрет.
>> No.41827 Reply
File: macro-i-m-in-ur-c...
Png, 228.07 KB, 481×352
edit Find source with google Find source with iqdb
macro-i-m-in-ur-computer.png
File: IkUwKoc.jpg
Jpg, 304.17 KB, 2992×2000
edit Find source with google Find source with iqdb
IkUwKoc.jpg

на правах go-тролля

>>41671
Какого чёрта в ваших c++/java/python такое кривое ООП? Ещё и с ненужным белым людям наследованием. То ли дело Си. Сказка, а не язык.

>>41717
> ООП в статически типизированных языках очень ущербно, к сожалению.
Статически типизированные ЯП разные бывают. Пожалуй лучший контрпример это js. У него динамическое наследование. Т.е. ты можешь наследовать что угодно, когда угодно и как угодно. Это хорошо? Это плохо? Так или иначе в js ты можешь стрелять по своим ногам из полиморфного оружия. А это определённо весело.

В целом наличие более или менее строгих типов это хорошо. Облегчается тестирование как одно из самых очевидных. Правда в некоторых ЯП это приносит одну боль.
> Вообще, проблема ООП в том, что там слишком много бесполезных или сложных паттернов
Неа. Просто коекто слишком любит их чрезмерно применять там где в этом нет необходимости. Бритвой Оккама им по губам провести не мешает, чтоб сущностней не плодили. Ладно, не все паттерны GoF одинаково полезны.

Вообще у каждого ЯП своя ниша. Мне кажутся глупыми попытки применять некоторые языки в несвойственной им среде на несвойственных им задачах. Всегда надо иметь хотяб три-четыре ЯП в своём арсенале.
>> No.41854 Reply
>>41825
Ты не понимаешь ничего из того, что я написал, крестьянин, но даешь советы "осилить шаблоны". Осиль Хиндли-Милнера и F-bounding, чо. (Хотя в одном месте я должен был точней выразиться: вместо двух механизмов наследования, надо было сказать про два стиля наследования: multiple\virtual - я вот не уверен же, что они парсятся по-разному в современных реализация языка)

>>41827
Привет, го-тролль. Js -динамически типизированный. И в нем прототипное наследование. Не позорься так.

Всем добра!
>> No.41862 Reply
>>41854
> Js -динамически типизированный. И в нем прототипное наследование.
Я слишком много лет на нём программирую, чтоб не знать таких очевидных вещей.
>> No.41863 Reply
>>41854
> Js -динамически типизированный. И в нем прототипное наследование.
Я слишком много лет на нём программирую, чтоб не знать таких очевидных вещей.
>> No.42030 Reply
>>41854
> > Ты не понимаешь ничего из того, что я написал, крестьянин, но даешь советы "осилить шаблоны". Осиль Хиндли-Милнера и F-bounding, чо.
Намедне для простейших штук использовал хаскель, так с ним приключилась оказия, не смог вывести типы хоть и заморским алгоритмам обучен был, не чета нашим крестам крестьянским.

А что если я тебе скажу что кресты умеют выводить типы? auto нынче завезли.
> > вместо двух механизмов наследования, надо было сказать про два стиля наследования: multiple\virtual - я вот не уверен же, что они парсятся по-разному в современных реализация языка)
Ну какие два стиля? Вот кто тебе мешает отнаследоваться от 2х абстрактных классов? А затем еще и не от абстрактного класса? Никто.
Кидай примеры кода, что бы я, тугодум крестьянский, лаптем щи хлебающий, тебя понять смог.
> > прогать "на типах"
Показывай код, и говори что он должен делать. И я попробую повторить на ущербных крестах.
>> No.42031 Reply
>>42030
> не смог вывести типы
В смысле? В смысле, вывести?
> Ну какие два стиля?
Он имеет в виду слово виртуал при ромбовидном наследовании. Если слово виртуал написать или не написать, то оно по-разному работает.
> Показывай код, и говори что он должен делать. И я попробую повторить на ущербных крестах.
Мы и так знаем, что кресты - Тьюринг-полный язык, зачем нам это доказывать.
>> No.42038 Reply
>>42031
> не смог вывести типы
> > В смысле? В смысле, вывести?
Мне пришлось при объявлении списка сделать вот так l=[1,2,3]::[Int] иначе вот такая штука print $ foldl xor 0 l не работает.
> > Он имеет в виду слово виртуал при ромбовидном наследовании. Если слово виртуал написать или не написать, то оно по-разному работает.
Очевидно что в зависимости от ключевых слов оно по разному работает, если написать private, public, или protected оно тоже будет по разному работать.
>> No.42039 Reply
>>42038
No instance for (Bits b0) arising from a use of `xor'
    The type variable `b0' is ambiguous
    Possible fix: add a type signature that fixes these type variable(s)
    Note: there are several potential instances:
      instance Bits Int -- Defined in `Data.Bits'
      instance Bits Integer -- Defined in `Data.Bits'
      instance Bits GHC.Types.Word -- Defined in `Data.Bits'
А как он по твоему должен был догадаться, что '1' это не Integer и не Word, а именно Int?
>> No.42106 Reply
File: Green_Python_Berlin_Zoo.JPG
Jpg, 2848.35 KB, 3456×2304 - Click the image to expand
edit Find source with google Find source with iqdb
Green_Python_Berlin_Zoo.JPG
Доброкодер, стоит начинать изучение Пайтона с книг Лутца? И что дальше делать, если осилю и пойму?
Собственно, собираюсь изучать как первый язык, значит, мне придется еще и какие-то общие для программирования основы учить кроме него?
с: колбасой пошёл
>> No.42107 Reply
>>42106
Есть ещё Марк Саммерфилд, учебник с примерами.
И ещё пройдись по каталогу: http://www.dmoz.org/World/Russian/Компьютеры/Программирование
>> No.42108 Reply
File: saber__fate_zero_version_by_getchanceandluck-d4c0j.png
Png, 242.36 KB, 900×768 - Click the image to expand
edit Find source with google Find source with iqdb
saber__fate_zero_version_by_getchanceandluck-d4c0j.png
>>42106
Лутц - неплохай книжка. Из минусов:
1) Она излишне большая.
2) По синтаксису там нужна только первая треть - остальное обзор библиотек, что для новичка скучно. А Что делать дальше - вопрос открытый, смотря, кем ты хочешь быть и что у тебя за плечами уже есть.

Вопрос изучения программирования на самом деле довольно сложный. Я вот учил в школе С\с++, олимпиадное программирование, потом плотно занимался на физтехе физикой. С таким вот нехилым бэкграундом пошел быдлокодить на java\c#\Js\python и прозрел только, когда познакомился с ML и хаскелем. Я пытался преподавать несколько лет школьникам сишечку, но то, как я делал - это зло. Школьных двух часов в неделю определенно мало. Сейчас я обучаю своего одного умного знакомого скале - но учитель из меня, как я понимаю, никакой. И пока я вот думаю следующие тезисы:
Чтобы стать хорошим программистом достаточно, но не необходимо:
1) иметь математической образование (пускай хоть 1 курс)
2) изучать первый делом функциональный язык (например, первые три недели курса Progland на курсере учат основам ML)
3) пройти курс алгоритмов (например, седжвик на курсере)
4) прорешать некоторый джентельменский набор с rosalindInfo или projectEuler
После этого надо отвлечься и запилить реал-ворлд-бложик - этакий креш-курс для того, чтобы быстро освоить sql\ORM\rest api\http\MVC\рефакторинг\git. После этого надо идти работать, ибо уже с такими скиллами ты круче 80% программистов в энтерпрайзе и вполне себе джуниор в вебе. В общем, я за минимальную алгоритмическую подготовку.

Все, что выше - лишь мое частное наблюдение. Я ведь даже не сеньор, лол.
>> No.42109 Reply
>>42108
Да, мне как-то твой вариант больше нравится. Почитаю Саммерфилда.
>>42108
> Она излишне большая.
Уже вижу. И медленная, видимо, чего я точно не хочу.
Вообще у меня одна из главных целей - дойти до создания программ (плееров, сортировщиков изображений и всё такое). Не думаю, что буду работать программистом.
>> No.42110 Reply
>>42108
О, спасибо.
Я другой доброкодер, учил в школе и институте С++ на уровне лаб и легких олимпиад. Хочу устроиться Junior Python developer. Получается, копипаста про питон верна?

Изучаю Dive into Python 3(до чего жестокий подход у автора, бросает сходу в гущу питона), Лутца(энциклопедии надо читать, да?), прохожу курс на codeacademy, записался и собираюсь осваивать все курсы отсюда
https://www.coursera.org/specialization/fundamentalscomputing2/37?utm_[...]ipTop

Я все правильно делаю? Нужно еще чего-то добавить?
>> No.42111 Reply
File: SQL-1.png
Png, 3.02 KB, 891×289
edit Find source with google Find source with iqdb
SQL-1.png
File: SQL-2.png
Png, 2.17 KB, 905×292
edit Find source with google Find source with iqdb
SQL-2.png
File: SQL-3.png
Png, 4.32 KB, 480×384
edit Find source with google Find source with iqdb
SQL-3.png

>>42110
> Нужно еще чего-то добавить?
>> No.42112 Reply
>>42110
Питон никогда не используется сам по себе. В требованиях обычно идут разномастные фреймворки, а знание питона - просто побочный навык.
>> No.42113 Reply
>>42111
>>42112
Вакансий не так много, значит вкатываться нужно будет в web.
Ок, значит нужно ещё MySQL и Django.
Что по ним почитать и сделать? Нужно ли посмотреть javascript?
>> No.42118 Reply
>>42113
По поводу SQL, начинай с:
http://progopedia.ru/language/sql/
И далее:
http://www.proklondike.com/books/database.html
http://www.progbook.ru/bd/
И так далее.
>> No.42119 Reply
Я воткнусь с советом читать корифеев (Date, An Introduction to Database Systems как пример), чтобы получить хорошую такую, годную картину нижележащей реляционной алгебры и подход к проектированию БД в нормальных формах и математическую строгость в довесок по желанию. Хотя сам не очень осилил, да. Но >>42118 вместо этого предлагает "Hello world" к десяти разным бд и тонны crap-литературы.
Хотя в подходе "научиться писать запросы" ничего плохого нет, если надо научиться писать запросы. Но я пробежался по ссылкам и там этого тоже нет.
>> No.42120 Reply
>>42119
> Хотя в подходе "научиться писать запросы" ничего плохого нет, если надо научиться писать запросы. Но я пробежался по ссылкам и там этого тоже нет.
Ну тогда Алан Бьюли, "Изучаем SQL".
>> No.42121 Reply
File: 1355435331992.jpg
Jpg, 394.55 KB, 779×1100 - Click the image to expand
edit Find source with google Find source with iqdb
1355435331992.jpg
>>42120
Спасибо.
>> No.42133 Reply
File: fate_zero_ch_1__summon_saber_by_arrancari-d37s6eq.jpg
Jpg, 604.19 KB, 982×771 - Click the image to expand
edit Find source with google Find source with iqdb
fate_zero_ch_1__summon_saber_by_arrancari-d37s6eq.jpg
>>42110
Если работа нужна быстро, то можно без dive into. Кодеакадеми бесполезен, насколько я помню. Смотришь синтаксис на tutorialspoint\читаешь Лутца. Дальше прочитываешь последний Python cookbook. Серьезно, я все время спрашиваю вопросы типа "Gil в питоне\ итераторы vs генераторы\ различия 2 и 3 питона\ различия jython\cython \....", ответы на которые есть в кукбуке. Большинство быдлокодеров ответов на эти вопросы не знают, но имеют опыт джанго-хуянго от года и более и зп хотят около сотни. Sql и прочие мелочи гуглятся довольно быстро, так что имеет смысл до собеседования написать небольшой бложик, чтобы собрать картинку воедино. Специально вдаваться в реляционную алгебру или там построение рест-сервисов смысла нет на начальном этапе. Просто проставляй индексы по тем полям, по которым делаешь джойн и прочитай пару постов на стековерфлоу про rest vs remote procedure call. Это краш-курс недели на две.
>> No.42139 Reply
>>42133
> Sql и прочие мелочи гуглятся довольно быстро
Тем не менее, джойны спрашивают на собеседованиях (две картинки, что я бросил выше — типовые задачи по SQL, и их могут спросить). Иногда спрашивают слишком много, но тогда работодатель ССЗБ, с такими лучше не связываться, а искать следующего.
>> No.42141 Reply
>>42133
Я уже с этого поста почувствовал всю суровость программирования.
Имеет ли смысл для ньюфага начать сначала с html/css и им подобных, если интересует именно целая картина и возможность запилить кастомный бложик?
>> No.42142 Reply
>>42141
html и css без вдавания в подробности- это очень просто. Буквально пары дней хватит,но ознакомится обязательно надо. Все же, твой код делает только одну вещь- выдает html и, возможно, жабаскрипт.
>> No.42143 Reply
>>42141
Это надо задрачивать, если хочешь быть фронтэндщиком, там тот ещё рокет сайенс в последнее время.
А так достаточно знать самый минимум.
>> No.42146 Reply
File: 14195380082990.jpg
Jpg, 120.77 KB, 1280×720 - Click the image to expand
edit Find source with google Find source with iqdb
14195380082990.jpg
>>42133
Тонны нефти за пояснения. Но я только поступаю в институт.
К сожалению, вылетел и перепоступаю, зато за это время определился что у меня хорошо получается, чем хочу заниматься и меняю специальность.

Так что у меня есть порядка двух лет на освоение всего-всего и работать. Питон выбрал, потому что после Pascal, C++ и Java у меня от синтаксиса и возможностей питона случился вау-эффект. Код выглядит приятно и няшно, прям гляжу на монитор и умиляюсь.
>> No.42179 Reply
>>42146
А мне питон после JS не нравится. Хотя классные штуки можно делать в одну строчку, я скучаю по замыканиям.
>> No.42197 Reply
>>42146
Update:
Лутц прочитан(чую, что перечитать раз-другой в процессе учебы придется, все нюансы не запомнил), осталось два тома "Программируем на Python". Ух. Задачки на первую неделю с курсеры сделаны за два дня. Чот скучно, могли бы и быстрее выкладывать.

Доброчаньки, а у вас нет задачек для junior'а? Может работы какой, хоть в ДС, хоть удаленно, за чай и печеньки.
И надо ли получать строго хорошее ВО? Может, устроиться джуном и учиться заочно/не учиться вообще?
>> No.42198 Reply
>>42197
Деньги и без этого заработаешь на веботе и ололо-энтерпрайзе, но если лезть в дебри и охота развития, то соснешь без ВО.
>> No.42199 Reply
>>42198
А толку от ВО? Там одни устаревшие дифуры всё равн вместо всех этих новомодных ООП, алгебр и графов.
>> No.42200 Reply
>>42199
Можно спокойно навернуть книжеца по новомодному.
>> No.42201 Reply
>>42200
Я тебя не об этом спросил. Я тебя спросил, с ВО что делать? Книжеца и без ВО навернуть можно. Я три года честно учил всё, что мне давали в вузе и к концу третьего курса не умел вообще нихуя. Потом просто бросил уник нахуй в конце третьего курса и перелез за книжецы. ВО только сделало из меня посмешище в глазах коллег. Якобы программист, который вообще нихуя не умеет, один позор.
>> No.42202 Reply
>>42201
> Книжеца и без ВО навернуть можно.
> ВО только сделало из меня посмешище в глазах коллег. Якобы программист, который вообще нихуя не умеет, один позор.
Ну да, задрочить синтаксис какой-то шарпоты может и школьник. А шаг влево, шаг вправо, и пошел матан и сириус бизнес. И вот твои крутые ололо-погромисты уже беспомощно блеют.
>> No.42203 Reply
>>42202
> матан
Хватит каверкать меня. Я тебе говорю, что того матана и нет в вузах, который нужен. Один хер все эти приколы с графами и алгеброй потом только из книжиц. Из нужного - ничего.
>> No.42204 Reply
>>42203
Это основа, на которой потом и можно читать теоретические книжки по нужной теме.
А школьник туда полезет и нихуя не поймет, потому что он знал в разы меньше, и того половину забыл уже.
>> No.42205 Reply
>>42204
Основа в вузе:
1) устаревшая. Термины устаревшие.
2) алгебры у нас и основ не было. Вообще, только линейная.
3) всю основу можно выучить по двум-трём вузовским учебникам за год, толку от пяти лет в вузе. Людей пять лет в вузе чуть ли не на руках носят за все пятёрки, а на выходе они вообще никто и звать их кикак. Это вообще как? Зато дилетанты с одим синтаксисом уже к тому времени набирают кучу опыта и денег. А, ну да, деньги же мне не должны быть нужны.
4) если не лесть к учёным с супер-компьютерами и в кодирование, то математика везде только немного сложнее школьной. Я разбирался с этими алгоритмами Флойда, бинарными деревьями и выпуклыми оболочкми и до универа, когда был именно что шкоьником. Тогда использовать это на олимпиадках мне что-то ничё не мешало.
>> No.42206 Reply
>>42205
А джля прикладного программинга вообще кроме арифметики ничего не требуется.
>> No.42207 Reply
>>42205
Никто не мешает тебе после второго-третьего курса пойти работать. Всякие конторы уже тогда начинают охотиться за вменяемыми студентами, это как бы намекае на спрос.
Базовые алгоритмы простые, а закопайся в модные сейчас датамайнинги и прочие машинные обучения, и мало не покажется.
>> No.42208 Reply
>>42207
В датамайнингах и машинных обычениях вообще почти нет никакого матана. Там предельный переход используется только по редчайшим праздникам. Как мне мои дифуры в них помогут?
>> No.42209 Reply
>>42208
А вообще меня просто бесит. Бесит вся эта пьяная бесцельность и хаотичность. Бесят все эти ёбаные абитуры, которые поступают в уник, лишь бы поступить и обсуждают, кто на сколько минут опаздал на занятия. Что вообще за предельный переход никого не волнует. Из чего складывается эффективность обучения никого не волнует. Всё брошено на произвол судьбы. Бесцельность, расплывчатость и рассредоточенность. думать они меня учат, того рот ебал, бля. Кругозор расширяют и не могут "тся" и "ться" написать правильно.
>> No.42210 Reply
>>42208
>>42209
Лол, ну это уже твой личный будапешт и качество обучения. Наверное, можно навернуть и западные CS курсы, но сравнимо ли это будет, и пойдет ли после школьной программы, с учетом перерыва после неё?
Просто всё это намного сложнее для самостоятельного вкуривания, чем какие-то синтаксисы и прочие практические моменты, которые надрачиваются сами собой в процессе. Вот там действительно ничего сложного, и именно теоретическая подготовка и дает различие в скилле.
>> No.42212 Reply
Спасибо, доброкодеры. Понял, поизучал вопрос, ВО и матан нужны.

Раз у меня ещё минимум 2 года до первой работы, что надо изучить, чтобы получить полноценное крутое образование в области СS и сходу пинком открыть дверь в Гугл или Яндекс?
>> No.42213 Reply
File: Saber-FSN-(2).jpg
Jpg, 900.12 KB, 980×1381 - Click the image to expand
edit Find source with google Find source with iqdb
Saber-FSN-(2).jpg
>>42197
Ну можно попробовать из тебя прокачать нормального кодера. Расскажи про мотивацию и оставляй почту - будут силы, на выходных поговорим. А то не очень понятно, то ты хочешь поступать и несколько лет учиться, то хочешь прямо сейчас сайты клепать.
>>42199
Про ВО сложно сказать. Хороший аккаунт на стековерфлоу и гитхабе дают больше для работы, чем моя корочка физтеха. Алгоритмы, Конечные автоматы, Proglang + по мелочи можно самому освоить, если достаточно дисциплинирован. Я бы сказал так: имеет смысл поступать на ВМК, ФУПМ МФТИ или новый факультет вышки, остальное бесполезно в плане работы. Это как заниматься боксом, а потом пойти работать охранником в продуктовый. Плюсы: возьмут в любой продуктовый, есть шансы устроиться даже в АШАН, пару раз в год двоечка пригодится. Но если у тебя цель изначально стать охранником, а не спортсменом...
>> No.42214 Reply
>>42213
ВМК МГУ не трогайте. Пусть гниёт.
>> No.42217 Reply
File: Fatezero-irisviel-von-einzbern-illyasviel-von-einz.jpg
Jpg, 250.87 KB, 700×478 - Click the image to expand
edit Find source with google Find source with iqdb
Fatezero-irisviel-von-einzbern-illyasviel-von-einz.jpg
>>42213
Мотивация: мне это нравится, получается, надо будет скоро зарабатывать деньги. Родители негодуют на меня сильно из-за того что вылетел с МФТИ.(А может ВО это не твое, вот, у меня тут стройка намечается, го туда работать) Ну, не смог я там физически. Невроз, нервное истощение, сейчас в станционар упекают. ВМК, ФУПМ, ФКН не варианты, с безумными проходными я не хочу соревноваться- олимпиады-то сгнили за год, а ЕГЭ собачиться на сотню- брр. Да и истощение сильно подкосило меня в уверенности в своих силах(экзамены я сдал- соображение есть, хоть в этом уверен), так что дикого хардкора я боюсь теперь.

Конечно, хочется заниматься всякими крутыми няшными вещами, списывался со всякими НМУ-шниками, ботал по хардкору, но вот из-за истощения я теперь в сомнениях. Идти на быдлоработы не хочется, а определятся в жизненном пути надо.

Спасибо, Сейба.
femvax@gmail
>> No.42953 Reply
>>42133
> Sql и прочие мелочи гуглятся довольно быстро
Аналогично как и твои "Gil в питоне\ итераторы vs генераторы\ различия 2 и 3 питона\ различия jython\cython", хотелось бы заметить.
>> No.43041 Reply
Почему
class Dummy:
    def __init__(self):
        self.b = self.a
        print(self.b is self.a)
    def a(self):
        pass
Dummy()
выдает False? Почему у b другой id, он же на то же самое указывает?
>> No.43042 Reply
>>43041
Видимо каждый раз когда ты делаешь self.a создается новый объект. Эти объекты внутри себя таки ссылаются на один и тот же метод (т.е. они равны), но это не один и тот же объект.
>> No.43043 Reply
>>43042
Таки видимо
self.a is self.a # => False
а че
id(self.a) == id(self.a) # => True
? Я думал is только по идентификаторам смотрит.
>> No.43044 Reply
>>43043
Ох вау. Ну тогда я не знаю.
>> No.43045 Reply
>>43043
is работает в питоне с очень агрессивными оптимизациями и жутко непредсказуемо. Эту штуку можно использовать только для проверок на None.
blog.lerner.co.il/why-you-should-almost-never-use-is-in-python/
>> No.43046 Reply
>>43045
Понимаю, понимаю. В определенный момент показалось логичным его прилепить, но не фортануло.
>> No.43048 Reply
>>43045
А ещё что-то бухтят на пхпшные и джаваскриптовые == и ===. Почему вообще нет скриптовых языков для веба со статическим синтаксисом?
>> No.43049 Reply
>>43048
Знаете, некоторые печальные даты надолго остаются в памяти людей: 11 сентября, 17 августа, 1917-й год, 1941-й. К ним стоит добавить 1995-й - год появления JavaScript, PHP, Ruby, ну и Java тоже. Кому-то захотелось по-быстрому добавить динамизма в веб-странички, и он за пару недель наговнякал интерпретатор, встроив его в браузер Netscape. Кому-то захотелось оживить свою домашнюю страничку, добавить счетчик посетителей, еще что-то, и он на коленке сделал такой вот изменятель страничек на стороне сервера. О больших проектах тогда никто не думал, personal home page назывался тот изменятель. А когда делаешь интерпретатор, проще всего сделать его на динамической типизации. Это банально очень просто. О системе типов вообще можно не задумываться, не говоря уже об их выводе. К сожалению, на фоне тогдашнего мейнстрима (Си, ранние плюсы, что там еще было?) эти скриптовые языки выглядели очень выигрышно, писать мелкие куски кода на них было намного проще. Что такое нормальная система типов тогда мало кто знал: хаскель был еще в пеленках, ML'и традиционно не выходили из университетов. Так что люди эти скрипты подхватили, стали добавлять все новые функции. Менять систему типов стало поздно. В итоге выросло то, что выросло. С тех пор одна масса людей занята тем, чтобы делать все более сложные интерпретаторы, которые бы не так тормозили, другая масса придумывает 121-й способ добавить в JS типы, а третья на динамических языках пишет и плачет в бложиках о том, как грустно им делается. И проблема не только и не столько в скорости, сколько в maintainability кода и усилиях на необходимые тестирование и отладку при росте проектов. Единственная реальная причина появления динамически типизированных языков - лень и недальновидность авторов. Эволюционно динамические языки - тупиковая ветвь, хоть они и обречены рождаться вновь и вновь просто потому что их делать проще, а делать языки люди любят. Сегодняшняя популярность некоторых из них - случайность, исторический казус, следствие контраста между этими языками и мейнстримом начала 90-х. То, что много идиотов используют идиотские языки, говорит лишь о том, что идиотов много. Сегодня, когда есть языки с нормальной статической системой типов, никаких реальных преимуществ у динамической больше нет. Только я имею в виду действительно нормальные статически типизированные языки - как минимум с параметрическим и ad hoc полиморфизмами, с выводом типов. Не Си с джавой. Хаскель, окамл, скала - такого уровня. У этих конкретных языков могут быть свои проблемы, часто инфраструктурные, но речь сейчас не о них, речь о динамической vs. статической типизации в целом.
>> No.43050 Reply
>>43048
Питоновскому малопонятному is до пхпшных и джаваскриптовых проделок приведения типов довольно далеко.
>> No.43051 Reply
>>43049
> К ним стоит добавить 1995-й - год появления
There are only two kinds of programming languages: those people always bitch about and those nobody uses. -- Bjarne Stroustrup

Я написал как-то стили на less, чтобы сделать код, который легко читать и в котором всё по dry. Начальники опубликовали вакансию на дизайнера и взяли на него дизайнера, который мог верстать. Она могла юзать только винду. Никто даже не попробовал склонировать репку, чтобы хотя бы взглянуть одним глазом на мои старания. Все сказали, что на винде они не смогут поднять окружение. Она просто скачала сконкатенированный в один и лишённый всех комментов и пробельных символов. И правила его. Всё. Потом мне это прислали, чтобы я прилепил пхп поверх.
>> No.43052 Reply
>>43051
Где он вакансию публиковал?
>> No.43053 Reply
>>43051

А у нас на проекте почти все ебучие видузятники-похэписты, кроме парочки со своими ноутами. Даже мне приходится сидеть на ссаной винде, но я поставил цигвин и сижу на дев-сервере через ссх. Уволюсь наверно скоро нахуй.
>> No.43054 Reply
>>43052
При чём тут это вообще?
>> No.43055 Reply
>>43054
Интересно.
>> No.43063 Reply
>>43051
Надо сразу жениться было.
>> No.43064 Reply
>>43049
Автор пасты не в курсе про лиспы.
>>43051
Ты сам бака же, даже в мерзкой винде есть куча редакторов, которые поддерживают генерацию less, coffescript и прочие хипстерские штучки. Да и кто будет прислушиваться к словам пхп-макаки, даже если ты что-то полезное говоришь ;3
>> No.43065 Reply
>>43064
Я то тут при чём? Конечно есть, но никто и не думал пытаться ставить их. Вот именно, мне вообще никто не слушал даже.
>> No.43066 Reply
>>43049
Хорошо комментированный и структурированный код на языке с динамической типизацией отлично сопровождается.
Говнокод на языке со статической типизацией читать проще.
>> No.43067 Reply
>>43066
Хорошо структурированный код вообще не нуждается в комментировании. Кроме каких-то моментов.

Но стат. типизация же не только для этого. Более важно, что она помогает предотвращать баги. Во-первых статический анализ кода с ней гораздо лучше работает. Во-вторых часть ошибок отсекаются на этапе выведении типов компилятором(или интерпретатором). В-третьих зная тип входных параметров ты знаешь что туда не попадёт что-то что вообще никак не должно попасть. В-четвёртых нет неожианных наркоманских неявных приведений типа(ну или их меньше по крайней мере и не такие наркоманские). Как вот это '0xabс' приводящееся от строки к числу или полная неразбериха с 0, false, null и ''.
>> No.43068 Reply
>>43067
Охуительные приведения строки к числу только в жс бывают же.
Не совсем понимаю о какой неразберихе ты говоришь, на null всегда отдельная проверка, 0 и false даже в этих ваших крестах само приводится, проблем не доставляет.
>> No.43069 Reply
>>43049
Мощная Система Типов нинужна. Достаточно статической типизации. Всё, что заставляет больше думать - выбрасываем. Всё, что усложняет чтение кода - выбрасываем. Всё, что усложняет компиляцию - выбрасываем. Всё, для чего нужно знание матана - сжигаем в печи. Всё, что сжигает оперативную память без надобности - выбрасываем. Всё, что имеет проблемы с построением инфраструктуры пусть даже и самому - выбрасываем.

Хороший язык должен быть простым. Он должен делать ровно то, что помогает программировать не напрягая сильно мозг. Если при создании языка есть два варианта решения проблемы - стоит выбирать самое простое. Если что-то можно упростить - стоит это сделать. Чем меньше синтаксического сахара - тем лучше и тем меньше надо держать в голове одновременно. Сахарно-синтаксический диабет это плохо.

Именно по этому хачкель сосёт и именно по этому js тоже сосёт, но его всёж используют. Программеры люди глупые и ленивые. Это важно. Об этом надо помнить при разработке языка программирования.

Твой хаскелик приносит много сложности. Слишком много для того, чтобы преимущества, которые эти усложнения несут обесценивались.
>> No.43070 Reply
>>43069
> js, python thread
> сахарный диабет
Ты же знаешь, что это неправда. Схема сложнее Питона в плане разработки.
Есть сорта сахара. Чтобы оный делу не вредил, он должен быть:
1. Согласован со стилем языка
2. Быть очевидным.

JS изначально содержал фатальные недостатки, а теперь уже слишком поздно что-то менять.
>> No.43071 Reply
>>43068
> на null всегда отдельная проверка,
Это адресный тип данных, он ни с чем не пересекается.
> 0 и false даже в этих ваших крестах само приводится, проблем не доставляет.
А вот и доставляет. Ноль к логическому типу — это не приведение, а использование по месту: просто взял и проверил с нулём, и оно «само» проверилось, без приведения типов. А вот использование константы «false» в арифметических выражениях — уже ошибка. И её компилятор должен будет изловить.

Для сравнения, присоединить число к строке можно (взял да и присоединил), а вот сложить число и строку — просто так нельзя, надо сначала из строки число зделоть, а потом их складывать.
> Не совсем понимаю о какой неразберихе ты говоришь
Нужно дерево типов!
>> No.43072 Reply
Учу компьютерный матан, пилю алгоритмы из Сэджвика и других полезных книжек. Нужно ревью.
https://github.com/femvax/Algorithms
>> No.43073 Reply
File: 1435487106216.png
Png, 0.95 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1435487106216.png
>>43072
Зойчем вам скрытое состояние в классе UnionFind, єто же поиск. Зойчем ви тгавити пейсателя, а?
>> No.43074 Reply
>>43071
> Для сравнения, присоединить число к строке можно (взял да и присоединил), а вот сложить число и строку — просто так нельзя, надо сначала из строки число зделоть, а потом их складывать.
Один хуй там пиздец, число+строка=строка, число х строка=число. Охуеть вообще. В питоне хоть всегда либо строка, либо эксепшен. Хотя бы предпочел вместо охуительного умножения строки нормальную функцию.
>> No.43076 Reply
File: tumblr_mqgs2lN3hf1s4u4wvo1_500.gif
Gif, 309.94 KB, 500×281 - Click the image to expand
edit Find source with google Find source with iqdb
tumblr_mqgs2lN3hf1s4u4wvo1_500.gif
>>43073
> скрытое состояние
Непонять! Что не так?
>> No.43077 Reply
>>43071
> > Не совсем понимаю о какой неразберихе ты говоришь
Лучше примеров привести. Вот надо было сохранить в базу состояние фильтров таблички в интерфейсике. Сохраниляли только если фильтр не пуст. То есть если он != ''. И фильтр с нулём не сохранился.
>> No.43078 Reply
>>43077
Ты имеешь ввиду момент когда я инициализирую массив с индексами?
Код получится с дополнительными проверками.
>> No.43080 Reply
File: коната-42.jpg
Jpg, 14.67 KB, 200×175 - Click the image to expand
edit Find source with google Find source with iqdb
коната-42.jpg
>>43076
> > скрытое состояние
> Непонять! Что не так?
Вступайте в наши ряды:
http://fprog.ru/2009/issue1/eugene-kirpichov-fighting-mutable-state/
>> No.43085 Reply
>>43080
Спасибо!
Значит, к изъянам можно отнести:
1. find меняет состояние обьекта
2. Переменные общие для всех методов, а все методы изменяют их.

А Сэджвику норм было
Ннно, если я буду работать в методах не с обьектами, а с их копиями, алгоритм будет кушать вдвое больше памяти.
>> No.43089 Reply
>>43080
А все потому, что нормального конста не завезли.
>> No.43115 Reply
PyInstaller нормально пакует в общем. И капча "тонкая минимум жена скорость винрарной" одобряет.
>> No.43408 Reply
http://rosalind.info/problems/long/

Госопода, пытаюсь решить эту вот задачку. У меня уже 3 класса и 90 строк, и это я только спарсил файл.

Было бы одним классом меньше, если бы работала эта поебота:

`a = ['a','b','c','d','e']
for el in a:
if el != 'd':
    print el
    del el
    print 1
print a`

Соответственно следующие вопросы:
1. Насколько я дно? Подозреваю, что решение всей задачи сводится к какому-нибудь циклу с уёбищным регекспом
2. Есть ли в питоне способ читать список и параллельно удалять оттуда элементы? Через индексацию элементов даже пробовать не хочу, потому что точно обосрусь.
>> No.43409 Reply
>>43408
> удалять
Мысли шире, анон. Переписывай выжившие элементы в новый список, к примеру.
>> No.43410 Reply
>>43408
1. Вроде того, стандартных методов строки хватит.
2. Копирую нужные элементы в новый лист.
Не знаю зачем тебе этот странный код, но:
"del el" - ты тут удаляешь переменную el, а не элемент листа a.

Из чистого любопытства можно на твои 3 класса и 90 строк посмотреть?
>> No.43411 Reply
>>43408
Олсо, если принты там только для отладки, то попробуй что-то в духе
a = ['a','b','c','d','e']
a = filter(lambda el: el != 'd', a)
print a
Вместо лямбды можно и полноценную функцию передать, если логика посложнее.
>> No.43451 Reply
>>43411
> filter
Это же просто [x for x in lst if func(x)] да?
>> No.43452 Reply
>>43451
Да, filter и map можно и через list comprehension записать.
>> No.43454 Reply
Вы меня не побьёте за просто отписку ньюфага?
Ух-ты, я сделал это задачу.
Я не совсем безнадёжен.
Узнал про структурное программирование, теперь умнее буду. Долго думал, как узнать, что
строки можно склеить. Написал тысячи хуеты, а потом за обедом понял, как надо.

Можете сказать, насколько понятно, что в этом коде вообще творится? Если всё понятно, то поясните за вычислительную мощность. В пояснении для решивших пишут, что О(mmn*n), где m и n - длина строк и их количество, вполне удовлетворительно. Я не могу все свои вайлы оценить сверху.
>> No.43455 Reply
File: data.txt
Txt, 0.05 KB, 0 lines
view edit
data.txt
File: contig.py
Py, 0.00 KB, 0 lines
view edit
contig.py

Самое главное забыл:
>>43454-кун
>> No.43457 Reply
>>43454
> вычислительную мощность
Погугли Ананий Левитин, «Алгоритмы: введение в разработку и анализ», там с примерами есть...
>>43455
> Можете сказать, насколько понятно, что в этом коде вообще творится?
У тебя три вложенных цикла, потому и кол-во действий возрастает быстрее, чем линейно.
> Я не могу все свои вайлы оценить сверху.
Да и не надо там нечего оценивать, сплошные прыжки по оперативной памяти, это и так понятно. Массивы байтов были бы быстрее, за счёт кеша процессора, но в пифоне их нет.
>> No.43483 Reply
>>43457
Байтоебство в питоне в большинстве случаев не нужно. Когда нужно, есть ctypes. В крайнем случаем вообще внешняя либа на си. Ну и всякие цитоны с нумпи, если все серьезно.
>> No.43513 Reply
Вопрос общий. Есть у обьекта метод .сохранитьресурснадиск(ресурс) и есть поле .несохрянать_локально, как лучше - проверять поле внутри метода или какждый раз перед его вызовом? Второй яснее, но первый как-то практичнее.
>> No.43514 Reply
>>43513
Вакаба!
>> No.43516 Reply
>>43513
Внутри, конечно. Зачем вызывающим знать о таких тонкостях?
>> No.43518 Reply
>>43516
Метод приватный, так что вызываю его только я, иначе поле .не_сохрянать имело бы мало смысла. У меня вечно такая заморочка, есть функция и есть условие, напрямую к смыслу функции не относящиеся, но почти всегда проверяемое перед вызовом, каждый раз переступаю через себя засовывая все внутрь.
>> No.43637 Reply
>>43518
> Метод приватный
Давно в Питоне появились приватные методы? Или он у тебя просто не документирован?
>> No.43641 Reply
>>43637
_ - считается приватным и нормальные люди их не трогают без крайней необходимости. Документировать ты их не обязан. Функции и классы, начинающиеся с прочерка не импортируются автоматически через import *.
__ - приватней некуда просто.
Если же ты о привате в духе с++, то в питоне это просто невозможно ввиду особенностей языка т.к. все доступно через dir.
>> No.43657 Reply
Надо параллельно вытаскивать большое кол-во толстых файлов из сети на диск, думал писать с использованием asyncio корутин, но боюсь операции записи будут блокировать выполнение. Стоит лучше на тредах делать?
>> No.43658 Reply
Господа,
виндовс мой дом родной, но ради удобств командной строки таки скачал babun.
Столкнулся с проблемой:

{ c } » python testt.py Traceback (most recent call last):    File "testt.py", line 3, in <module>
`import numpy`
ImportError: No module named numpy ``

А ещё в бабуне стоит 2.7 питон. Как мне сделать так, чтобы при слове python я мог работать в питоне со всеми крутыми библиотеками, которые я устанавливал сам.
В линуксе, наверно, что-то похожее.
>> No.43659 Reply
>>43658
Сам это как? В переменной sys.path все пути импорта, можешь туда добавить своё или через переменную окружения PYTHONPATH. Посмотри в директории питона может он с ним pip принес, тогда через pip все ставь, если нет, то пакетный менеджер твоего бубна должен уметь pip поставить.
>> No.43661 Reply
>>43659
> Сам это как?
В смысле с питоном 3.4, скачанным и установленным под виндовс, а также с теми библиотеками, что я дополнительно устанавливал.
> PYTHONPATH
У меня её нет, если она относится к тем переменным, что можно найти в System -> Adv.S.Settings -> Environmental Variables

На сайте бабуна рекомендуют set pythonhome=, но мне это никак не помогло. По-прежнему у меня в бабуне открывается питон 2.7, хотя через консоль виндовса открывается питон 3.4

Может и правда настоящий линукс поставить?
>> No.43668 Reply
>>43661
Эх, мало тебе чем могу помочь тогда, ни с бабунум, ни с сигвином на котором он, полагаю, бежит, дела не имел. Укажи где-то на свой интерпретатор питона, алиасом или черт знает.
> спойлер
Безусловно.
>> No.43699 Reply
>>37139
Я вот не понимаю каких знаний могут требовать от стажера и на каком уровне, листаю по тегам на хх - младший рпограммист и стажер питона. Я б даже за копейки устроился б в дс, чтобы опыт получить, но не знаю на каком уровне я должен знать и что уметь
>> No.43700 Reply
>>43699
Имхо, чем больше ты думаешь "я бы за копейки устроился стажёром", тем хуже к тебе относятся работодатели. Им было даже лучше если бы ты хоть и без опыта был, но уже знания имел нормальные и у тебя было бы пара серьёзных упражнений на гитхабе, да если бы ты просил не так мало денег. Никто не любит работников, которые мало хотят. Ненужно думать, что кто-то должен учить тебя, это огромный риск для бизнеса, хотя он иногда и занимается этим. "Плох тот солдат", ну ты понял. Так что ориентируйся на то, что требует от мидла.
>> No.43703 Reply
>>43700
Без опыта работы на мидла даже нечего равняться, часть проблем можно встретить только на продакшене
>> No.43752 Reply
File: Kovrovyj-piton.jpg
Jpg, 43.52 KB, 400×310 - Click the image to expand
edit Find source with google Find source with iqdb
Kovrovyj-piton.jpg
Питоны, как бы мне покороче сделать .format() строки. Суть в чём: есть внешняя утилита, ей надо передать несколько отформатированных строк, подставив свои значения. Но там куча переменных и писать что-то типа
'''
parameter {name1} = {name2}
parameter {name3} = {name2}
parameter {name4} = {name5}
parameter {name4} = {name6}
'''.format(name1 = name1, name2 = name2, name3=name3 и т.д.)
это такая пушка, что всем пушкам пушка. Если пользоваться нумероваными шаблонами {0}, {1} или даже простыми {}, то приходится следить за порядком переменных и всё равно всё становится нечитабельным. Перечитал доки, так и не понял, можно ли в этом случае писать меньше кода. Может я чего-то не заметил и можете что посоветовать?
>> No.43753 Reply
>>43752
Ладно, гугл посоветовал сделать
'''
parameter {name1} = {name2}
parameter {name3} = {name2}
parameter {name4} = {name5}
parameter {name4} = {name6}
'''.format(**locals())
и не заморачиваться, мол, для мелких скриптов, да ещё и без локализации это всё не важно.
>> No.43755 Reply
Все-таки порнография с locals() режет глаз. Прогони лучше эти переменные через dict или даже class. Тогда сможешь сделать, например, так:
'''
parameter {0[name1]} = {0[name2]}
'''.format(some_dict)
Или хотя бы так:
'''
parameter {name1} = {name2}
'''.vformat(some_dict)
С class можно будет сделать так:
'''
parameter {0.attr1]} = {0.attr2}
'''.format(some_obj)
>> No.43768 Reply
>>43755
> Прогони лучше эти переменные через dict
Хороший совет, конечно, но тогда функция будет выглядеть так: сначала всё это запиливаю в словарь, потом пишу здоровенную портянку текста-шаблона, а потом снова делаю format() по этому словарю. Получается в принципе та же ерунда, что и с locals(). Плюс я сегодня из интереса, когда писал тесты, запилил вывод locals() и увидел, что поскольку он берётся внутри функции, то по сути и содержит только внутренние для функции переменные. Если делать словарь, то в словаре будет то же самое. Стоит ли огород городить?
>> No.43805 Reply
>> No.43806 Reply
>>43805
Нафиг. Лучше бы % форматирование с самого начала как-нибудь красиво запилили. Да и эти префиксы как-то на вид не оче.
>> No.43813 Reply
>>43805
Годно сделали. Правда придётся ещё ждать, пока нужные библиотеки сподобятся под 3.6 запилить, пока это всё старше 2.7 не поддерживает.
>> No.43814 Reply
>>43805
Я что-то в упор не понимаю в чем суть этих новых строк.
>> No.43818 Reply
>>43814
В том, что в строке прямо доступны переменные и выражения из контекста.
Почти что огрызок jinja2 в строках из коробки.
>> No.43830 Reply
https://www.python.org/dev/peps/pep-0505/
Что думаете, аноны? Типа как башевкские ${:?}. Мне очень нравиться, надоели уже эти тернари и проверки. Выглядит, конечно, как говно.
>> No.43831 Reply
>>43830
Нормально выглядит. Хороший годный сахар. TFW все равно сидишь на 2.7 потому нужный фреймворк переползает весьма неспешно и поддержка все еще экспериментальная
>> No.43832 Reply
>>43831
> спойлер
Та же муть. У меня твистед, а у тебя?
>> No.43834 Reply
>>43832
Киви. Который kivy, а не платежная система.
>> No.43843 Reply
>>43830
В ветке редита вот тоже единогласно против ??, но в какой-то очень малой степени за "?." и "?[]".
https://www.reddit.com/r/Python/comments/3lkaxc/pep_505_none_coalescin[...]tors/
Вряд ли будет одобрено.
Так и не появится нормального варианта вытаскивать возможно несуществующий элемент из листа.
>> No.43846 Reply
>>43843
Ну вообще там правильно заметили, что ?? нормально делается и функцией, но вот ?. таки лучше оператором.
>> No.43918 Reply
File: hamachi.JPG
Jpg, 7.53 KB, 380×119 - Click the image to expand
edit Find source with google Find source with iqdb
hamachi.JPG
Требуется написать маленький web-сервер, основное назначение которого - получать POST-запросы, брать оттуда данные, делать запрос на другой сервер и возвращать полученные значения. Т.е. такая прослоечка между двумя приложениями, которые не умеют в общение между собой.

В Питоне есть библиотека SimpleHTTPServer, в принципе я уже знаю, как реализовать на ней то, что надо. Вопрос в том, что если ли смысл ей пользоваться, не будет ли лучше прицепить Питоновый CGI на какой-нибудь Apache, или lighttpd, или вообще написать сервер на Twisted? Кто нибудь тут сравнивал работу в том или другом варианте, какие подводные камни, плюсы и минусы и прочее? Питон 2.7, если что.
>> No.43919 Reply
>>43918
Я встроенный питонвский сервер только для веб-морды/веб-доступа к какой-нибудь папке пользую. Когда надо посложнее, то bottle/flask. Подтягивать внешний сервер для малого трафика смысла не вижу.
> написать сервер на Twisted
Совсем тронулся.
>> No.43923 Reply
>>43919
Спасибо за ответ. Посмотрел фляжки с бутылочками, взял их на заметку и в итоге решил обмазаться Торнадо, вроде бы там есть всё, что мне надо. В случае чего можно будет сунуть это всё за nginx и балансировать.
> Совсем тронулся.
Там всё, что требуется - это взять данные из POST-запроса и переслать дальше. А потом вернуть ответ. Хотя возможно и тронулся.
>> No.43932 Reply
А зачем нужен json.dumps? Потому что вот я делаю

d = {'a': 1, 'b': 2}
d == eval(str(d))

И все работает примерно раза в 3 быстрее чем json.dumps, при том же эффекте.
>> No.43933 Reply
>>43932
Лоль, а вот придет тебе с каких нибудь апей "subprocess.call(['rm', '-rf', '*'])" и туши свет.
>> No.43934 Reply
>>43932
А зачем евал?
>> No.43935 Reply
>>43932
А, и вот еще, даже если ты сугубо свои данные сериализуешь/десериализуешь питоновская str в редких случаях отдаст валидный json. str(False) или str([{1:5}]) например не покатит.
>> No.43936 Reply
>>43935
__str__ конечно же
>> No.43959 Reply
Со одним sqlite файлом можно без хлопот из нескольких процессов работать (стандартной библиотекой sqilte3) или надо дополнительные локи придумывать, чтобы при одновременных коммитах файл не поломался?
>> No.43960 Reply
>>43959
Нельзя. И оно просто не даст тебе из другого потока работать. Открывать один файл несколько раз - это вообще целенаправленная стрельба себе в ногу.
>> No.43961 Reply
>>43959
Что имеется в виду под файлом в рамках использования sqlite?
>> No.43962 Reply
>>43961
sqilte3.connect('file.db') >>43960
Я про совсем отдельные процессы говорю. Мало ли, может он как по хитрому это понимает, вот и спрашиваю.
>> No.43963 Reply
>>43959
Локи есть, судя по документации. https://www.sqlite.org/lockingv3.html
мимо
>> No.43964 Reply
>>43963
Спасибо, поискал дальше, оказалось питоновская библиотека как-то умеет через контекстный менеджер лочить.
with conn:
    conn.commit()
>> No.43974 Reply
File: 154654_640.jpg
Jpg, 75.38 KB, 640×424 - Click the image to expand
edit Find source with google Find source with iqdb
154654_640.jpg
>>37139
Есть такое дело. Думаю написать vn-ку какую-нибудь. Хочется лёгкое и кроссплатформенные. Из соображений стиля брать RenPy не могу. Ну и вот теперь выбираю технологию. Насколько осмысленно использовать питон сам по себе? Достаточно ли лёгкий интерпретатор, чтобы вшить его в релиз? Есть ли что-то, о чём я должен знать?
Опыта по питону нет, но прошарить для написания внки не проблема. Главное, знать стоит ли
>> No.43975 Reply
>>43974
Дистрибуция чисто питоновских приложений как для одной, так и для нескольких платформ - дело не из приятных, я бы наверное что другое взял.
>> No.43979 Reply
>>43975
Есть PyInstaller, хотя результат его деятельности выглядит не очень аккуратно.
>> No.43987 Reply
Кстати, коли заговорили о дистрибуции приложений. Что можете посоветовать или привести в пример основного языка, к которому я прицеплю Питон. Чтобы скажем ядро программы на каком-нибудь Си (для вящей портируемости), а всю логику запитонить. Это реально сделать так, чтобы потом приходилось минимально пердолиться, собирая релизы под разные платформы?
>> No.43995 Reply
>>43987
Реально, только вот логику на компилируемых я/п обычно пишут.
И в 11:00 ровно ложатся спать (сейчас у мну на часах 00:27).
>> No.43996 Reply
>>43995
> И в 11:00 ровно ложатся спать
Утра?
>> No.44008 Reply
>>43974
Визуальную новеллу в первую очередь рисовать надо, а не писать. Короче, не для программистов занятие.
>> No.44009 Reply
>>44008
А во вторую очередь писать. Но не код, а историю. Короче, опять не для программистов занятие.

мимо
>> No.44010 Reply
>>44008
проиграл
>> No.44157 Reply
Надо сделать ололо-контроль-панель под шиндовс.
Я решил не ебаться с гуевыми тулкитами, а сделать вебморду, чтобы запускалось там http://localhost:1337 при старте. На чем лучше такое делать?
>> No.44158 Reply
>>44157
> ололо-контроль-панель
Что это?

На питухоне под шиндоуз это ебля по умолчанию.
>> No.44159 Reply
>>44158
Веб-морда для фонового процесса.
>> No.44160 Reply
>>44158
Ну почему? Маленький встроенный веб-сервер на каком-нибудь flask'е отлично получается.
>> No.44164 Reply
>>44157
Я маленькие штуки делаю на bottle, похож, но проще фласка. Либо на встроенном сервере питона.
>> No.44165 Reply
>>44164
Еще на webpy в качестве микрофреймворка можно посмотреть. У него и зависимостей совсем нет. Автор только умер, но вроде кто-то еще поддерживает код в адекватном состоянии.
>> No.44240 Reply
Эх, припекает мне от Чекио что-то. Есть классное илитное решение или куча говнокода. Делаешь говнокодом, смотришь решения, фейспалмишь с себя. Сервис меня третирует! Доставил чувак, который делает всё лямбдами. Такой-то челленж!
>> No.44262 Reply
Я, вообще, не захожу в /s/, но тут не мог не поделиться. Подходит пять минут назад к принтеру тимлид web-разработчиков, вытягивает лист из принтера HP M125:
- Я, чтобы распечатать этот лист, два дня драйверы принтера на Питоне переписывал.
- А что там?
- Да я хз, баг какой-то, под Убунтой не работает.
- Ты не хочешь им обратно отправить результаты?
- Сука, я их убить хочу.
Я в немом восхищении.
>> No.44263 Reply
File: 0_6a549_50e92771_orig.png
Png, 6.62 KB, 332×238 - Click the image to expand
edit Find source with google Find source with iqdb
0_6a549_50e92771_orig.png
>>44262
> драйвер
> принтера
> на питоне
> НА ПИТОНЕ(!), Карл!
  OUT 23H, AL    ; Initialize PORTS
READ1:
  IN AL, 20H     ; Is Strobe PC4 Low?
  TEST AL, 10H   ; 0001 0000
  JNZ DAFUQ
>> No.44264 Reply
>>44262
Драйвер же не мог быть на питоне?
>> No.44265 Reply
>>44262
Дык там поди имелись в виду не драйверы принтерного порта, а та херь, которая преобразовывает pdf/ps в протокол конкретного принтера...
>> No.44266 Reply
>>44265
А может и просто либа генерации пдф от Васяна.
>> No.44267 Reply
>>44266
Вот это скорее всего. Совсем уже со своим питоном рехнулись.
>> No.44522 Reply
File: 95f952b1c62800d145599b497d25b61d.jpg
Jpg, 174.39 KB, 950×1368 - Click the image to expand
edit Find source with google Find source with iqdb
95f952b1c62800d145599b497d25b61d.jpg
Ребятки, есть у кого в бумаге эта книга? Новая стоит слишком дорого, может, может кто-то согласится продать дешевле? Или могу обменять на "Операционные Системы" Танненбаума и/или "Unix и Linux. Руководство системного администратора", от Эви Немет и друзьяшек. Пересылку могу оплатить (город Архангельск). Да и вообще, с удовольствием "приму в дар" (и пересылку оплачу), любые книги по теме.
>> No.44525 Reply
Издательство ДМК выпустило перевод "Fluent Python", http://dmkpress.com/catalog/computer/programming/python/978-5-97060-384-0/

%% вот хз, когда их "Erlang во имя добра" кто-нить спиратит.%%

>>44522
Отпечатай, лазерные принтеры для того и созданы. Искать в бумаге замаешься, а сканы и pdf приличного качества есть в сети.
>> No.44552 Reply
>>44522
Неужели это настолько незаменимая книга, что нельзя вот так взять и найти что-нибудь другое? Не верю! Но уже хочу почитать.
>> No.44553 Reply
>>44552
Марк Саммерфилд очень хорошо пишет, подробно, прям как художественная литература... ну и примеры к книге есть.
Сам я на пифоне не пишу (и вообще не люблю языки без типов), но именно эта книга — одна из.
>> No.44563 Reply
>>44553
Тащемта с типизацией в Питоне всё окей, это не php какой-нибудь. По крайней мере если ты присвоил переменной число, то при попытке добавить туда строку получишь TypeError вместо преобразования чиста в строку с последующей конкатенацией. Правда присваивать переменной ты можешь что угодно, хоть чёрта лысого.
>> No.44565 Reply
>>44563
a = type('Chert', (object,), {'hairstyle': 'lisii'})
>> No.44567 Reply
>>44563
> По крайней мере если ты присвоил переменной число, то при попытке добавить туда строку получишь TypeError вместо преобразования чиста в строку с последующей конкатенацией.
Это не типизация. Это всего лишь не стреляние себе в ногу.
>> No.44568 Reply
>>44567
Если так думать - то типизация есть только в Agda 2.
>> No.44569 Reply
>>44568
Типизация хоть в каком-то приемлемом для type level кодинге уровне есть еще в хаскале и скале. В принципе, насколько, я понимаю, шаблоны в плюсах можно использовать для компайл-тайм построения натуральных чисел - то есть гипотетически типизации можно добиться, где хочешь. Так что мне тоже интересно, что следуют понимать под типизацией.
>> No.44573 Reply
>>44567
Это динамическая строгая типизация. А со своими фантазиями пройдите дальше.
>> No.44599 Reply
День добрый, заклинатели змей.
Собственно, две проблемы, которые не могу решить упорным поиском в интернетах. Может, тут есть гуру. В обоих случаях использую третий пистон (3.5 / 3.4):
0) При использовании PyGTK3 на машине разработчика все хорошо, а при запуску на целевом оборудовании -- не работают куски CSS. Ситуация была бы куда проще, если бы отвалился весь CSS целиком, но вот нет, не работают отдельные компоненты. Например, цвет окна изменяется, а цвет и рамка контейнера -- нет. Такие дела. Версии gobject 3.16 и 3.12 соответственно. В changelogах я ничего существенного не увидел.
1) При работе с Amazon SES на моей машине, отправка по SMTP (STARTTLS) происходит как по маслу, все четко и быстро. На целевом оборудовании (его у нас много, но везде развернут одинаковый образ) smtplib начинает материться в процессе хендшейка на SSLV3 unexpected message и в агонии умирает. Я пытался явно задавать версии TLS/SSL, но все тщетно. Тут я даже не знаю, версии чего проверять, так как либа-то стандартная. Как уже говорил, ничего дельного в интернете не нашел, пока сделал просто оболочку для mailx, но такой костыль будет мою совесть мучить. Что характерно, mailx превосходно работает на обоих машинах.
>> No.44689 Reply
Тред не читай, сразу вопрошай.
Хочу освоить Питон, нужно для того, чтобы копаться в исходниках доставшегося по наследству веб-сайта. До этого кодил только на Дельфи (довольно плотно) и поверхностно знаком с Си (на уровне лабораторок среднего второкура, которые я им помогал делать).
С чего вообще начать? Есть какая-нибудь подходящая книга? Копипаста про Питон правду говорит или есть нечто более современное?
>> No.44695 Reply
>>44689
Зависит от того как написан сайт. Думаю, с твоей базой можно за меньше недели нормально влиться. От себя советую онлайн Dive in Python (3).

Что за копипаста?
>> No.44697 Reply
>>44695
> Завтра ищешь в интернете книжку Dive into python. Похуй если ничего не поймешь. Затем идешь на python.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию питоньего кода - PEP8, чтобы от зубов отскакивало. Когда напишешь свою первую имиджборду, по пути изучив верстку на html+css, скачиваешь и изучаешь любой питоний асинхронный вебсервер, рекомендую Tornado или Gevent. Как переделаешь имиджборду, чтобы выдавала по крайней мере 5 тысяч запросов в секунду, можешь идти дальше - тебя ждет увлекательный мир хайлоада. Apache Hadoop, сверхбыстрые асинхронные key-value хранилища, MapReduce. Отсос хиккующих выблядков / просто неудачников типа рейфага или сисярп/джава-хуесосов, которые сосут хуй по жизни не заставит себя ждать и уже через пол года ты будешь получать такие суммы, что любая баба будет течь при одном упоминании твоей зарплаты.
>> No.44698 Reply
>>44695
> Зависит от того как написан сайт.
Криво. Очень криво. Кусками от разных программистов, сменявших друг друга. Вроде Питон 2.5.
>> No.44706 Reply
>>44697
> всерьез воспринимать пасту с сосача (и мне похуй, если она была написана раньше)
Dive into python - бесполезная хуйня, если это не твой первый язык и в этом случае эта книга пожалуй даже вредна, ибо прививает фанатизм.
Достаточно доков и какого-нибудь python guide for C++ programmers из гугла.
>> No.44718 Reply
>>44706
Обоснуй.
>> No.44719 Reply
File: asdasda.png
Png, 37.29 KB, 558×357 - Click the image to expand
edit Find source with google Find source with iqdb
asdasda.png
Спрошу и тут.
Как нужно былор это же делать правильно?
Почему такой простой пример не работает?
Неужели примеры написанные на 3Питоне не будут работать во втором?
>> No.44723 Reply
>>44719
Третий и второй питонкусы имеют кучу различий, писать сразу под оба это надо уметь.
Конкретно по твоей проблеме: во втором для такого делается raw_input(), а просто input() это "Equivalent to eval(raw_input(prompt))".
>> No.44737 Reply
>>44719
У третьепитона нет обратной совместимости со вторым. Второпитон же не жрётся интерпретатором третьего. Вот тебе даже списочек изменений: https://docs.python.org/3.0/whatsnew/3.0.html Есть такая вот штука даже для облегчения миграции, но ни разу не пробовал: https://docs.python.org/2/library/2to3.html
>> No.44738 Reply
>>44737
И чо, есть там какое-то движение в плане миграции? Или так и будут до смерти метаться между 2 и 3?
>> No.44739 Reply
>>44738
Где там? Большинство библиотек уже поддерживает третий, убунта в новом релизе будет поставлять третий питон по дефолту.
>> No.44775 Reply
>>44718
Я изучил питон по докам и какому-то гайду для бросающих с++. Какие еще обоснования тебе нужны?
>> No.44780 Reply
>>44775
> бросающих с++
Бросил?
>> No.44784 Reply
>>44780
Сорт оф. Просто не нужно нигде было, пишу для себя в основном.
>> No.44828 Reply
Накидайте годной литературы для освоения языка: подумываю обмазаться.
mimoPhpMakaka
>> No.44831 Reply
>>44828
Стандартные доки + stackoverflow, при наличии опыта с любым языком этого достаточно.
>> No.44848 Reply
>>44828
Ну и традиционный Dive into Python, конечно же.
>> No.44878 Reply
>>37139
Питаноны, подскажите как объединить приложение на wxWidgets+numpy+matplotlib в единый файл, что будет запускаться на любых комьютерах с установленным Python.
>> No.44879 Reply
>>44878
Тебе типа аналог jar нужен, раз предполагается наличие питона? Единственный вариант это на нужной платформе собрать все зависимости (со всеми их зависимостями) в директорию программы, потом эту директорию зазипать и вызывать по python MyApp.zip.
Структура архива примерно такая:
__main__.py
numpy/
    __init__.py
    ...
...
        
> на любых
На любых не будет.
>> No.44880 Reply
>>44879
Окей, попробую. Вообще мне нет разницы, архив ли это или скомпиленная программа.
>> No.45007 Reply
>> No.45069 Reply
File: HDpicsru_7eb65d1d_2497.jpeg
Jpeg, 115.59 KB, 750×600 - Click the image to expand
edit Find source with google Find source with iqdb
HDpicsru_7eb65d1d_2497.jpeg
Что думаете о panda3d? Кто работал? Какие подводные камни? Стоит ли с ним заниматься?
>> No.45070 Reply
def shanten(hand,num = 8, root=None):
`if root is None:`
    `temp = isolated(hand)`
    `root = node(temp[0])`
    `hand = temp[1]`
    `root.sh = num`
`d = subtract(hand,root)`
`c = []`
`for i in d:`
    `hand1 = hand.copy()`
    `for j in i.value:`
        `hand1.remove(j)`
    `if len(hand1) == 0:`
        `return(i)`
    `a = shanten2(hand1,i.sh,i)`
    `a.parent = i`
    `i.child.append(a)`
    `i.parent = root`
    `c.append(i)`
    `print(root)`
`root.child = c`
`return(root)`
Вот такая рекурсия. Здесь я строю дерево с верхушки, (а) — добавляемые узлы.

Мой трабл:
Когда я в более глубоких слоях рекурсии правлю root, то меняются root и в более высоких уровнях.

Как сделать так, чтобы root в каждом уровне был строго локальным, и на него никак нельзя было поставить указатели в более глубоких уровнях?

Работаю в айдле. Может, это его чудачества?
>> No.45073 Reply
Прочитал это:
http://effbot.org/pyfaq/why-are-default-values-shared-between-objects.htm
Я уже поставил в дефолтное значение None, но это не помогает.
Не помогает и вообще избавиться от дефолтных параметров

def shanten(hand,root,num):
`if root is None:`
    `temp = isolated(hand)`
    `roo = node(temp[0])`
    `hand = temp[1]`
    `roo.sh = num`
`else:`
    `roo = copy.copy(root)`
`d = subtract(hand,roo)`
`c = []`
`del root`
`for i in d:`
    `hand1 = hand.copy()`
    `for j in i.value:`
        `hand1.remove(j)`
    `if len(hand1) == 0:`
        `return(i)`
    `a = shanten(hand1,i,i.sh)`
    `i.add(a)`
    `roo.add(i)`        
`return(roo)`
Даже копировать и удалять поганый root не помогает.
Анон, выручай!
>> No.45074 Reply
>>45073
Фиг поймешь, куча однобуквенных переменных, не оговоренных функций , ошибок в оригинальном этом посте. Сделай обычное дерево типа make_tree(levels, root=None), убедись шо работает (рекурсивный вызов принимает детей), потом добавляй свой shanten.
>> No.45075 Reply
>>45074
subtract — даёт список узлов (d), которые нужно добавить к root
hand, hand1 — из них получаются какие-то значения, которые хранятся в узлах дерева
>> No.45076 Reply
>>45075
> http://effbot.org/pyfaq/why-are-default-values-shared-between-objects.htm
Это про мутабельные параметры в определении функции. Не твой случай.

Идет итерация по элементам cгенерированным по subtract(hand, root), каждый элемент добавляется к текущему элементу (корню в первом вызове) и к нему применяется рекурсивный вызов. Ты говоришь, что твой рекурсивный вызов по какой-то причине работает с предыдущим родителем -> ты передаешь в рекурсивный вызов текущий а не сгенерированный элемент -> subtract(hand, root) отдает что-то не то.
>> No.45077 Reply
File: shanten2.py
Py, 0.00 KB, 0 lines - Click the image to get file
view edit
shanten2.py
>>45076
def subtract(hand, root):
`nodes = [single(hand,root), head(hand,root), sidewait(hand,root), kanchan(hand,root), pair(hand,root), pon(hand,root), chi(hand,root)]`
`nodes = list(filter(lambda a: a != None, nodes))`
`return(nodes)`
``

Вот subtract
В нём проверяется hand на соответствие каким-то параметрам.
Если соответствует, то в nodes добавляется узел с каким-то значением. Если нет — туда кладётся Nonе, который отфильтровывается
>> No.45078 Reply
>>45070
джва бэктика
г
  о
    в
      н
        о
          к
            о
              д
джва бэктика
>> No.45079 Reply
>>45078
Спасибо, учту
>> No.45081 Reply
>>45077
Твоя проблема:
    def __init__(self, value, parent=None,child=[]):
child параметр мутабелен, его затрагивает описанное в ссылке выше. Делай:
children=None в параметре
self.children = children or [] в теле
>> No.45082 Reply
>>45081>>45077
Альса, кодишь какую-то муть, емана.
global keyword на уровне модуля, щито?
Где-то пробелы между параметрами есть, где-то нет.
Структура как из ада.
PEP8 почитай.
>> No.45083 Reply
File: shanten2.py
Py, 0.01 KB, 0 lines - Click the image to get file
view edit
shanten2.py
>>45082
Спасибо
> Альса, кодишь какую-то муть, емана.
Я каменты добавил.
>> No.45084 Reply
>>45083
То шо ты какое-то судоку на стероидах пилишь ясно и без каментов :3.
>> No.45085 Reply
>>45084
Боже, как мне доставляют твои комментарии. От "структуры, как из ада" прорвало на всю аудиторию. Вот и сейчас...
>> No.45086 Reply
>>45083
Открой в pycharm и нажми кнопку remofarmat code.
Или вот этой штукой долбани https://pypi.python.org/pypi/autopep8
>> No.45087 Reply
>>45085
Рад, что тебе понравились мои посты.
>> No.45294 Reply
>>45086
CTRL+ALT+L
Осло, в pycharm и пепы встроены, можно отметить в настройках любой стиль, под который нужно рефать и не ебаться с какой-то ручной установкой пакетов и прочим.
>> No.45310 Reply
>>45294
У меня на Ctrl-Alt-L сеанс в кедах лочится например.
>> No.45334 Reply
File: AByteofPythonRussian-2.0.pdf
Pdf, 0.60 KB, 612×792 - Click the image to get file
AByteofPythonRussian-2.0.pdf
Прикрепляю лучшую книжку для изучения новичкам.
>> No.45335 Reply
>>45334
А для перекатывающихся старичков чо есть?
>> No.45357 Reply
Помогите нубу. Надо установить библиотеку openpyxl. Однако ввод любой команды выводит ошибку синтаксиса. Писал и $ pip install и python -m pip install. Результат один SyntaxError: invalid syntax. Версия Змея 3.5 64 бит.
>> No.45358 Reply
>>45334
А ссылочка то 404.
>> No.45383 Reply
>>45335
Google: python for <your language> programmers
А потом читаешь доки и гуглишь стековерфлоу. Можешь еще плавание в питоне почитать для пущего фанатизму, но я бы не рекомендовал.
>> No.45384 Reply
>>45383
Что насчет второго-третьего? Столько лет уже прошло и как-то мутно до сих пор это всё.
>> No.45398 Reply
>>45357
Надеюсь ты это в шелле (bash, zsh, для винды cmd.exe, powershell), а не в самом питоне вводишь? Если нет, то нужна вся ошибка.
>> No.45400 Reply
>>45384
Ничего мутного. Вон даже наш слоупочный доброчан на третий перешел.
>> No.45402 Reply
>>45384
http://python3wos.appspot.com/ Чуток осталось.
>> No.45430 Reply
>>45398
В шелле мне пишет "SyntaxError: invalid syntax". в ответ на оба варианта. пробовал и в самом питоне результат
File "<stdin>", line 1
Собсна команда
SyntaxError: invalid syntax
В cmd пишет "$ (или python, случае второй команды) не является внутренней или внешней командой, исполняемой программой или пакетным файлом".
В баше не пробовал. Сижу под 7 виндой с SP1.
>> No.45431 Reply
>>45430
Начальный символ доллора убери, виндодебилушка.
>> No.45432 Reply
>>45430
Тебе стоит почитать как оно все устроено.
> пробовал и в самом питоне результат
Внутри питона вводят на языке питона. Эти две команды не на питоне.

> не является внутренней или внешней командой
Как сказали выше, убери доллар. Если не пройдет установи заново питон, там вроде по ходу установки будет галочка "добавить в PATH", тогда твой cmd сможет понимать где находится pip и python.

>>45431
Если питон у него не нашелся, то наверное и пип не пройдет.
>> No.45433 Reply
>>45430
P.S.
> В шелле мне пишет "SyntaxError: invalid syntax"...
Пайтон это не шелл. Точнее для пайтона есть шелл, тот где ты видишь `>>>`, но это не системный шелл.
>> No.45434 Reply
Ууу, инлайн код тоже видать сломался.
>> No.45436 Reply
>>45433
Я совсем нуб, куда его еще вбить?
>> No.45437 Reply
>>45436
Вводи свои команды в cmd.exe, убери доллар, если скажет "не является внутренней или внеш..", переустанови питон, во время установки следи, где какие галочки просят ставить. Если не поможет, вместо pip пиши полный путь к pip, типа C:/Python/pip.exe (ищи сам, он где-то там).
>> No.45488 Reply
File: slowpoke_s_burger_by_tet_teddy-d6xqon8.png
Png, 801.11 KB, 1024×1024 - Click the image to expand
edit Find source with google Find source with iqdb
slowpoke_s_burger_by_tet_teddy-d6xqon8.png
>>45069
Нет, конечно. И десять лет назад, когда оно ещё живо было, не стоило.
>> No.45514 Reply
File: christine-pascal.jpg
Jpg, 45.12 KB, 500×400 - Click the image to expand
edit Find source with google Find source with iqdb
christine-pascal.jpg
Привет, анаконды. А я так понял, что нельзя любую программу уместить в одну строку как на тёплом ламповом Паскале, да? И даже "while", и даже небо, и даже Аллах не поместятся в одну строку?
>> No.45515 Reply
>>45514
Если очень сильно постараться, то все возможно. Но не принято, да.
>> No.45516 Reply
File: Ritsuko.jpg
Jpg, 38.24 KB, 640×480 - Click the image to expand
edit Find source with google Find source with iqdb
Ritsuko.jpg
>>45515
Ясно, только блоки, только ХАРДКОР... Но я не собираюсь каждой переменной присваивать значение в отдельной строке, и будет у меня вот такое: "a=1", а не "a = 1". Я предупредил.
>> No.45517 Reply
>>45516
a, b, c = 1, 2, 3
З.Ы. Пренебрегать конвенциями - это некрасиво.
>> No.45518 Reply
>>45514
В перле нет всяких анальных ограничений, используй его.
>> No.45519 Reply
>>45514
Что ты несешь? Можно, но зачем?
>> No.45520 Reply
>>45519
Игнорируйте этот пост, я тредом ошибся.
>> No.45521 Reply
File: muslim-finger.jpg
Jpg, 16.97 KB, 356×288 - Click the image to expand
edit Find source with google Find source with iqdb
muslim-finger.jpg
>>45520
Можно нажать на крестик в верхнем левом углу сообщения, а потом на кнопку "Удалить пост(ы)" в нижнем правом углу страницы.
>> No.45523 Reply
>>45517
> a, b, c = 1, 2, 3
Спасибо, приму к сведению.
Что за "конвенции"?
>>45518
Поздно, пока будут учить змея.
>> No.45524 Reply
>>45523
> Что за "конвенции"?
https://www.python.org/dev/peps/pep-0008/
>> No.45525 Reply
>>45524
Ты вкратце объясни, что значит "пренебрегать конвенциями"?
к: округлить добрыми
>> No.45527 Reply
>>45525
Конвенции - соглашения по оформлению кода, именованию переменных/классов, стандартные практики и т.п. Как общие для языка, в случае питона пеп8, так и для конкретных проектов. Могут быть негласными, но прослеживаться по большинству проектов или коду из официальных источников (примеры из документации, скажем).

Если пишешь скрипты чисто для сугубо своих каких-то мелких нужд, то можно конечно и забить.
>> No.45528 Reply
File: image42624394[1].jpg
Jpg, 177.06 KB, 600×400 - Click the image to expand
edit Find source with google Find source with iqdb
image42624394[1].jpg
>>45521
> "Удалить пост(ы)" в нижнем правом углу страницы
Нет такой буквы.
>> No.45529 Reply
>>45528
Крутите барабан.
>> No.45532 Reply
>>45528
Вы банкрот.
>> No.45552 Reply
Доброкодеры, а можно я буду задавать глупые вопросы?
И вот первый: в отличие от тёплого лампового Паскаля список вместе с его размером не надо объявлять в начале программы, потому что у Питона есть автоматическое управление памятью в отличие от ТЛ Паскаля, то есть если в списке 3 элемента – Питон выделяет 3 ГБ для списка, добавляешь к списку 8 элементов – Питон дополнительно выделит 8 ГБ, я правильно понимаю?
>> No.45553 Reply
>>45552
Там скорее всего сишный realloc используется. Т.е. будет выделена новая порция памяти в куче, указатель на начало массива может измениться, а может и не измениться. В паскале этот массив фиксированной длины выделяется на стеке скорее всего. Но в поцкале есть и динамический массив http://wiki.freepascal.org/Dynamic_array например.
>> No.45554 Reply
>>45552
Зависит от реализации. В CPython это массив указателей, расширяется он не при каждом добавлении, а по хитрому алгоритму, как и в большинстве других языков/библиотек.
Вообще не понимаю в чем суть вопроса, в питоне нет стековых переменных как таковых, все переменные по сути указатели.
>> No.45555 Reply
File: No.-45555.png
Png, 1.63 KB, 105×18 - Click the image to expand
edit Find source with google Find source with iqdb
No.-45555.png
>>45554
> Вообще не понимаю в чем суть вопроса
Я предупредил, что вопросы будут глупые.
Второй вопрос: как задать список вПитоне?
>> No.45556 Reply
>>45555
В питоне нельзя задать переменную какого-то типа, можешь просто присвоить значение какой-то переменной, динамически.
>> No.45557 Reply
>>45555
Следует внести ясность в терминологию. На самомо деле в Питоне нет списков. Есть, как тут выше написали, динамические массивы, которые Гвидо почему-то обозвал списками. А это на самом деле разные структуры данных с разными асимптотическими сложностями: например, в настоящем списке добавление в начало списка - это O(1), а в динамическом массиве - O(n). Это следует иметь в виду. Задать "список" в Питоне очень просто:
lst = []
или
lst = [1, 'a', someObject, True]
В отличие от Паскаля в питоновский "список" можно напихать вперемежку всё что хочется.
>> No.45558 Reply
>>45557
> которые Гвидо почему-то обозвал списками
Наверное, чтобы не намекать на имплементацию, как в джаве массивы сидят под списками. Ну и в abc были "листы", которые являлись упорядоченными наборами.
>> No.45561 Reply
>>45557
В плюсах так-то куча разных стандартных контейнеров с разными сложностями доступа и добавления элемента.
>> No.45584 Reply
>>45552
Ты вообще не паришься об этом в пиццетоне. Об этом пусть Гвидо думает. Гвидо умный, а ты нет.

>>45555
Пустой лист можно так создать:

mylist = []

Обычно перед всякими сложными циклами. Сложные, значит в лист компрехеншенсы красиво не вмещаются, которые типа так выглядят:

mylist = [x for x in allah if x.endswith('babah')]
>> No.45585 Reply
>>45584
> Ты вообще не паришься об этом в пиццетоне. Об этом пусть Гвидо думает. Гвидо умный, а ты нет.
А потом почему всё медленно работает. Всё равно в этих скрипто-языках в конечном итоге все начинают разбираться в том, как это всё работает, когда приходится.
>> No.45587 Reply
>>45585
Ибо скриптовые языки высокого уровня. Выябываться перед одноглазниками на сишке будешь.
>> No.45637 Reply
File: sunfox.jpg
Jpg, 125.98 KB, 760×442 - Click the image to expand
edit Find source with google Find source with iqdb
sunfox.jpg
На правах рекламы.
>>d/61437
>> No.45701 Reply
Задача такая. Есть некий файл с музыкой, допустим, формата mp3. Задача состоит такая: я хочу получить из этого файла удобоваримые для себя данные по поводу звука. В идеале это должен быть двумерный массив, где одна "координата" отвечает за время, другая - за частоту, а значение там соответствует громкости. Такое возможно?
>> No.45705 Reply
Сяп. Что мне нужно знать, чтобы написать оконный граббер для пиксива?
>> No.45706 Reply
>>45705
Для гуя вначале попробуй обойтись tkinter'ом.
Для работы - requests или любая другая http библиотека. У пиксива вроде есть json апи, но прямые ссылки оттуда брать, кажется, нельзя. Так что в придачу придется знать как разбирать html и составлять логин post http запросы. Для парсинга есть lxml с удобными методами .cssselect (нужен модуль cssselect) или .xpath. Есть еще BeautifulSoup, но считается что он сильно проигрывает по скорости и не имеет каких-либо преимуществ перед lxml.
Можешь еще поставить куда-нибудь ихой официальный мобильный клиент и попытаться выяснить как ходит он.
>> No.45712 Reply
>>45701
Проще всего с Питоном в качестве фронт-энда для какой-нибудь швабодной консольной программы. Сабпроцессом вызываешь в удобном тебе формате. Но может и годные либы есть.
>> No.45731 Reply
File: Screenshot_2016-0...
Png, 42.80 KB, 563×485
edit Find source with google Find source with iqdb
Screenshot_2016-06-13_22-59-13.png
File: Screenshot_2016-0...
Png, 192.64 KB, 548×433
edit Find source with google Find source with iqdb
Screenshot_2016-06-13_23-00-50.png

>>43041
Вот оно как:
http://stackoverflow.com/questions/15977808/why-dont-methods-have-reference-equality
http://faingezicht.com/projects/2016/04/26/python-black-magic/
.a является дескриптором и при доступе в self.a.get создает и возвращает новый bound метод объект.
Что было совсем непонятно, так почему два запроса id в одном выражении были равны. Причина:
http://stackoverflow.com/questions/35173479/why-do-different-methods-of-same-object-have-the-same-id и пикрелейтед
>> No.45732 Reply
File: 7_7XDvc5ftc.jpg
Jpg, 61.85 KB, 600×600 - Click the image to expand
edit Find source with google Find source with iqdb
7_7XDvc5ftc.jpg
Чем можно заставить логиниться приложение на сайте через браузер, а потом ходить по данным сессии? Например на тот же exhentai.org Ручками куки теребить неудобно.
>> No.45734 Reply
>>45732
Не понял, тебе нужно симетировать логин через браузер, а потом использовать полученные куки? Или просто хочешь достать уже готовую сессию сайта из профиля браузера?
Для второго ты можешь вытащить куку из базы браузера, для первого селениум.
>> No.45735 Reply
File: tTS53bjV7Z0.jpg
Jpg, 163.26 KB, 946×845 - Click the image to expand
edit Find source with google Find source with iqdb
tTS53bjV7Z0.jpg
>>45734
Первое. Браузеров много и мне лень искать данные для каждого. Тем более некоторые принципиально не хранят куки.
Спасибо.
>> No.45736 Reply
>>45735
Всё равно непонятно. Если тебе надо автоматический хендлинг печенек, то в requests есть сессии.
Если есть какой-то хитрожопый клиентсайд при логине и надо его прокрутить, то можно через тот же phantomjs, а потом подсунуть печеньки тому же requests.
мимодил
>> No.45737 Reply
>>45736
Да я сам понял, что усложняю себе задачу, когда про requests вспомнил.
>> No.45889 Reply
File: py.png
Png, 62.86 KB, 714×722 - Click the image to expand
edit Find source with google Find source with iqdb
py.png
Привет опять, анаконды. Давно не виделись.
Третий вопрос: что всё это значит (на пике)?
>> No.45891 Reply
>>45889
Что непонятного? В никсах так можно делать исполняемые скрипты. Если первая строчка начинается с #!, то она запускается на выполнение и ей на stdin скармливается остальное, т.е. код скрипта.
>> No.45892 Reply
>>45891
Я предупреждал, что вопросы будут глупые.
Перечитал первое предложение с пика и всё понял. Спасибо.
>> No.45958 Reply
Изучаю Питон 3. Решил учиться на информационную безопасность. Но тут оказалось, что все годные гайды/книжки/курсы используют именно вторую версию. "От-така хуйня малята."(с)
Какие подводные камни? "Переучиваться" на вторую не хочется. Или все-таки разницы между версией особой-то и нет? Что делать? Помогите, няши.
>> No.45959 Reply
>>45958
Работай с тем, что есть. Они не на столько уж разные, чтобы надо было что-то переучивать. Со временем научишься видеть чисто py2 или чисто py3 строки в коде.
Прочитай про самые явные различия: юникод (py2 str == py3 bytes, различия open()...), range/xrange, старый стиль классов во втором.
Про старый/новый стиль классов по началу можно не углубляться, а просто в питоне втором определять классы как `class MyClass(object):` - наследование от object включает новый стиль.
>> No.45960 Reply
>>45437
В cmd та же ерунда. "Не является командой". Отдельный pip.exe не нашел. Вообще написано что моя версия питона 3.5, поставляется со встроенным пипом. Переустановил питон, ничего не поменялось. Ни..., не понимаю.
>> No.45961 Reply
File: Screenshot_2016-07-03_20-20-17.png
Png, 167.23 KB, 700×565 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot_2016-07-03_20-20-17.png
>>45960
Целый месяц провозился, да?
>> No.45968 Reply
http://pastebin.com/raw/L4dUE3xA

Анон, как половчее получить второй айтем в Прекрасном Супе 4? Мне нужны все теги айтема, чей тег id равен нужному мне. id - это типа название тега, я просто мастер названий.

Примеры того, как это могло бы выглядеть:
soup.id[456].parent
soup.item[soup.id == 456]
soup.find('id', '456').parent

Как-нибудь в таком стиле можно? Если нет, то как обычно вообще делается?
>> No.45970 Reply
>>45968
Доки кто читать будет?
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#find
soup.find(item, id=456)
>> No.45972 Reply
>>45970
Это не то.
>> No.45973 Reply
soup.find('id', string=456).parent

Во-о, подобрал правильный синтаксис.
>> No.45975 Reply
>>45968
tree.xpath('//id[text()=456]/..')[0]
>> No.45995 Reply
>>45961
Провозился, только не с этим :(
Вчера же еще смотрел, там не было этого, а при установке пипа пробежала полоса загрузки, столбец красных строк и абзац желтых. Попробую по новой.
>> No.45996 Reply
File: Screenshot_2016-07-06_19-49-21.png
Png, 152.24 KB, 805×441 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot_2016-07-06_19-49-21.png
>>45995
> при установке пипа
Я все первым вебинсталлером с https://www.python.org/downloads/windows/ поставил. Только вторую галку внизу отметил руками, все другие были проставлены.
>> No.45997 Reply
Я, господа, категорически не понимаю зачем на шинде ставить питон.
>> No.45998 Reply
>>45997
А что надо ставить? Лайнекс в виртуалку и там использовать?
>> No.45999 Reply
>>45998
Ну да, либо дуалбут. Инфраструктурно только в юникс-образных ОСях он норм. Под виндой лучше писать на сисярпе, f# и boo. Вся остальная скриптота типа php, perl, ruby, lua, js также очень сильно завязана на *никсах.
>> No.46000 Reply
>>45999
Оверкилл. Особенно для новичка. С прямыми руками большинство node, lua, php... скриптов спокойно заведутся и на винде. Да и так уже все на блюдечке.
Питон отличный язык, ограничивать себя чисто виндовыми приблудами, только потому что в линэкс он вписывается стройнее смысла мало.
>> No.46001 Reply
>>46000
Большинство тривиального пойдет, не пойдет то, что надо конпелять, хотя можно попытаться с анальными плясками, или то, что использует какие-то механизмы никсов, как то всякие сетевые и асинхронные штуки.
В принципе, можно перекатиться на вагрант если прижмет, оверхед у него минимальный и изучать минимум.
мимо
>> No.46002 Reply
>>46001
На не-линуксах вагрант провайдится через виртуалбокс, а это значит будет проседать производительность как минимум на 20%. Самые легковесные провайдеры вагранта - это lxc и docker, а они работают исключительно на линуксе.
>> No.46003 Reply
>>46002
> как минимум на 20%
Откуда инфа?
> Самые легковесные провайдеры вагранта - это lxc и docker
Очевидно, там другой принцип работы.
>> No.46004 Reply
>>46003
Не помню откуда инфа, где-то в инете читал что даже если использовать распоследние процы с наихардварнейшей виртуализацией, то всё равно будет просадка порядка 20%. У меня например на i5-3210M на глаз раза в два проседает, ваще нихера не комфортно.
>> No.46005 Reply
>>45999
Наркоман.
Нормально питон на винде работает.
>> No.46006 Reply
>>46005
Всем линуксоидам известно, что Питон работает только на GNU/GNU. И исключительно на Убунту.
>> No.46007 Reply
>>46005
Что-нибудь уровня helloworld нормально, чуть сложнее порождает необходимость плясок с бубном, несоизмеримо больших чем установка вб или дуалбута с линупсом.
>> No.46008 Reply
Суп гайз.
Есть один VN-движок, частично написанный на ситоне и похоже каким-то своим загрузчиком (Ren'Py)
Суть в том, что при написании скриптов на питоне, есть необходимость импортировать ренпиевские модули. И при запуске из ланчера все работает.
Однако, если запускать этот же скрипт с консоли то обнаруживаются ошибки импорта уже внутри ренпиевских ситоновских библиотек. Как быть?
>> No.46009 Reply
>>46008
Из очевидного - импортируешь в третий питон модули второго.

Щито за ошибки-то? Пости на ебин.
>> No.46010 Reply
>>46007
Scipy/numpy, matplotlib, etc. - для всех есть пресобранные пакеты. Twisted, torando, gevent, asyncio - все тоже заводится. Не говоря уже о более простых и чисто питоновских скриптах.
Или все что не нужно обязательно компилировать или не привязано к никсовым вызовам это для тебя хеллоуворлды?
>> No.46019 Reply
Напомните, аноны, зачем мне писать elif, если можно написать if?
>> No.46020 Reply
>>46019
Последующие элифы исключаются при успехе предыдущего кондишна, серия ифов будет проверена вся, ещё и может быть выполнена вся, если идёт проверка на какое-то обобщаемое условие (иф фуу == 101, элиф фуу > 100, элиф фуу положительно). Совершенно разные вещи, разберись обязательно, иначе Гвидо лично плюнет тебе в рожу за говнокод.
>> No.46022 Reply
>>46020
Понятно. Огромное спасибо тебе!
>> No.46028 Reply
>>46007
> чуть сложнее
Например?

Создайте кто-нибудь новый тред, а то мне нельзя. И не забудьте картинку со змеёй.
>> No.46030 Reply
Новый >>46029
>> No.46043 Reply
>>46000
У меня видимо руки не те. Помню был когда то эникейщиком. Условно поломка в компе чинится нажатием кнопок А и Б. Раз нажмешь - ничего, два - ничего, 10 раз ничего. Идешь за начальником админом. Он делает то же самое и с первого раза всё запускается.


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 ]