[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]

Ответ в тред 37139. [Назад]
 [ Скрыть форму ]
Имя
Не поднимать тред 
Тема
Сообщение
Капча Капча
Пароль
Файл
Вернуться к
  • Публикация сообщения означает согласие с условиями предоставления сервиса
  • В сообщениях можно использовать разметку wakabamark
  • На данной доске отображаются исходные имена файлов!
  • Разрешенные типы файлов: video, music, code, archive, pdf, text, flash, image, vector
  • Тред перестает подниматься после 500 сообщений.
  • Треды с числом ответов более 100 не могут быть удалены.
  • Старые треды перемещаются в архив после 40 страницы.

No.37139 Ответ
Файл: -.jpg
Jpg, 69.48 KB, 1280×720 - Нажмите на картинку для увеличения
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 Ответ
С третьего раза таки запилил.
>> No.37143 Ответ
>>37140
То-то я смотрю счётчик скачет, а постов не видать.
А вообще я тут >>37133 имел ввиду, что змею надо на второй пик более графонистую
>> No.37146 Ответ
>>37143
black python?
>> No.37148 Ответ
Файл: -.png
Png, 64.03 KB, 672×406 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
-.png
3D yoba version
>> No.37150 Ответ
>>37148
Я надеюсь, эта пикча была отрендерена программой на питоне, а то иначе как-то не кошерно было бы.
Как же питон развращает. Сел сейчас юзерскрипт писать на жс, ебучие скобки эвривее, точку с запятой не поставил - обосрался, итерирование через задницу, охуеть вообще.
>> No.37151 Ответ
>>37150
Coffeescript?
>> No.37152 Ответ
>>37148
> ебучие скобки эвривее
Лишп не пробовал?
>> No.37156 Ответ
>>37152
Не надо меня синтаксисом лиспа пугать, там они вполне уместно смотрятся, хотя и не шибко читабельно в итоге. Для си-подобных языков же синтаксис питона - лучшее, что придумало человечество.
>>37151
Он уёбищный какой-то, вы уж меня извините. Я вот смотрю пример кода у них и он ни разу не шибко-то читабелен, несмотря на закос под питон.
>> No.37157 Ответ
>>37156
А я не пугаю, не надо скобок бояться.
>> No.37158 Ответ
>>37156
Это вроде больше закос под руби, насколько я понял. Хотел же без скобок, ёлы палы? Там можно просто вообще опускать скобки просто у любой даже пользовательской функции в списке параметров. И никаких точек с запятой. Тобишь вместо
f(x);
пишешь
f x
>> No.37387 Ответ
Файл: getPics.py
Python, 2.68 KB, 87 строк - Нажмите на картинку, чтобы скачать файл
view edit
getPics.py
Не туда написал, но не суть.
Ловите новый скрипт от меня. На этот раз мы шерстим борду и выкачиваем из неё все файлы.
Даёшь паки пикч :3
>> No.37389 Ответ
>>37387
Почему ты не хочешь пользоваться батарейками? Есть же православные requests, grab.
>> No.37392 Ответ
>>37389
Видимо потому что я не бидонщик.
Мне ближе Си, а это я надёргал с интернета различных реализаций и скомбинировал так, как мне удобно.
Работает жи.

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

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

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

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

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

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

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

Сори проглядел пути.
>> No.37437 Ответ
>>37436
Ах да, ещё в планах допилить для получения тредов из архива и с old.dobrochan.com
Потом можно другие доски подключать потихоньку.
>> No.37442 Ответ
Файл: 1383657097752.jpg
Jpg, 646.66 KB, 2048×1536 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1383657097752.jpg
>>37427
Ну ты прям, ангел спаситель. Тоже сначала думал применить MySQL, но у меня ОЧЕНЬ туго со взимодействие с базой данных. Так то что ты говоришь , кошерно ,да? Просто хотелось сделать что то своими ручками, а то куда ни кинься - работа через фреймворк. Не чувствуешь вкуса жизни. Буду гуглить.
   В бубунте sqlite в коробке нет.
>> No.37443 Ответ
>>37442
> В бубунте sqlite в коробке нет.
Ну так бубунта и не линукс, еси чо.
>> No.37444 Ответ
>>37442
Ох уж эти жизневкусцы. Придумай задачу, где тебе придётся использовать SQL-запросы даже через фреймворк, потому, что готовые методы ORM всё равно не покрывают весь SQL. Исследуй, какие и как идущие через фреймворк запросы работают и оптимизируй. Будет тебе вкус.
>> No.37445 Ответ
Файл: 02.jpg
Jpg, 324.24 KB, 980×396 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
02.jpg
>>37443
Мой пукан разорвало в клочья, если чо.
>>37444
Сэр,так точно,сэр. Форум, кстати, отлично подходит для того, что бы все делать через ээ MySQL. Спасибо моему ангелу-дилеру.
>> No.37446 Ответ
>>37444
ORM и не обязан покрывать весь sql, к тому же весь sql есть только в книжках про весь sql, в реальных проектах используют лишь малую необходимую часть.
>> No.37450 Ответ
>>37446
Читай не только пост, но и к чему он написан.
>> No.37468 Ответ
Пытаюсь в пример 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 Ответ
>>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 Ответ
>>37471
http://pastebin.com/iVsQJC9N поправил.
url подставляются, и вместо response.deliverBody должно быть value.deliverBody. Не работает программа написанная по этому примеру, поэтому запостил отредактированный пример и пару раз ошибся. Работает без ошибок, просто неправильно, так что логирование не поможет. Даже известна(скорее всего) проблема: deliverBody(BeginningPrinter(finished)) в цикле вызывается заново каждый раз.
>> No.37477 Ответ
>>37471
Вот окончательный вариант http://pastebin.com/fKSFcqe0
Работает если в листе одна ссылка, но печатает 'deferred list' и висит если 3, и не выдает никаких ошибок.
Через getPage получается паралельно скачать все 3 ссылки, а через Agent нет. Где ошибка?
>> No.37478 Ответ
>>37477
покажи определение класса DeferredList
>> No.37479 Ответ
>>37478
Почему оно не должно печатать 'deferred list'? вся малина начинается после run.
Из предположений какой-то из этих урлов не отвечает, коннект не рвется и приложение висит.
>> No.37481 Ответ
>>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 Ответ
>>37481
Что самое странное, с двумя url все происходит нормально, но с тремя получаю таймаут.
С konachan.com загружаются три страницы параллельно, без всяких ошибок. В чем здесь дело?
>> No.37513 Ответ
>>37481
я понял что он библиотечный и тем не менее прошу его показать. Возможно сервер держит соединение.
> > откуда берется этот таймаут
скорее всего внутри библиотеки значение по умолчанию.
>>37501
Пробовал все комбинации урлов? Может сбоит какой-то один?
>> No.37521 Ответ
>>37513
https://github.com/twisted/twisted/blob/trunk/twisted/internet/defer.py#L751
По одному/двум за раз все скачиваются. Точно не сбоят, треды открываются браузером нормально.
>> No.37531 Ответ
>>37521
Браузер обрабатывает кучу случаев.

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

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

и не мучайся.
>> No.37535 Ответ
>>37531
Нужно паралельно, поэтому использую twisted. Такая проблема только с ычаном, с nowere.net и konachan.com паралельно загружаются страницы, без ошибок.
>> No.37542 Ответ
>>37535
Если у тебя там не тысячи паралельных запросов, то:
from multiprocessing.pool import ThreadPool
>> No.37549 Ответ
Файл: 1C_programer.jpg
Jpg, 105.36 KB, 541×584 - Нажмите на картинку для увеличения
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 Ответ
>>37542
Ради одной ошибки менять вобще все(не работает только на ычане)?
А если я там уткнусь куда-нибудь, переходить на другую либу?
>> No.37555 Ответ
>>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 Ответ
>>37550
Альтернатива ходить логировать внутренности twisted найти где в нем возникает ошибка и исправить ее. Скорее всего понадобиться отладчик и куча времени на изучение внутренней логики. Но решать тебе.
Вот этот >>37555 достойный господин на мой взгляд все правильно написал.
>> No.37590 Ответ
>>37549
> > Почему когда вызываешь какой нибудь класс без "()" в конце показывает участок памяти
потому что это участок памяти.
> > В общем вопрос как питон устроен на низком уровне и если я достигну сатори и пойму как он работает на низком уровне, я буду лучше понимать как работают классы
посмотри на код интерпретатора http://hg.python.org/cpython/file/b743d709b93b/
нет как работают классы от этого ты лучше не поймешь.
> > Желаю материал после которого я буду точно знать что такое класс и объект класса.
объясняю на пальцах.
Представь что ты повар. У тебя есть рецепт по которому ты готовишь блины. Так вот рецепт это класс. А блины это объект класса. Уловил суть? Класс - описание того что должно быть в объекте.
Объект реальная сущность с которой ты можешь взаимодействовать.

Отпишись понял ли?
Потому что есть некоторые моменты которые объясняются после того как ты поймешь это.
>> No.37591 Ответ
>>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 Ответ
Питонобоги, подскажите.
Из параметра беру имя файла, но если в нем присутствует кириллица - при попытке открыть замещает кириллицу на знаки вопроса и ругается. Пробовал всячески менять кодировку но безрезультатно.
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 Ответ
>>37603
Похоже не в питоне дело.
Запускаю из такого батника:
"python.exe" "1251-to-utf8.py" %1
У винды локаль английская.
Пробовал chcp перед запуском скрипта но не помогло.

Олсо если кому интересен мой скрипт то там ошибка:
> newname = filename+"utf8.cue"
newname = filename[:-3]+"utf8.cue"
>> No.37606 Ответ
>>37604
os.path.basename
os.path.splitext
>> No.37607 Ответ
Файл: 1392234587009.jpg
Jpg, 21.71 KB, 512×383 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1392234587009.jpg
>>37590
> объясняю на пальцах.
> Представь что ты повар. У тебя есть рецепт по которому ты готовишь блины. Так вот рецепт это класс. А блины это объект >класса. Уловил суть? Класс - описание того что должно быть в объекте.
> Объект реальная сущность с которой ты можешь взаимодействовать.
Кажеться понял. Класс- матрица которой шлепают, например, саморезы. Конструктор класса делает длину самореза,  шаг  резбы и т.д.
>>37591
Так, почитаю на досуге.
Спасибо ребята за ответы.То есть не столь важно как все работает на низком уровне?
>> No.37608 Ответ
>>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 Ответ
>>37607
Инкапсуляция, наследование, полиморфизм - основные принципы ООП. Суть:

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

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

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

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

может ли кто-нибудь дать мне пример питонокода, получающий кириллицу из консоли из параметра?
>> No.37620 Ответ
>>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 Ответ
>>37603
>>37620
это просто пушка: чтоб скрипт заработал, пришлось поставить русскую локаль, в результате чего надобность в скрипте отпала.
>> No.37622 Ответ
>>37620
Зачем мне твой скрипт, когда есть iconv.
>> No.37665 Ответ
Файл: 314n_org.png
Png, 21.35 KB, 1485×1038 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
314n_org.png
Аноны, пожскажите как можно вывести картинку в консоли? Пока получается только пикрелейтед. Можно ли его улучшить?
>> No.37668 Ответ
>>37665
Непонял. Картинку в текстовую консоль?
Тогда можно только ASCII символами отобразить, других вариантов нет.
>> No.37692 Ответ
>>37665
Погляди на libcaca. Может оно что-то умеет.
>> No.37712 Ответ
Файл: l1048755889.jpg
Jpg, 62.51 KB, 604×519 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
l1048755889.jpg
Я дико извеняюсь, но я видать тупой. Объясните мне за дискрепторы классов. Что это такое, и зачем оно мне надо?
   Если серьезно вообще не могу понять что это такое. Изменяют объект класса на ходу? Дают доступ к методам метакласса породившего класс из которого сделали объект класса? Это превращает код в труднопонимаемый код? Или просто я труднодогоняемый?
   Дайте ссылки где на пальцах объясняют за жиз... эээ за дискрепторы, декораторы , super.
>> No.37714 Ответ
>>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 Ответ
>>37668
Угу, в консоль.
>>37692
Точно, и как я про неё забыл? Это же то, что доктор прописал! Правда какие-то разрабы озабоченные. Названия их продуктов: libcaca, libpipi, toilet...

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

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

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

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

Допустим есть такой класс
class T(object):
    d = {}
Я хочу, чтобы можно было писать так
class D(T):
    d['fgh'] = 123
Это вообще возможно?
>> No.38707 Ответ
>>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 Ответ
>> No.38709 Ответ
>>38707
>>38708
Спасибо.
>> No.38722 Ответ
Как создать символьную ссылку? Пробовал subprocess, os.symlink - получаю нерабочую ссылку. Имя файла с пробелами. Пробовал заменять через имя.replace(' ', '\\ ') - не работает.
>> No.38723 Ответ
>>38722
https://docs.python.org/3/library/os.html?highlight=link#os.symlink
УМВР, с пробелами и без.
Может ты "делаешь что то не так?"
>> No.38727 Ответ
>>38723
Можешь попробовать в python 2.7.3?
>> No.38728 Ответ
>>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 Ответ
Файл: 1935251_original.gif
Gif, 174.48 KB, 800×575 - Нажмите на картинку для увеличения
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 Ответ
>>38733
Не понял что делает твоя процедура, а для неопределённого количества аргументов есть *.
def foo(*список_переданных_аргументов): pass https://docs.python.org/3.4/glossary.html#term-parameter
>> No.38838 Ответ
Анон, по работе надо установить BioPython, но для него сначала нужно установить numpy.
Я обычный юзер с виндовсом и понятия не имею, что там (https://pypi.python.org/pypi/numpy) написан в инструкциях по установке. Есть ли какой-нибудь универсальный способ, как можно подключить библиотеку из консоли или какие-нибудь установщики библиотек?
Как вы вообще подключаете новые библиотеки?
>> No.38840 Ответ
>> No.38843 Ответ
>>38838
Есть готовые сборки питона. Там есть numPy, sciPy и много чего еще.
Вот, например: https://www.enthought.com/products/epd/free/
А лучше погугли, их довольно много.
>> No.38844 Ответ
>>38722
Слеши не перепутал опять?
>> No.38847 Ответ
>>38838
У activepython есть пакетный менеджер, там довольно богатый набор.
>> No.38848 Ответ
Файл: Untitled.png
Png, 34.30 KB, 802×389 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Untitled.png
>>38847
Проверил сразу.
>> No.38902 Ответ
Какую штуку я нашёл.
http://www.lfd.uci.edu/~gohlke/pythonlibs/
>> No.38910 Ответ
Файл: worm.py
Python, 2.04 KB, 69 строк - Нажмите на картинку, чтобы скачать файл
view edit
worm.py
Анон, почему не работает петля?
Программка должна по клику рисовать червяков, которые расползаются в разные стороны.
Собственно нарисовать червяка не составило проблем, а заставить его двигаться не получается. Я правильно использую after?
Заменить root.after на self.root.after не помогло.
>> No.38923 Ответ
Файл: -.png
Png, 21.87 KB, 1086×609 - Нажмите на картинку для увеличения
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 Ответ
>>38923
Что это такое?
Какой-то метод, выводящий исполняемый код строчка за строчкой? trace или не он?
>> No.38932 Ответ
>>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 Ответ
>>38932
Ясно. Спасибо большое.
А почему ты перетащил worms = []. Это из разряда правил хорошего тона?
И таки как убрать скобки из-под self.contworm() помогает? Это же функция, разве там не надо скобок?
И я считал, что root.after если ведёт в саму же функцию, то приводит к бесконечной рекурсией.
>> No.38938 Ответ
>>38933
> Это из разряда правил хорошего тона?
Да. Три раза перечитывал def click(), ища там определения worms.
> И я считал, что root.after если ведёт в саму же функцию, то приводит к бесконечной рекурсии.
Вызов (со скобками) функции, в теле самой функции, приведёт к бесконечной рекурсии.
А передача функции, как параметра root.after, в теле функции, приведёт к бесконечному циклу (что в данном случае и требуется).
>> No.38964 Ответ
http://www.pythonchallenge.com/
10/10 gospodi 10/10
Вообще непосредственно к питону отношение минимально, но требуется как минимум хорошая поддержка строк.
>> No.38965 Ответ
>>38964
А впрочем нет, таки предполагается использовать кучу других питоновских библиотек. Хотя это всё больше переходит в ковыряние байтов, нежели непосредственно программирование.
>> No.38966 Ответ
>>38964
С какого задания там начинается Питон?
>> No.39290 Ответ
есть 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 Ответ
Файл: hipowl.gif
Gif, 11.46 KB, 249×318 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
hipowl.gif
>>39290
Очевидно же.
>> No.39294 Ответ
>>39291
Я что-то слышал про регэкспы, но я ньюфаг в программировании, что по этому можно посмотреть?
>> No.39295 Ответ
>>39294
Следуй за совой, самая годная книга. В питоне тот же pcre.
>> No.39296 Ответ
>>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 Ответ
>>39296
открой файл и for для хэндла.
>> No.39298 Ответ
>>39297
Не понял.
>> No.39299 Ответ
>>39298
with open('filename.txt') as fh:
    for line in fh:
>> No.39302 Ответ
Когда я читал про питон, меня пугали лямбда-выражения, но потом я успокоился, когда понял, что если кто-то вложил друг в друга кучу лямбда-выражений, значит он - идиот, не заботящийся о читаемости кода.
>> No.39308 Ответ
>>39302
> что если кто-то вложил друг в друга кучу лямбда-выражений, значит он - идиот, не заботящийся о читаемости кода.
каррирование
>> No.39326 Ответ
>>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 Ответ
Файл: ici.jpg
Jpg, 161.72 KB, 600×631 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
ici.jpg
>>39326
Я из-за разметки сломал indentation.
>> No.39329 Ответ
>>39326
Разделяются пробелами, но в самых значениях тоже пробелы могут быть, не?
Эти скобочки и кавычки какбе намекают. Так что халтурка.
>> No.39330 Ответ
>>39329
> Разделяются пробелами, но в самых значениях тоже пробелы могут быть, не?
Нет. Замечание резонное, но только в общем случае: у нгинкса формат без пробелов. Нужно ценить собственное время и не тратить его на псевдогенерализованные решения.
Но, если бы такой фичи не знал, на регексал бы.
>> No.39331 Ответ
>>39330
В догонку: Регекс будет работать медленнее, чем разделение по пробелам. А в масштабах лог-файлов это критично.
>> No.39332 Ответ
>>39330
Ну в юзерагенте точно же пробелы есть.
>> No.39333 Ответ
>>39331
Не очень убедительно. http://pastebin.com/JzhBsjNi
В питоне не знаю как забенчмаркать, лол.
>> No.39335 Ответ
>>39332
А здесь его нет.
>> No.39336 Ответ
>>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 Ответ
>>39336
А если с re.compile?
>> No.39338 Ответ
>>39337
То не будет вот этой строчки
 38382823   29.583    0.000   29.584    0.000 re.py:273(_compile)
Я её не считал.
>> No.39339 Ответ
>>39338
А, ну да. Получаем 25% проседания на перле и 50% на питоне.
Можно бы ещё похакать саму регекспину, конечно, но уже лениво, лол.
>> No.39341 Ответ
>>39339
Ну, и в перле и в питоне это regex лишь обвязка на C функции, так что скорее всеге перл тоже около 40 процентов (нужно тоже cProfile гонять на мгновенно доступном текстовом файле).
Просто regex - это более универсальное решение для парсинга. Хотя, в ситуации с наличием пробелов в юзерагенте, всегда можно выполнить items[-2] (другими словами, захватывать с конца).
Я очень люблю спорить в интернете, так что спасибо за дискуссию :3
c:счастливые
>> No.39356 Ответ
>>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 Ответ
Файл: shit-just-got-real.jpeg
Jpeg, 7.91 KB, 500×280 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
shit-just-got-real.jpeg
Господа питонисты, а поясните за асинхронный питон. Куда гуглить, где применяется, что читать\писать. Сам пока только торнадо начал тыкать, план работ совершенно неясен.
>> No.39398 Ответ
>> No.39537 Ответ
>>39381
Отрицание дерьма.
(√(-shit))² = (√((-1)(shit)))² = (√(-1)√(shit))² = (i√(shit))² = i²(√(shit))² = -shit.
Добавьте минус перед скобочкой.
>> No.39579 Ответ
>>39537
Там комплексное дерьмо возводится в квадрат.
>> No.39642 Ответ
Я собрал киви под ведро. Хз с какой попытки. И понятия не имею, чего ему раньше не хватало.
>> No.39651 Ответ
Файл: L0a3GTH.jpg
Jpg, 960.75 KB, 2560×1440 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
L0a3GTH.jpg
Анон, подскажи пожалуйста какой-нибудь однодневный курс/мануал чтоб поправить спектр плохих привычек питона?
>> No.39653 Ответ
>>39651
О каких плохих привычках питона идет речь?
>> No.39659 Ответ
>>39653
Возможно о таких:
http://acmonette.com/here-there-be-pydras.html
"here-there-be-pydras.html" - говорящее название
>> No.39665 Ответ
>>39659
Ну так в доках прямо говорится, что это темная магия и вы не хотите перегружать этот метод.
>> No.39747 Ответ
>>39653
Ну например я с большим фанатизмом пихаю все в один файл и не знаю как правильно разбивать код, ненавижу кросс референсы (или в каждом файле импортировать каждый другой файл и не париться?).
Названия переменным даю не ахти.
Часто изобретаю велосипеды.
Много глобальных переменных.

Это что-то вроде антипаттернов вроде, знаю, плохо, а как лучше сделать - хз. Глаза разбегаются.
>> No.39749 Ответ
Файл: u8.jpeg
Jpeg, 35.59 KB, 450×360 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
u8.jpeg
>>39747
Антипаттерн токо глобальные переменные. Излечивается за полгода-год общения с ирлонгом, проверено.
>> No.39874 Ответ
Файл: 1404846385071.png
Png, 266.08 KB, 553×399 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1404846385071.png
Как правильно наследовать часть методов базового класс?
Например мой класс наследует класс А, и при этом мне не нужны все атрибуты из А - нужна только часть. Можно при создании экземпляра моего класса в init удалить ненужные атрибуты - но это похоже на костыль. Можно ли как-нибудь определить класс с частью атрибутов от базового?
>> No.39877 Ответ
>> No.39878 Ответ
>>39874
Выдели нужную тебе часть класса A в отдельный класс и инкапсулируй её в класс A и в твой класс. Если класс A написал не ты, или тебе нельзя его править по другим причинам - смирись, наследуйся от него и жри говно.
>> No.40397 Ответ
>> No.40407 Ответ
>>39874
> наследует класс А, и при этом мне не нужны все атрибуты из А - нужна только часть
Значит ты неправильно используешь наследование. Наследование, это отношение "является", а у тебя твой класс не является A. Используй отношение "содержит". Как и показал >>39877
>> No.40411 Ответ
Здравствуйте, доброкодеры!
Не могли бы вы, пожалуйста, на простом примере написать, как делать системы с плагинами на setuptools (http://pythonhosted.org/setuptools/pkg_resources.html#overview)?
Хочу запилить прогу на Python с плагинами, при этом плагины предполагается размещать в отдельных модулях.
Заранее большое спасибо!
>> No.40412 Ответ
>>39651
М. Фаулер "Рефакторинг".
Или посмотреть на YouTube какой-нибудь курс по рефакторингу Python-приложений. Думаю, там должны рассказать основные code smell'ы.
>> No.40415 Ответ
>>37139
Собственно проблема:
pkg_resources.DistributionNotFound: sqlalchemy-migrate
При этом при вводе pip freeze sqlalchemy-migrate таки есть в списке пакетов. Что не так? На шиндоусе все нормально работает.
>> No.40543 Ответ
Файл: Copy-of-2LList.py
Python, 4.66 KB, 157 строк - Нажмите на картинку, чтобы скачать файл
view edit
Copy-of-2LList.py
Анон, выручай.
Я хочу сделать сортировку вставками для двунаправленного списка.
И вот всё бы хорошо, да только последний элемент в списке не хочет сортироваться.
И что странно, когда я вырезаю этот последний узел, он имеет и данные, и ссылки вперёд-назад. А потом предаю его значение функции для вставки узлов, и он превращается в Nonetype без данных и без ссылок.
В чём причина?
Надеюсь, ты поймёшь, что к чему в моём коде. Я там даже принты поставил везде-везде, чтобы следить за ходом сортировки.
>> No.40544 Ответ
>>40543
> передаю его значение
> передаю его самого
>> No.40545 Ответ
>>37139
Аноны, кто сталкивался с установкой GStreamer (и gtk, соответственно) на винду с python3?
Рылся неделю в интернетах, ставил переменные окружения, а всё капризничает и не импортится.
>> No.40618 Ответ
Файл: mangaupdates.jpg
Jpg, 135.77 KB, 923×519 - Нажмите на картинку для увеличения
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 Ответ
>>40618
Тебе нужно запустить sh-файл через терминал на линухе.
>> No.40622 Ответ
>>40619
Был бы у меня Линух, я бы тут нубские вопросы не задавал.
>> No.40623 Ответ
>>40622
Если у тебя винда и ты задаешь вопрос о запуске sh-файла, то это был нубский вопрос.
>> No.40624 Ответ
>>40618
>>40622
Разверни линупсца через vagrant, самый простой способ.
>> No.40656 Ответ
>>40624
Без Линукса питон не работает? Что-то не верится. Потом еще с кривым линуксовым интерфейсом мучиться.

Ладно, сайт поднялся, пойду луркать в гугле, как это все работает.
>> No.40657 Ответ
>>40656
> кривым интерфейсом
> консоль, куда вводишь текст
Не сказал бы.
>> No.40658 Ответ
>>40656
Там не только питон. И вообще оно похоже под бубунту заточено.
Там устанавливается postgre и какие-то приблуды к нему, насколько я понял, плюс всякие мелочи. Потом либы для работы с картинкми. Потом из какой-то жопы вытаскивают пип для питона, потому что видите ли убунтовские репы старые. И только после этого устанавливают либы для питона.
Ах да, ещё там "gfortran", лол. Страшно представить как оно всё работает.
>> No.40684 Ответ
>>40618
Возьми wget и набери "wget -r -p -np адреск"
>> No.40898 Ответ
Файл: TAF5.txt
Text, 677.30 KB, 9634 строк
view edit
TAF5.txt
Файл: all3.py
Python, 2.68 KB, 126 строк
view edit
all3.py
Файл: bbace3ec3391af052...
Jpg, 211.99 KB, 800×600
Ваши настройки цензуры запрещают этот файл.
r-15

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

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

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

Думаю написать для Google App Engine. Читаю книги по django, потом буду читать про GAE.
Какие технологии посоветуете?
>> No.41151 Ответ
Файл: IMG_1086.JPG
Jpg, 241.55 KB, 960×1280 - Нажмите на картинку для увеличения
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 Ответ
>>41151
О, круто, мне ответили, а то уже начал думать, что я в премоде.
Спасибо за ссылки, буду курить маны, только у меня такие вопросы:
Что значит "скафолдить"?
Как сервер будет отправлять клиенту сообщение о приглашении? Слыхал что-то о технологии Comet, но это было давно, а теперь как обстоят дела?
>> No.41159 Ответ
>>41152
> а теперь как обстоят дела
Если старые IE тебя не интересуют (а они тебя не интересуют) - можешь поюзать websocket.
>> No.41161 Ответ
>>41152
Я не совсем отвечал на вопрос, а просто говорил про общее положение дел. У тебя есть два пути разработки:
> для бедных
Пилить бесполезные крестики-нолики на LAMP стеке: шаблонизаторы джанго+jquery, какая-то там ORM поверх Mysql, apache.
> для умных
MEAN-стек условно. С одной стороны продвинутый JS (скафолдинг -> начни гуглить отсюда http://yeoman.io/generators/), с другой стороны restful api поверх монги
>>41159
Доброчую. Для бедных: всякий long-polling поверх ajax. Для умных: http://socket.io/

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

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

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

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

# отступ стал меньше - метод закончился
>> No.41808 Ответ
>>41805
>>41806
Gracias.
>> No.41825 Ответ
>>41717
> > Например, в с++ два механизма множественной наследованности + абстрактные типы - это раз
Лол что, что за два механизма наследования? Пример в студию. Абстрактные типы? Примеры.
> > Два, с\с++ - это языка с weak typing, то есть пропускают некорректные программы, хотя не должны.
Плюсовая строгость в самый раз, где подходит клас родителя там походит и класс потомка. Или ты про шаблоны? Так они призваны давать максимум гибкости. Генерики это совсем другой механизм, если ты их возжелал.
> > Три, класс совпадает с типом, что не дает прогать "на типах".
очень даже дает почитай Александреску и осиль шаблоны.
> > Питон не имеет типов.
Воу воу воу парень, очень даже имеет попробуй typeOf
> > Вообще, проблема ООП в том, что там слишком много бесполезных или сложных паттернов
При написании больших и сложных систем они нужны. И да множественное наследование очень редко требуеться, но поверь когда оно нужно без него как без рук.
>> No.41826 Ответ
>>41806
> Причём табы и пробелы в питоне лучше не смешивать
А и интерпритатор табы вместо пробелов в 99% случаев не сожрет.
>> No.41827 Ответ
Файл: 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
Файл: 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 Ответ
>>41825
Ты не понимаешь ничего из того, что я написал, крестьянин, но даешь советы "осилить шаблоны". Осиль Хиндли-Милнера и F-bounding, чо. (Хотя в одном месте я должен был точней выразиться: вместо двух механизмов наследования, надо было сказать про два стиля наследования: multiple\virtual - я вот не уверен же, что они парсятся по-разному в современных реализация языка)

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

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

А что если я тебе скажу что кресты умеют выводить типы? auto нынче завезли.
> > вместо двух механизмов наследования, надо было сказать про два стиля наследования: multiple\virtual - я вот не уверен же, что они парсятся по-разному в современных реализация языка)
Ну какие два стиля? Вот кто тебе мешает отнаследоваться от 2х абстрактных классов? А затем еще и не от абстрактного класса? Никто.
Кидай примеры кода, что бы я, тугодум крестьянский, лаптем щи хлебающий, тебя понять смог.
> > прогать "на типах"
Показывай код, и говори что он должен делать. И я попробую повторить на ущербных крестах.
>> No.42031 Ответ
>>42030
> не смог вывести типы
В смысле? В смысле, вывести?
> Ну какие два стиля?
Он имеет в виду слово виртуал при ромбовидном наследовании. Если слово виртуал написать или не написать, то оно по-разному работает.
> Показывай код, и говори что он должен делать. И я попробую повторить на ущербных крестах.
Мы и так знаем, что кресты - Тьюринг-полный язык, зачем нам это доказывать.
>> No.42038 Ответ
>>42031
> не смог вывести типы
> > В смысле? В смысле, вывести?
Мне пришлось при объявлении списка сделать вот так l=[1,2,3]::[Int] иначе вот такая штука print $ foldl xor 0 l не работает.
> > Он имеет в виду слово виртуал при ромбовидном наследовании. Если слово виртуал написать или не написать, то оно по-разному работает.
Очевидно что в зависимости от ключевых слов оно по разному работает, если написать private, public, или protected оно тоже будет по разному работать.
>> No.42039 Ответ
>>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 Ответ
Файл: Green_Python_Berlin_Zoo.JPG
Jpg, 2848.35 KB, 3456×2304 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Green_Python_Berlin_Zoo.JPG
Доброкодер, стоит начинать изучение Пайтона с книг Лутца? И что дальше делать, если осилю и пойму?
Собственно, собираюсь изучать как первый язык, значит, мне придется еще и какие-то общие для программирования основы учить кроме него?
с: колбасой пошёл
>> No.42107 Ответ
>>42106
Есть ещё Марк Саммерфилд, учебник с примерами.
И ещё пройдись по каталогу: http://www.dmoz.org/World/Russian/Компьютеры/Программирование
>> No.42108 Ответ
Файл: saber__fate_zero_version_by_getchanceandluck-d4c0j.png
Png, 242.36 KB, 900×768 - Нажмите на картинку для увеличения
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 Ответ
>>42108
Да, мне как-то твой вариант больше нравится. Почитаю Саммерфилда.
>>42108
> Она излишне большая.
Уже вижу. И медленная, видимо, чего я точно не хочу.
Вообще у меня одна из главных целей - дойти до создания программ (плееров, сортировщиков изображений и всё такое). Не думаю, что буду работать программистом.
>> No.42110 Ответ
>>42108
О, спасибо.
Я другой доброкодер, учил в школе и институте С++ на уровне лаб и легких олимпиад. Хочу устроиться Junior Python developer. Получается, копипаста про питон верна?

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

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

>>42110
> Нужно еще чего-то добавить?
>> No.42112 Ответ
>>42110
Питон никогда не используется сам по себе. В требованиях обычно идут разномастные фреймворки, а знание питона - просто побочный навык.
>> No.42113 Ответ
>>42111
>>42112
Вакансий не так много, значит вкатываться нужно будет в web.
Ок, значит нужно ещё MySQL и Django.
Что по ним почитать и сделать? Нужно ли посмотреть javascript?
>> No.42118 Ответ
>>42113
По поводу SQL, начинай с:
http://progopedia.ru/language/sql/
И далее:
http://www.proklondike.com/books/database.html
http://www.progbook.ru/bd/
И так далее.
>> No.42119 Ответ
Я воткнусь с советом читать корифеев (Date, An Introduction to Database Systems как пример), чтобы получить хорошую такую, годную картину нижележащей реляционной алгебры и подход к проектированию БД в нормальных формах и математическую строгость в довесок по желанию. Хотя сам не очень осилил, да. Но >>42118 вместо этого предлагает "Hello world" к десяти разным бд и тонны crap-литературы.
Хотя в подходе "научиться писать запросы" ничего плохого нет, если надо научиться писать запросы. Но я пробежался по ссылкам и там этого тоже нет.
>> No.42120 Ответ
>>42119
> Хотя в подходе "научиться писать запросы" ничего плохого нет, если надо научиться писать запросы. Но я пробежался по ссылкам и там этого тоже нет.
Ну тогда Алан Бьюли, "Изучаем SQL".
>> No.42121 Ответ
Файл: 1355435331992.jpg
Jpg, 394.55 KB, 779×1100 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1355435331992.jpg
>>42120
Спасибо.
>> No.42133 Ответ
Файл: fate_zero_ch_1__summon_saber_by_arrancari-d37s6eq.jpg
Jpg, 604.19 KB, 982×771 - Нажмите на картинку для увеличения
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 Ответ
>>42133
> Sql и прочие мелочи гуглятся довольно быстро
Тем не менее, джойны спрашивают на собеседованиях (две картинки, что я бросил выше — типовые задачи по SQL, и их могут спросить). Иногда спрашивают слишком много, но тогда работодатель ССЗБ, с такими лучше не связываться, а искать следующего.
>> No.42141 Ответ
>>42133
Я уже с этого поста почувствовал всю суровость программирования.
Имеет ли смысл для ньюфага начать сначала с html/css и им подобных, если интересует именно целая картина и возможность запилить кастомный бложик?
>> No.42142 Ответ
>>42141
html и css без вдавания в подробности- это очень просто. Буквально пары дней хватит,но ознакомится обязательно надо. Все же, твой код делает только одну вещь- выдает html и, возможно, жабаскрипт.
>> No.42143 Ответ
>>42141
Это надо задрачивать, если хочешь быть фронтэндщиком, там тот ещё рокет сайенс в последнее время.
А так достаточно знать самый минимум.
>> No.42146 Ответ
Файл: 14195380082990.jpg
Jpg, 120.77 KB, 1280×720 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
14195380082990.jpg
>>42133
Тонны нефти за пояснения. Но я только поступаю в институт.
К сожалению, вылетел и перепоступаю, зато за это время определился что у меня хорошо получается, чем хочу заниматься и меняю специальность.

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

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

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

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

Спасибо, Сейба.
femvax@gmail
>> No.42953 Ответ
>>42133
> Sql и прочие мелочи гуглятся довольно быстро
Аналогично как и твои "Gil в питоне\ итераторы vs генераторы\ различия 2 и 3 питона\ различия jython\cython", хотелось бы заметить.
>> No.43041 Ответ
Почему
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 Ответ
>>43041
Видимо каждый раз когда ты делаешь self.a создается новый объект. Эти объекты внутри себя таки ссылаются на один и тот же метод (т.е. они равны), но это не один и тот же объект.
>> No.43043 Ответ
>>43042
Таки видимо
self.a is self.a # => False
а че
id(self.a) == id(self.a) # => True
? Я думал is только по идентификаторам смотрит.
>> No.43044 Ответ
>>43043
Ох вау. Ну тогда я не знаю.
>> No.43045 Ответ
>>43043
is работает в питоне с очень агрессивными оптимизациями и жутко непредсказуемо. Эту штуку можно использовать только для проверок на None.
blog.lerner.co.il/why-you-should-almost-never-use-is-in-python/
>> No.43046 Ответ
>>43045
Понимаю, понимаю. В определенный момент показалось логичным его прилепить, но не фортануло.
>> No.43048 Ответ
>>43045
А ещё что-то бухтят на пхпшные и джаваскриптовые == и ===. Почему вообще нет скриптовых языков для веба со статическим синтаксисом?
>> No.43049 Ответ
>>43048
Знаете, некоторые печальные даты надолго остаются в памяти людей: 11 сентября, 17 августа, 1917-й год, 1941-й. К ним стоит добавить 1995-й - год появления JavaScript, PHP, Ruby, ну и Java тоже. Кому-то захотелось по-быстрому добавить динамизма в веб-странички, и он за пару недель наговнякал интерпретатор, встроив его в браузер Netscape. Кому-то захотелось оживить свою домашнюю страничку, добавить счетчик посетителей, еще что-то, и он на коленке сделал такой вот изменятель страничек на стороне сервера. О больших проектах тогда никто не думал, personal home page назывался тот изменятель. А когда делаешь интерпретатор, проще всего сделать его на динамической типизации. Это банально очень просто. О системе типов вообще можно не задумываться, не говоря уже об их выводе. К сожалению, на фоне тогдашнего мейнстрима (Си, ранние плюсы, что там еще было?) эти скриптовые языки выглядели очень выигрышно, писать мелкие куски кода на них было намного проще. Что такое нормальная система типов тогда мало кто знал: хаскель был еще в пеленках, ML'и традиционно не выходили из университетов. Так что люди эти скрипты подхватили, стали добавлять все новые функции. Менять систему типов стало поздно. В итоге выросло то, что выросло. С тех пор одна масса людей занята тем, чтобы делать все более сложные интерпретаторы, которые бы не так тормозили, другая масса придумывает 121-й способ добавить в JS типы, а третья на динамических языках пишет и плачет в бложиках о том, как грустно им делается. И проблема не только и не столько в скорости, сколько в maintainability кода и усилиях на необходимые тестирование и отладку при росте проектов. Единственная реальная причина появления динамически типизированных языков - лень и недальновидность авторов. Эволюционно динамические языки - тупиковая ветвь, хоть они и обречены рождаться вновь и вновь просто потому что их делать проще, а делать языки люди любят. Сегодняшняя популярность некоторых из них - случайность, исторический казус, следствие контраста между этими языками и мейнстримом начала 90-х. То, что много идиотов используют идиотские языки, говорит лишь о том, что идиотов много. Сегодня, когда есть языки с нормальной статической системой типов, никаких реальных преимуществ у динамической больше нет. Только я имею в виду действительно нормальные статически типизированные языки - как минимум с параметрическим и ad hoc полиморфизмами, с выводом типов. Не Си с джавой. Хаскель, окамл, скала - такого уровня. У этих конкретных языков могут быть свои проблемы, часто инфраструктурные, но речь сейчас не о них, речь о динамической vs. статической типизации в целом.
>> No.43050 Ответ
>>43048
Питоновскому малопонятному is до пхпшных и джаваскриптовых проделок приведения типов довольно далеко.
>> No.43051 Ответ
>>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 Ответ
>>43051
Где он вакансию публиковал?
>> No.43053 Ответ
>>43051

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

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

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

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

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

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

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

А Сэджвику норм было
Ннно, если я буду работать в методах не с обьектами, а с их копиями, алгоритм будет кушать вдвое больше памяти.
>> No.43089 Ответ
>>43080
А все потому, что нормального конста не завезли.
>> No.43115 Ответ
PyInstaller нормально пакует в общем. И капча "тонкая минимум жена скорость винрарной" одобряет.
>> No.43408 Ответ
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 Ответ
>>43408
> удалять
Мысли шире, анон. Переписывай выжившие элементы в новый список, к примеру.
>> No.43410 Ответ
>>43408
1. Вроде того, стандартных методов строки хватит.
2. Копирую нужные элементы в новый лист.
Не знаю зачем тебе этот странный код, но:
"del el" - ты тут удаляешь переменную el, а не элемент листа a.

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

Можете сказать, насколько понятно, что в этом коде вообще творится? Если всё понятно, то поясните за вычислительную мощность. В пояснении для решивших пишут, что О(mmn*n), где m и n - длина строк и их количество, вполне удовлетворительно. Я не могу все свои вайлы оценить сверху.
>> No.43455 Ответ
Файл: data.txt
Text, 50.76 KB, 900 строк
view edit
data.txt
Файл: contig.py
Python, 2.47 KB, 108 строк
view edit
contig.py

Самое главное забыл:
>>43454-кун
>> No.43457 Ответ
>>43454
> вычислительную мощность
Погугли Ананий Левитин, «Алгоритмы: введение в разработку и анализ», там с примерами есть...
>>43455
> Можете сказать, насколько понятно, что в этом коде вообще творится?
У тебя три вложенных цикла, потому и кол-во действий возрастает быстрее, чем линейно.
> Я не могу все свои вайлы оценить сверху.
Да и не надо там нечего оценивать, сплошные прыжки по оперативной памяти, это и так понятно. Массивы байтов были бы быстрее, за счёт кеша процессора, но в пифоне их нет.
>> No.43483 Ответ
>>43457
Байтоебство в питоне в большинстве случаев не нужно. Когда нужно, есть ctypes. В крайнем случаем вообще внешняя либа на си. Ну и всякие цитоны с нумпи, если все серьезно.
>> No.43513 Ответ
Вопрос общий. Есть у обьекта метод .сохранитьресурснадиск(ресурс) и есть поле .несохрянать_локально, как лучше - проверять поле внутри метода или какждый раз перед его вызовом? Второй яснее, но первый как-то практичнее.
>> No.43514 Ответ
>>43513
Вакаба!
>> No.43516 Ответ
>>43513
Внутри, конечно. Зачем вызывающим знать о таких тонкостях?
>> No.43518 Ответ
>>43516
Метод приватный, так что вызываю его только я, иначе поле .не_сохрянать имело бы мало смысла. У меня вечно такая заморочка, есть функция и есть условие, напрямую к смыслу функции не относящиеся, но почти всегда проверяемое перед вызовом, каждый раз переступаю через себя засовывая все внутрь.
>> No.43637 Ответ
>>43518
> Метод приватный
Давно в Питоне появились приватные методы? Или он у тебя просто не документирован?
>> No.43641 Ответ
>>43637
_ - считается приватным и нормальные люди их не трогают без крайней необходимости. Документировать ты их не обязан. Функции и классы, начинающиеся с прочерка не импортируются автоматически через import *.
__ - приватней некуда просто.
Если же ты о привате в духе с++, то в питоне это просто невозможно ввиду особенностей языка т.к. все доступно через dir.
>> No.43657 Ответ
Надо параллельно вытаскивать большое кол-во толстых файлов из сети на диск, думал писать с использованием asyncio корутин, но боюсь операции записи будут блокировать выполнение. Стоит лучше на тредах делать?
>> No.43658 Ответ
Господа,
виндовс мой дом родной, но ради удобств командной строки таки скачал 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 Ответ
>>43658
Сам это как? В переменной sys.path все пути импорта, можешь туда добавить своё или через переменную окружения PYTHONPATH. Посмотри в директории питона может он с ним pip принес, тогда через pip все ставь, если нет, то пакетный менеджер твоего бубна должен уметь pip поставить.
>> No.43661 Ответ
>>43659
> Сам это как?
В смысле с питоном 3.4, скачанным и установленным под виндовс, а также с теми библиотеками, что я дополнительно устанавливал.
> PYTHONPATH
У меня её нет, если она относится к тем переменным, что можно найти в System -> Adv.S.Settings -> Environmental Variables

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

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

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

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

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

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

На питухоне под шиндоуз это ебля по умолчанию.
>> No.44159 Ответ
>>44158
Веб-морда для фонового процесса.
>> No.44160 Ответ
>>44158
Ну почему? Маленький встроенный веб-сервер на каком-нибудь flask'е отлично получается.
>> No.44164 Ответ
>>44157
Я маленькие штуки делаю на bottle, похож, но проще фласка. Либо на встроенном сервере питона.
>> No.44165 Ответ
>>44164
Еще на webpy в качестве микрофреймворка можно посмотреть. У него и зависимостей совсем нет. Автор только умер, но вроде кто-то еще поддерживает код в адекватном состоянии.
>> No.44240 Ответ
Эх, припекает мне от Чекио что-то. Есть классное илитное решение или куча говнокода. Делаешь говнокодом, смотришь решения, фейспалмишь с себя. Сервис меня третирует! Доставил чувак, который делает всё лямбдами. Такой-то челленж!
>> No.44262 Ответ
Я, вообще, не захожу в /s/, но тут не мог не поделиться. Подходит пять минут назад к принтеру тимлид web-разработчиков, вытягивает лист из принтера HP M125:
- Я, чтобы распечатать этот лист, два дня драйверы принтера на Питоне переписывал.
- А что там?
- Да я хз, баг какой-то, под Убунтой не работает.
- Ты не хочешь им обратно отправить результаты?
- Сука, я их убить хочу.
Я в немом восхищении.
>> No.44263 Ответ
Файл: 0_6a549_50e92771_orig.png
Png, 6.62 KB, 332×238 - Нажмите на картинку для увеличения
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 Ответ
>>44262
Драйвер же не мог быть на питоне?
>> No.44265 Ответ
>>44262
Дык там поди имелись в виду не драйверы принтерного порта, а та херь, которая преобразовывает pdf/ps в протокол конкретного принтера...
>> No.44266 Ответ
>>44265
А может и просто либа генерации пдф от Васяна.
>> No.44267 Ответ
>>44266
Вот это скорее всего. Совсем уже со своим питоном рехнулись.
>> No.44522 Ответ
Файл: 95f952b1c62800d145599b497d25b61d.jpg
Jpg, 174.39 KB, 950×1368 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
95f952b1c62800d145599b497d25b61d.jpg
Ребятки, есть у кого в бумаге эта книга? Новая стоит слишком дорого, может, может кто-то согласится продать дешевле? Или могу обменять на "Операционные Системы" Танненбаума и/или "Unix и Linux. Руководство системного администратора", от Эви Немет и друзьяшек. Пересылку могу оплатить (город Архангельск). Да и вообще, с удовольствием "приму в дар" (и пересылку оплачу), любые книги по теме.
>> No.44525 Ответ
Издательство ДМК выпустило перевод "Fluent Python", http://dmkpress.com/catalog/computer/programming/python/978-5-97060-384-0/

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

>>44522
Отпечатай, лазерные принтеры для того и созданы. Искать в бумаге замаешься, а сканы и pdf приличного качества есть в сети.
>> No.44552 Ответ
>>44522
Неужели это настолько незаменимая книга, что нельзя вот так взять и найти что-нибудь другое? Не верю! Но уже хочу почитать.
>> No.44553 Ответ
>>44552
Марк Саммерфилд очень хорошо пишет, подробно, прям как художественная литература... ну и примеры к книге есть.
Сам я на пифоне не пишу (и вообще не люблю языки без типов), но именно эта книга — одна из.
>> No.44563 Ответ
>>44553
Тащемта с типизацией в Питоне всё окей, это не php какой-нибудь. По крайней мере если ты присвоил переменной число, то при попытке добавить туда строку получишь TypeError вместо преобразования чиста в строку с последующей конкатенацией. Правда присваивать переменной ты можешь что угодно, хоть чёрта лысого.
>> No.44565 Ответ
>>44563
a = type('Chert', (object,), {'hairstyle': 'lisii'})
>> No.44567 Ответ
>>44563
> По крайней мере если ты присвоил переменной число, то при попытке добавить туда строку получишь TypeError вместо преобразования чиста в строку с последующей конкатенацией.
Это не типизация. Это всего лишь не стреляние себе в ногу.
>> No.44568 Ответ
>>44567
Если так думать - то типизация есть только в Agda 2.
>> No.44569 Ответ
>>44568
Типизация хоть в каком-то приемлемом для type level кодинге уровне есть еще в хаскале и скале. В принципе, насколько, я понимаю, шаблоны в плюсах можно использовать для компайл-тайм построения натуральных чисел - то есть гипотетически типизации можно добиться, где хочешь. Так что мне тоже интересно, что следуют понимать под типизацией.
>> No.44573 Ответ
>>44567
Это динамическая строгая типизация. А со своими фантазиями пройдите дальше.
>> No.44599 Ответ
День добрый, заклинатели змей.
Собственно, две проблемы, которые не могу решить упорным поиском в интернетах. Может, тут есть гуру. В обоих случаях использую третий пистон (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 Ответ
Тред не читай, сразу вопрошай.
Хочу освоить Питон, нужно для того, чтобы копаться в исходниках доставшегося по наследству веб-сайта. До этого кодил только на Дельфи (довольно плотно) и поверхностно знаком с Си (на уровне лабораторок среднего второкура, которые я им помогал делать).
С чего вообще начать? Есть какая-нибудь подходящая книга? Копипаста про Питон правду говорит или есть нечто более современное?
>> No.44695 Ответ
>>44689
Зависит от того как написан сайт. Думаю, с твоей базой можно за меньше недели нормально влиться. От себя советую онлайн Dive in Python (3).

Что за копипаста?
>> No.44697 Ответ
>>44695
> Завтра ищешь в интернете книжку Dive into python. Похуй если ничего не поймешь. Затем идешь на python.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию питоньего кода - PEP8, чтобы от зубов отскакивало. Когда напишешь свою первую имиджборду, по пути изучив верстку на html+css, скачиваешь и изучаешь любой питоний асинхронный вебсервер, рекомендую Tornado или Gevent. Как переделаешь имиджборду, чтобы выдавала по крайней мере 5 тысяч запросов в секунду, можешь идти дальше - тебя ждет увлекательный мир хайлоада. Apache Hadoop, сверхбыстрые асинхронные key-value хранилища, MapReduce. Отсос хиккующих выблядков / просто неудачников типа рейфага или сисярп/джава-хуесосов, которые сосут хуй по жизни не заставит себя ждать и уже через пол года ты будешь получать такие суммы, что любая баба будет течь при одном упоминании твоей зарплаты.
>> No.44698 Ответ
>>44695
> Зависит от того как написан сайт.
Криво. Очень криво. Кусками от разных программистов, сменявших друг друга. Вроде Питон 2.5.
>> No.44706 Ответ
>>44697
> всерьез воспринимать пасту с сосача (и мне похуй, если она была написана раньше)
Dive into python - бесполезная хуйня, если это не твой первый язык и в этом случае эта книга пожалуй даже вредна, ибо прививает фанатизм.
Достаточно доков и какого-нибудь python guide for C++ programmers из гугла.
>> No.44718 Ответ
>>44706
Обоснуй.
>> No.44719 Ответ
Файл: asdasda.png
Png, 37.29 KB, 558×357 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
asdasda.png
Спрошу и тут.
Как нужно былор это же делать правильно?
Почему такой простой пример не работает?
Неужели примеры написанные на 3Питоне не будут работать во втором?
>> No.44723 Ответ
>>44719
Третий и второй питонкусы имеют кучу различий, писать сразу под оба это надо уметь.
Конкретно по твоей проблеме: во втором для такого делается raw_input(), а просто input() это "Equivalent to eval(raw_input(prompt))".
>> No.44737 Ответ
>>44719
У третьепитона нет обратной совместимости со вторым. Второпитон же не жрётся интерпретатором третьего. Вот тебе даже списочек изменений: https://docs.python.org/3.0/whatsnew/3.0.html Есть такая вот штука даже для облегчения миграции, но ни разу не пробовал: https://docs.python.org/2/library/2to3.html
>> No.44738 Ответ
>>44737
И чо, есть там какое-то движение в плане миграции? Или так и будут до смерти метаться между 2 и 3?
>> No.44739 Ответ
>>44738
Где там? Большинство библиотек уже поддерживает третий, убунта в новом релизе будет поставлять третий питон по дефолту.
>> No.44775 Ответ
>>44718
Я изучил питон по докам и какому-то гайду для бросающих с++. Какие еще обоснования тебе нужны?
>> No.44780 Ответ
>>44775
> бросающих с++
Бросил?
>> No.44784 Ответ
>>44780
Сорт оф. Просто не нужно нигде было, пишу для себя в основном.
>> No.44828 Ответ
Накидайте годной литературы для освоения языка: подумываю обмазаться.
mimoPhpMakaka
>> No.44831 Ответ
>>44828
Стандартные доки + stackoverflow, при наличии опыта с любым языком этого достаточно.
>> No.44848 Ответ
>>44828
Ну и традиционный Dive into Python, конечно же.
>> No.44878 Ответ
>>37139
Питаноны, подскажите как объединить приложение на wxWidgets+numpy+matplotlib в единый файл, что будет запускаться на любых комьютерах с установленным Python.
>> No.44879 Ответ
>>44878
Тебе типа аналог jar нужен, раз предполагается наличие питона? Единственный вариант это на нужной платформе собрать все зависимости (со всеми их зависимостями) в директорию программы, потом эту директорию зазипать и вызывать по python MyApp.zip.
Структура архива примерно такая:
__main__.py
numpy/
    __init__.py
    ...
...
        
> на любых
На любых не будет.
>> No.44880 Ответ
>>44879
Окей, попробую. Вообще мне нет разницы, архив ли это или скомпиленная программа.
>> No.45007 Ответ
>> No.45069 Ответ
Файл: HDpicsru_7eb65d1d_2497.jpeg
Jpeg, 115.59 KB, 750×600 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
HDpicsru_7eb65d1d_2497.jpeg
Что думаете о panda3d? Кто работал? Какие подводные камни? Стоит ли с ним заниматься?
>> No.45070 Ответ
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 Ответ
Прочитал это:
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 Ответ
>>45073
Фиг поймешь, куча однобуквенных переменных, не оговоренных функций , ошибок в оригинальном этом посте. Сделай обычное дерево типа make_tree(levels, root=None), убедись шо работает (рекурсивный вызов принимает детей), потом добавляй свой shanten.
>> No.45075 Ответ
>>45074
subtract — даёт список узлов (d), которые нужно добавить к root
hand, hand1 — из них получаются какие-то значения, которые хранятся в узлах дерева
>> No.45076 Ответ
>>45075
> http://effbot.org/pyfaq/why-are-default-values-shared-between-objects.htm
Это про мутабельные параметры в определении функции. Не твой случай.

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

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

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

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

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

mylist = []

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

mylist = [x for x in allah if x.endswith('babah')]
>> No.45585 Ответ
>>45584
> Ты вообще не паришься об этом в пиццетоне. Об этом пусть Гвидо думает. Гвидо умный, а ты нет.
А потом почему всё медленно работает. Всё равно в этих скрипто-языках в конечном итоге все начинают разбираться в том, как это всё работает, когда приходится.
>> No.45587 Ответ
>>45585
Ибо скриптовые языки высокого уровня. Выябываться перед одноглазниками на сишке будешь.
>> No.45637 Ответ
Файл: sunfox.jpg
Jpg, 125.98 KB, 760×442 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
sunfox.jpg
На правах рекламы.
>>d/61437
>> No.45701 Ответ
Задача такая. Есть некий файл с музыкой, допустим, формата mp3. Задача состоит такая: я хочу получить из этого файла удобоваримые для себя данные по поводу звука. В идеале это должен быть двумерный массив, где одна "координата" отвечает за время, другая - за частоту, а значение там соответствует громкости. Такое возможно?
>> No.45705 Ответ
Сяп. Что мне нужно знать, чтобы написать оконный граббер для пиксива?
>> No.45706 Ответ
>>45705
Для гуя вначале попробуй обойтись tkinter'ом.
Для работы - requests или любая другая http библиотека. У пиксива вроде есть json апи, но прямые ссылки оттуда брать, кажется, нельзя. Так что в придачу придется знать как разбирать html и составлять логин post http запросы. Для парсинга есть lxml с удобными методами .cssselect (нужен модуль cssselect) или .xpath. Есть еще BeautifulSoup, но считается что он сильно проигрывает по скорости и не имеет каких-либо преимуществ перед lxml.
Можешь еще поставить куда-нибудь ихой официальный мобильный клиент и попытаться выяснить как ходит он.
>> No.45712 Ответ
>>45701
Проще всего с Питоном в качестве фронт-энда для какой-нибудь швабодной консольной программы. Сабпроцессом вызываешь в удобном тебе формате. Но может и годные либы есть.
>> No.45731 Ответ
Файл: 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
Файл: 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 Ответ
Файл: 7_7XDvc5ftc.jpg
Jpg, 61.85 KB, 600×600 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
7_7XDvc5ftc.jpg
Чем можно заставить логиниться приложение на сайте через браузер, а потом ходить по данным сессии? Например на тот же exhentai.org Ручками куки теребить неудобно.
>> No.45734 Ответ
>>45732
Не понял, тебе нужно симетировать логин через браузер, а потом использовать полученные куки? Или просто хочешь достать уже готовую сессию сайта из профиля браузера?
Для второго ты можешь вытащить куку из базы браузера, для первого селениум.
>> No.45735 Ответ
Файл: tTS53bjV7Z0.jpg
Jpg, 163.26 KB, 946×845 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
tTS53bjV7Z0.jpg
>>45734
Первое. Браузеров много и мне лень искать данные для каждого. Тем более некоторые принципиально не хранят куки.
Спасибо.
>> No.45736 Ответ
>>45735
Всё равно непонятно. Если тебе надо автоматический хендлинг печенек, то в requests есть сессии.
Если есть какой-то хитрожопый клиентсайд при логине и надо его прокрутить, то можно через тот же phantomjs, а потом подсунуть печеньки тому же requests.
мимодил
>> No.45737 Ответ
>>45736
Да я сам понял, что усложняю себе задачу, когда про requests вспомнил.
>> No.45889 Ответ
Файл: py.png
Png, 62.86 KB, 714×722 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
py.png
Привет опять, анаконды. Давно не виделись.
Третий вопрос: что всё это значит (на пике)?
>> No.45891 Ответ
>>45889
Что непонятного? В никсах так можно делать исполняемые скрипты. Если первая строчка начинается с #!, то она запускается на выполнение и ей на stdin скармливается остальное, т.е. код скрипта.
>> No.45892 Ответ
>>45891
Я предупреждал, что вопросы будут глупые.
Перечитал первое предложение с пика и всё понял. Спасибо.
>> No.45958 Ответ
Изучаю Питон 3. Решил учиться на информационную безопасность. Но тут оказалось, что все годные гайды/книжки/курсы используют именно вторую версию. "От-така хуйня малята."(с)
Какие подводные камни? "Переучиваться" на вторую не хочется. Или все-таки разницы между версией особой-то и нет? Что делать? Помогите, няши.
>> No.45959 Ответ
>>45958
Работай с тем, что есть. Они не на столько уж разные, чтобы надо было что-то переучивать. Со временем научишься видеть чисто py2 или чисто py3 строки в коде.
Прочитай про самые явные различия: юникод (py2 str == py3 bytes, различия open()...), range/xrange, старый стиль классов во втором.
Про старый/новый стиль классов по началу можно не углубляться, а просто в питоне втором определять классы как `class MyClass(object):` - наследование от object включает новый стиль.
>> No.45960 Ответ
>>45437
В cmd та же ерунда. "Не является командой". Отдельный pip.exe не нашел. Вообще написано что моя версия питона 3.5, поставляется со встроенным пипом. Переустановил питон, ничего не поменялось. Ни..., не понимаю.
>> No.45961 Ответ
Файл: Screenshot_2016-07-03_20-20-17.png
Png, 167.23 KB, 700×565 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Screenshot_2016-07-03_20-20-17.png
>>45960
Целый месяц провозился, да?
>> No.45968 Ответ
http://pastebin.com/raw/L4dUE3xA

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

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

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

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

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

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


Пароль:

[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]