def test_yoba vs class YobaTestCase(unittest.TestCase): def test_yoba(self)...
@fixture def heavy_resource(): ..d = database.open() ..yield d ..d.close() vs def setUp(self): ..self.d = database.open() def tearDown(self): ..self.d.close()
При чём в последнем случае тебе придётся делать наследование везде где нужна эта database, а для подтягивания фикстуры нужен только параметр в функцию добавить.
Далее всякие pytest.parametrize, которые ты будешь колхозить циклами в unittest.
Ещё pytest может запускать твои искаробочные™ unittest-тесты, тебе их даже не нужно переписывать.
Ой, в общем это примерно как спорить с 80-символов-в-строке-ретроградами. На широкоформатных мониторах в 2k18.
Почему a=p1.loc[1,[1]] print (a[1]) выдаёт5, а a[0] - KeyError ?
Series, включая отдельные строки и столбцы, нельзя перебирать как обычные последовательсности, а можно только по известным индексам столбцов/колонок или надо делать переиндексрирование с 0 перед перебором по порядку ?
Почему iloc[1,1] даёт число, а iloc[1,[1]] - Series ?
Здравствуйте, я по учебе сделал домашнее задание на языке Python c применением sklearn. И применил несколько метрик из sklearn. Но, я не знаю как правильно перевести на русский названия этих функций, чтобы записать в отчет, и чтобы было понятно что это за результат получился. Подскажите пожалуйста, как правильно это перевести на русский.
1) explained variance score - тут даже не знаю как это на русский перевести. Помогите, пожалуйста. 2) mean squared log error - я думал, что это "средняя квадратичная логарифмическая ошибка", но загуглил такое сочетание слов и оказалось, что его не существует. Ещё помогите пожалуйста с mean squared log error, как правильно понимать error как ошибку или как погрешность?
https://pastebin.com/RinLLBYH Нашёл вот такой пример на stackoverflow. Почему функция create_menu_item вынесена за пределы класса? Более того, почему, если я её переношу внутрь класса, всё ломается? В частности, pycharm в функции CreatePopupMenu подчёркивает create_menu_item красным и пишет что-то про неразрешенную ссылку (unresolved reference)? Программа запускается, но при попытке вызвать всплывающее меню падает со странным exit code.
У меня есть csv такого формата, из которого нужно подставить значения в формулу hypot(x1-x0, y1-y0, z1-z0) и записать отдельный результат. Как это лучше всего сделать?
>>1135029 >Почему функция create_menu_item вынесена за пределы класса? Автор посчитал её достаточно общей и непривязанной к конкретному классу, вот и вынес.
> почему, если я её переношу внутрь класса, всё ломается? Очевидно, потому что функция теперь стала методом класса, но ты не изменил, ни сигнатуру функции, добавив первым аргументом self, ни строки с вызовом (на self.create_menu_item)
>>1135116 >Как это лучше всего сделать? Прочитать файл и в цикле подставить значения в формулу. В чём у тебя конкретная проблема?
Есть класс. В нем есть длинная лапшичная функция. Внутри функции используется переменная self.Х, переменная класса т.е.. Все это чужой код из библиотеки, к которой я пишу экстеншен.
Мне надо изменить значение этой переменной X, но только для этой одной функции. Т.е. я не могу просто перезаписать ее для всего класса. Как это сделать? Наследовать весь класс, потом копипастить длиннющую функцию и там уже самому менять self.X на local_X? Ну, пока так и сделал, но смотрится странно - копировать функцию на три экрана ради такого мелкого изменения. Есть более питоничный путь?
>>1135173 >Есть более питоничный путь? Изначально не делать >функцию на три экрана
А так, разве что >temp, self.x = self.x, local_x_value >self.method() >serlf.x = temp Ещё можешь попробовать, если есть контроль над точкой вызова, но это убого как-то, ящитаю.
Вообще, если тебе нужно изменить значение атрибута лишь в каком-то одном месте, то велика вероятность, что либо ты как-то неправильно этот атрибут пытаешься использовать, либо автор либы хуёво всё сделал.
>>1135174 >если есть контроль над точкой вызова Через часик пичарм запущу и попробую, спасибо. Функцию эту я не особо копал, но надеюсь она не вызывает других функций этого класса, а то измененная переменная передастся дальше.
Вот еще один подводный камень полного копипаста нашел - если автор либы изменит оригинальный код, а у меня останется старый, то у экстеншена будет непредвиденная багофича.
Сап, собираюсь пилить парсер в связке aiohttp + lxml + Celery + Redis. Суть - раз в минуту опрашивать сайты по списку, сравнивать с инфой из базы и по необходимости её дополнить. Как лучше всего это сделать? Пока есть такая система - aiohttp делает запросы, передает в lxml, там проверяется необходимость обработки. Если она нужна - оставлять здесь же или пихать в очередь Celery? алсо реквестирую годные гайды по асинхронке. Не в стиле это может работать так, скопипасть меня, а это хуйня устроена так
Как быть, кому звонить? Написал в саппорт, саппорт молчит уже третий час. Флагнули после того как ответил в issue левого проекта ссылкой на свой форк, потому что мейнтейнер оригинала не хочет баг исправлять (и принимать PR тоже). Вообще охуеть.
>>1135425 >так не могут сделать >гитхаб Напомнить что эти пидоры банят направо и налево, и вот совсем недавно забанили утекший от Яббла код загрузчика?
Однако пока флагнутый мало того что профиль, репы, форки и гисты скрываются, так еще даже звездочки которые я наставил прячутся. Будто и не регался никогда.
>>1135440 На Falcone сейчас прожект пишем(чисто API-шку для связи сайта и ядра основного), на Tornado года 1,5 назад писал небольшой чатик(вроде ещё для чего-то юзал, но не помню конкретно), для себя чисто. Но ни разу про Falcon и Tornado не спрашивали на собесах, в основном по Flask/Django/Celery/Postgres/GIT.
Где можно почитать про джанговские проекты, которые не по стандарту оформлены, хз как это назвать. Локально поставил проект, а там настройки хранятся в папке systems, приложения в папке application. Обычные команды миграций на создают таблицы определенные в этих аппах. Где про это прочитать можно?
Подожи ебать, то есть если я меняю какую-то переменную в цикле, то она глобально не меняется? А как можно тогда синхронизировать локальные переменные с глобальными?
Пытался найти олимпиадного-программирования-тред -- не нашёл. Поэтому сорян, но запощу сюда.
Задача пикрелейтед.
Я пытаюсь её решить исходя из того, что наибольший кэшбэк можно получить перебором всех сумм покупок к лимиту карты с наибольшим процентом кэшбека (то есть, выбирать те покупки, сумма чисел которых будет наиболее близка к лимиту карты: abs(лимит_карты-сумма_чисел) <-- чем меньше, чем лучше), затем делать так же с оставшимися суммами покупок (которые "не влезли" в лимит самой выгодной карты), но уже к карте с меньшим процентом кэшбэка, и так до конца. И вот тут я застрял, так как я тупой и не могу осилить подобный алгоритм (если он вообще правильный).
>>1135432 В описании напиши, что умеешь, в ссылки добавь гитхаб с очередным бложиком, поизучай бд и поставь фотку на аватар профиля, на которой тебя будут гореть глаза, желательно с какого нибудь митапа-конференции, рычи, двигай тазом сыч без профиля, который говорит за него не нужен, софт скилс очень решает в устройстве на работу
>>1135177 А обработка жирной логикой обладает, необходимо потом обращаться к сайту после проверки страницы? Если да, то я бы ее в отдельный сервис вынес и отправлял задачи в Celery, а если там нужно только значения вытаскивать, то можно и оставить
>>1135516 сортируешь карточки по возможному профиту (процентпорог), для каждой карточки получается задача о рюкзаке. Вес ограничен порогом, стоимость = процентзаполненный вес. Плюс угловые случаи.
сортируешь карточки по возможному профиту (процент x порог), для каждой карточки получается задача о рюкзаке. Вес ограничен порогом, стоимость = процент x заполненный вес. Плюс угловые случаи (товары не могут заполнить карточку).
>>1135550 Задача о рюкзаке, я так полагаю, учитывает лишь значения ниже порога лимита, а мне (как я думаю) нужно самое __близкое__ число к порогу лимита, которое может быть и выше самого числа порога лимита. То есть, вот у нас порог например 100, есть две суммы покупок: 98 и 101, выбираем 101, т.к. оно более близко к 100, чем 98.
>>1134827 (OP) Что по PyQt? Можно ли его брать для своих проектов во время надрачивания и изучения? Или взять PySide? А может нахуй его и обратно сесть в C++ писать на чистой Qt?
>>1135571 Кидаю змеюку в биндинги между либами на крестах с использованием Intel MKL. Развлечение такое себе, но давеча читал на хабре, как в яву пихают ассемблерные функции. Потешился знатно. пиши сразу на си, чо ты
>>1135571 Смотря для чего. Если будешь делать коммерческую прожку, то лучше взять python 3.5 и wxpython 4.0.1 , на виндувсе исполняемый файл где-то 10mb выйдет, если pyinstaller 'om собирать
>>1135591 Не, писать на крестах с интеграцией пайтона ты меня не убедишь. Я лучше наоборот. >>1135592 Хорошо, попробую. В инсталер можно запихать спрайты? Или когда для проэкта напишу установщик с папкой для всех изображений и туда вместе со скачанными через сеть картинками смогу запихать?
>>1135593 По сути у pyinstaller есть несколько опций, можно все в один файл собрать, туда запихаются сама машина python и другие библиотеки, можно сделать чтобы питоновские либы были отдельно, но так дохрена файлов получится, если нужно какие-то файлы отдельно держать например картинки, то можно по старой схеме подключить директорию в самом скрипте:
PySide2 кстати тоже развивается семимильными шагами, 1,5 года назад директор Qt объявил что возобнавляют разработку биндинга для питона, но там лицензия немного хуевей чем у wxpython, если делать коммерческую прожку
>>1135598 >sys.path.insert(0, "C:\myProgDir") То есть таким вызовом просто подключаешь директорию к исполняемому файлу ещё до компиляции в exe? Я думал без проблем можно подключать и когда запихаешь, нужно будет просто иметь при себе эти папки. А я вообще говорил про запихивание картинок в exe. Так понимаю, что с этим проблем никаких. В документации написано, что нужно задавать новую среду. Это прям необходимо?
>>1135604 Нет, я имел ввиду что в эту директорию ты сможешь сложить разное дерьмо типо py скриптов, картинок и других библиотек , но можно этого не делать. Я хз что там за среду нужно задавать. Я просто делаю в консоли
pyinstaller --onefile --noconsole main.py И все дерьмо в один файл собирается, но если нужно в exe добавить различные иконки, картинки то нужно немного подшевелить и настроить пути , нужно немного погуглить будет и посмотреть примеры
Джанганы, моя жепа на кону, подскажите как нормально замутить тестирование знаний пользователей, экзаменационные билеты типа:
Есть список скажем модельки Экзамен
Вопрос ..К экзамену (форингкей) ..вариант1правильно (тру / фэлс) ..вариант2правильно
Ответ ..К вопросу ..вариант1тру ..вариант2тру
И чё мне перебирать цыклом все Экзамен.вопросы__сет, сопоставлять с соответствующимими Ответами, потом сравнивать Ответы с правильными вариантами Вопроса, потом считать скоре=0 если вариант
Привет, анон, очередной манявкатывальщик на связи.
Задрочил фласк, дрочу джангу, встал вопрос - насколько ГЛУБОКО надо понимать фронт? Имеет ли смысл недостажеру воннаби-июню катиться в full-stack или стоит концентрироваться на родимом петончеке?
посоветуйте пожалуйста либу в питоне для работы с книгами, интересует поиск по тексту, номера страниц (на которых, например, было найдено текст), поддержка оглавлений и всего такого.
>>1135859 Электронные книги бывают разного формата. Выбираешь либу под нужный формат и хуячишь. Если "книги" отсканированные то OCR полно, даже апи к гугловскому есть.
Первичный запрос берёт значения - хэш и дату и сравнивает с тем, что есть в Redis, если новее - второй запрос, парсинг и запись в БД + обновление записей в Redis. Новых записей может быть несколько, соответственно, запросов тоже.
>>1135861 нужного формата нет, чем больше тем лучше, так что если есть какая-то либа для чтения хотя бы основных типа .doc, pdf, ebup, то было бы очень здорово.
>>1136040 Дебила кусок, об этом чуть ли не на заглавной странице питона написано. Читать внимательнее надо. Весь тред засираете уроды малолетние тюсвоими тупыми вопросами.
>>1133826 А если для третьего питона переделать, то так оно будет выглядеть? proxy = urllib.request.ProxyHandler({'http': '127.0.0.1'}) opener = urllib.request.build_opener(proxy) urllib.request.install_opener(opener) urllib.request.urlopen(n)
Чуваки, в чем может быть проблема, пытаюсь открыть .py файл в cmd строке путем написания python файлнейм.py но выдает ошибку python: can't open file 'файлнейм.py': [Errno 2] No such file or directory. Вроде при установке питуна галку на PATH поставил.
Совсем ли долбоебизм создавать класс с одним атрибутом? Просто у меня есть очень похожие классы и у них больше атрибутов. Значения будут писаться в файл через генераторы списков.
>>1136133 Я хз, только вкатываюсь, по Луцу я могу из cmd написать python и имя файла и тогда он откроет питон и импортирует файл, а у меня выдает ошибку. Хотя если в cmd написать путь к файлу он откроет питон и откроет файл, но это очен геморно писать путь файла всегда, вся проблема похое в path, сорян ребят за тупость
>>1134827 (OP) Питонач, я совсем дупля не отбиваю под вечер. Смотри есть функция, которая получает массив с вложенными в него массивами и возвращает массив без вложенности (пик1) # in -> [[1,2,3], [1,2,3,4], ...] return list(chain(*results)) # out -> [1, 2, 3, 1, 2, 3, 4] Вопрос в том, как мне сделать добавление этого результата в еще один массив ? Если сделать как на пике 2 на выходе будет [[1,2,3,1,2,3,4]] а мне надо плоский массив
>>1136191 Алсо я посмотрел на asyncio и чёт сомнение меня охватило. Функции прерываются, а значения из них не вытянуть. Только, блять, передавать в другой процесс чтоли, а в этом ставить await'ы сверху бесконечных циклов и надеяться, что дух рандома уровняет всё и запилит мне нормальные ассинхронные задачи?
>>1136206 Двойной чаек тебе. Самый красиво выглядящий варик предложил. я знал про extend, но у меня array-like объект, я думал в нем только необходимый минимум аля append/pop
>>1136142 Нужно добавить еще одну переменную PYTHONPATH в значении - директория с твоим скриптом. Тогда, возможно, заработает как по Лутцу. Но это блядская кустарщина. Обычно каждый скрипт в отдельной папке лежит. Заебешься добавлять. https://duckduckgo.com/?q=pythonpath+windows&ia=qa&iax=qa
>>1136236 Я пока ничего не делаю. У меня есть три теоретических цикла: 1. Принимает строковое значение даёт на выход 2 списка. 2. Принимает списки. Записывает некоторые обработанные данные в файлы, даёт списки на третий цикл, затем передаёт строковое значение в 1 цикл. 3. Принимает списки и остальные данные о работе процесса.
Анон, выручай. Попробовал скормить своему недопарсеру текстовый файл со ссылками на архивные треды, так он в папку скачивает только картиночки из первого треда в списке. Больше в папке ничего не появляется, хотя процесс так и идёт(!). Приходится останавливать вручную. Что не так? https://ideone.com/OeOZJW
Помогите осознать разницу между @staticmethod и @classmethod. Правильно ли я понимаю, что единственное, что их отличает, это то, что второй неявно передает в качестве аргумента класс? Если так - зачем это делается? Ведь можно получить доступ к полям класса и с использованием @staticmethod.
Пытаюсь отправить из shell Джанго через консоль сообщение, на мыло. т.е реализую оповещение о новом посте в блоге. Выдаёт encode(скрин прилагается) В коде ни строчки на кириллице
>>1136285 >И как исправить? Изменить схему именования файлов? У тебя каждый вызов take_image называет файлы от 1.png до m.png, независимо ни от чего.
>Ведь можно получить доступ к полям класса и с использованием @staticmethod. Нельзя. Ну, разумеется, через название класса можно, но так откуда угодно можно. Суть classmethod'а в том, что внутри вызова ты знаешь, что это за класс.
>>1136311 Ты бля о чём, шутник ёпт. Я не настолюко умный чтоб до такого догадаться. Дайте мне просто библиотеку, стандартная питоновская для меня слишком сложная.
Корочебля. Засунул в треадинг. Выдаёт ошибку. Но хотя бы работает с исключениями, я не ебу. Пишет, что переменная messege не объявлена, хотя она же там объявлена.
Так, подскажите туплю уже второй день. Простой вариант Есть 3 списка, 2 с интеджерами, один со строками Первый список и список со строками одинаковы по длине и соответствуют интеджер - текст во третьем списке лежат интежеры в плоскости между интеджерамит из первого, т.е. Первый - [10,20,30,40] Второй - ['text1', text'2, text3', text4', ] Третий - [25, 35] Задача достать текст из второго списка соответствующий третьему в меньшую сторону. Соответственно 25 бы здесь получил text2, а 35 text3. Пробовал через bisect, но он, что логично, возвращает индекс большего вне зависимости от left right
Хард мод. Третий список остается как есть, а первый и второй это один и тот же генератор такого вида: for (level,text,int,a,se) in genobject
Плиз, не гоните ссаными тряпками. Не могу понять, что нужно делать, когда n>1440(это число минут в сутках) Дано число n. С начала суток прошло n минут. Определите, сколько часов и минут будут показывать электронные часы в этот момент. Программа должна вывести два числа: количество часов (от 0 до 23) и количество минут (от 0 до 59). Учтите, что число n может быть больше, чем количество минут в сутках.
>>1136466 Мда, что-то я что вчера вечером тупил, что сегодня утром тупил, спасибо, надо будет посмотреть, правда, не появятся ли у меня где ексепшены после этого.
Аноны, привет Платиновый вопрос. 25 лвл, работаю аналитиком, хочу вкатиться в питон. Если учить вечерами и прибегать к помощи ментора, то смогу ли я через год-полтора вкатиться? Сейчас получаю 100 и понимаю, что пиздец просяду. Да, еще хочу трактор завести
Пилю значит в Джанго блог, пытаюсь сделать отправку оповещения о постах на мыло. При попытке отправки сообщения через shell оболочку, выдаёт ошибку кодировки. В КОДЕ НЕТ КИРИЛЛИЦЫ!
Такой вопрос по ооп, есть класс, в нём три метода, из экземпляра юзается один из них, остальные не должны вызываться напрямую, это надо их определить вот так __имя_метода__? И ещё эти метода используются с того, который вызывается напрямую и им тоже нужен экземпляр. В общем, поясните как это должно по красоте ооп работать?
Подскажите ещё по селери и фласку. Вот есть такой код https://ideone.com/82pVxS Никаких ошибок, ничего не происходит, редирект срабатывает, но сама send_async_email не работает. Ставил туда принты, вообще туда не заходит.
Короче, ситуация такая. У меня написан простенький бот на питоне, использует он библиотеку vk_api, все шло хорошо, но вот беда, раз в сутки выдает vk_api.exceptions.ApiError: [10] Internal server error и прекращает работу бота, приходится запускать заново. Что с этим можно сделать?
Как в numpy можно создать массив из объектов np.ndarray разной размерности? np.append() сжимает массивы и в итоге выдает одномерный массив, а стандартный питоновский append, хоть и работает, но слишком медленный.
>>1137486 Что? Ты вообще как себе это представляешь? Создаёшь сначала целевой массив нужной размерности, затем копируешь в него хоть из сотни других через slices.
>>1136031 >>1136036 Нет. Нет. Но с большой вероятностью с минимальным допилом или вообще без него может заработать. На самом деле использовать сегодня 3.0/3.1 это ещё хуже чем даже 2.7.
Привет, программисты Зеленый пездюк в треде. Для успешного освоения питона (только про питон спрашиваю) нужны уметь в линукс? Даже в будущем потребуется обязательно?
>>1137556 Да. Но можно и макось, они на самом деле очень похожи. Однако имей ввиду если хочешь в вебдев то 99% твой бекенд будет крутиться на линуксах.
>>1137556 Нет, не нужно. Я бы сказал иначе, нужно понимать основы ОС в общем, линуксы здесь только как наиболее предрасполагающая к такому изучению среда. Как видишь, полтреда зелёные спрашивают что такое PATH и почему не срабатывает импорт. А ведь envvars и в винде есть.
>>1137556 Хватит вообще бояться линукса. Типа, в любимые игры не поиграешь? Так линукс можно использовать на виртуальной машине, он там работает быстрее, чем винда на основной.
Здравствуйте, у меня такой вопрос: если у меня есть
1) функция f(x) выражающая количественные характеристики первого вещества, неважно какие характеристики, главное, что количественная характеристика "у" зависит от количественной характеристики "х" по закону f(x)
2) есть второе вещество с такими же количественными характеристиками "х" и "у", но "у" от "х" зависит уже по закону g(x)
3)А потом первое и второе вещество смешали в пропорции 40% на 60% и получился для смешанного вещества третий закон зависимости "у" от "х" h(x).
Подскажите, пожалуйста, есть ли методы машинного обучения позволяющие по законам f(x), g(x), h(x) и по величине пропорций, определить как закон смешанного вещества h(x) выражается через первые два закона g(x) и f(x)?
Ну например, допустим, что окажется, что h(x) = 0.4f(x) + 0.6g(x). То есть ли методы машинного обучения позволяющие эту зависимость h(x) от f(x) и от g(x) выявить?
ПОСАНЫ, смотрю сейчас статистику и не могу вкурить, есть такой популярный сей чатурбайт, где люди голыми пердаками на вебкамеру светят, дак этот сайт невъебенно нагруженый трафиком. Смотрю в статистики отображается, что написан на Django, Как ЭТО возможно вообще или там на бекенде овер дохера С++ кода???
>>1137940 Очевидно, что стримингом и перекодированием видео занимается не питон. В остальном же скорость любого сайта ограничивается субд, а не интерпретатором.
>>1137960 А зачем перекодировать видео? Пускаешь потоки как есть, кодируя на стороне клиента сразу как надо. То есть сервак реально занимается только перегоном трафика, по-любому есть какие-то специализированные сервера под это дело, какие-нибудь плагины для nginx/haproxy или что даже более вероятно какие-нибудь циски где количество работы на цпу сведено почти к нулю и всей работой занимаются сетевые интерфейсы на уровне хардвари. Питон, само собой, только выруливает где кого куда, кто заплатил, кто не заплатил и прочий менеджмент.
>>1138009 Если у стримера хуёвый интернет, то 5 форматам взяться будет неоткуда. Но так-то да, мне кажется, с клиента уходит одно видео в наилучшем возможном качестве, а потом ужимается уже на сервере.
>>1138009 Там разве не тет-а-тет дрочильни? Если стример один, то да, имеет смысл перекодирование делать на сервере, но дальше всё та же задача мультикастинга. Они там скорее всего на все CDN перегоняют в единственном экземпляре, а CDN уже обслуживает подсеть просматривающих. То есть вместо n потоков можно получить что-то вроде log n.
>>1138240 Чтоб пизду выгодно пристроить её нужно как можно большему числу людей показать. Однажды спросил нигру: "чувиха, нахуя тебе две мышки?" А её понесло: потому что у меня 2 Ip, соответственно 2 компа, 2 монитора, камеры мышки для управлениями ими. Я могла бы использовать kvm, но одной рукой дрочить,а другой переключаться - неудобно."
>>1138385 А ВДРУГ при определенном значении выдаст? А эта сука выдаст, будь уверен, невозможно все предугадать, если ты конечно не совсем минискрипт делаешь. >>1138387 Два.
>>1138481 Твое право, я для себя пишу тесты редко, не приучен, но у меня со стилистикой кода все ок. На 60 строк кода тест и не нужен, скорее всего, если ты умеешь дэбагер юзать и правильно оформишь отлов и вывод возможных ошибок.
>>1134827 (OP) Для вас, наверное, не сложно будет решить как сделать во такое: Нужно создать функцию, которая из предложенных строк случайного размера будет находить последовательности символов, которых ещё нет в какой-то определённой БД и записывать их туда, присваивая уникальный идентификатор и список простых чисел. Да, я знаю, что это просто, но БД должна быть просто огромная, а каждый раз пролистывать её записи - не хватит никакого времени. Соотвественно нужно как-то так сделать, чтобы это было очень быстро.
Поясните за питуханские понятия. Как вообще положено делать: каждый класс в отдельном файле или наоборот побольше классов в файл пихать? Названия файлам какие давать? Их в поддиректории перемещать или лучше когда в корне?
>>1138481 >>1138385 >>1138385 Скрипты разные бывают. Если у тебя хуйня на 20к строк и пилит ее куча мартышек то без хорошего покрытия тестами не обойтись. А иначе любое изменение может обернуться непредвиденным поведением где-то дальше по линии, и будешь потом скакать и выискивать отуда уши растут. Запуск кучи тестов на каждый коммит это сразу спалит. Но на 60 строк можно конечно забить, можно и на 2к забить если ты пишешь один.
>>1138575 Кулстори из своего опыта. Есть популярный фреймворк, есть небольшая батарейка для него за моим авторством. Батарейка была сделана без тестов, задачу выполнила, была выложена в открытый доступ и благополучно забыта. Тем временем фреймворк успел выпустить несколько релизов, мне присылают тикеты что всё сломалось. Залезаю в код и, вот честно, хуй его знает что и где пофиксить. Пришлось разбирать по кусочкам всё и каждому простейший тест написать чтобы хотя бы выяснить что в каком месте куда передаётся (там довольно сложные структуры ходят, не просто int/str), а затем через тревис проверить на каких версиях фреймворка это падает и почему. Кода буквально 500 строк, кроме меня его почти никто не трогал. Однако за годы для тебя твой же код становится настоящим чёрным ящиком, в котором снова нужно разбираться, как с чужим проектом.
>>1138598 А чем коменты помогут? Там в принципе декомпозиция по функциям нормальная была, имена функций тоже достаточно удачные, их нужно было повыносить из одного большого класса, так как self почти не использовался, и разделить на пару модулей по функциональности.
Господа, есть джанго-проект, в нём Celery периодически запускается(по расписанию) и наполняет кеш(LocMemCache) двумя словарями с данными(они вытягиваются из другого сайта), кеш заполняется успешно, время хранения выставленно большое. Проблема в том, что обращаясь потом во вьюхе к кешу, я получаю - None. То есть даже не создаётся в кеше запись с таким ключом. Эта хуйня происходит лишь на сервере, на локалхосте всё ок. В чём может быть проблема? В какую сторону копать? Как вообще проверять работу с кешем?
У меня есть строка произвольного размера. Необходимо как-то ей дать целочисленные координаты в кубическом пространстве. В одномерном понятно - берёшь хэш и суёщь в функцию. Но как в трёхмерном? Конвертировать значение [0:8000] в какую-то точку по столбцам, строкам и колонкам? Каким образом это сделать быстро? Смысл в том, чтобы похожие по составу строки находились ближе. Если делать как я написал выше, то нихуя подобного не получится. Нужна манипуляция именно со всеми координатами.
>>1139037 Ты що, поехал? Нахуй мне нужен многомерный массив? Я хочу координаты определить по символам. Ебать у тебя советы конечно, будто я не знаю что в массив можно массивы пихать, лал.
Хэлп нубу. " Создайте конструкцию if, которая проверяет, действительно ли количество бисквитов (которое задано в переменной twinkies) меньше 100 или больше 500. Если это условие выполняется, пусть ваша программа напечатает сообщение «Слишком мало или слишком много». "
>>1138933 file.write(sto_millionov_cifr) Это же меньше 100-200мб (или меньше гигабайта, если ты таки от 1 до 10^8 числа записываешь), тьфу для сегодняшних скоростей.
>>1139068>>1139092 Сначала собери целиком строку, а потом один раз её записывай. В файл пишет ОС, а не сам питон, и скорость зависит по большей части только от твоего диска. Спокойно записал 788 мегабайтную строку (все числа от 1 до 10^8) менее, чем за секунду. Вызов же f.write сто миллионов раз уже 15 секунд, не считая всего остального лупа.
>>1139102 Если ты просишь помощи уже таком шаге, то советую забросить это дело. Перед этим упражнением наверняка была куча идентичных примеров, и если ты по ним ничего не усвоил и не можешь даже ещё раз пройтись и разобраться, то плохо всё, очень.
Господа, подскажите. Читаю "effectivedjango.com/", и там, как я понимаю, работа ведется на линуксе, в терминале. Следовательно, джанго работает в режиме виртуальной машины, и автоматом создает шаблонные файлы, как пример: (tutorial)$ python ./manage.py startapp contacts Как подобное провернуть на винде, и в PyCharm? Написать пару лишних строк - не проблема, но к примеру, указывается, что после создания файлов желательно базу данных обновить. Вопрос - как это сделать на винде?
>>1139204 >Наркоман шоле? Скорее не наркоман, а неправильно поставил вопрос. Где в PyCharm'e синхронизировать(обновлять) бд, создавать "приложения" так, чтоб в них уже были такие файлы, как: __init__.py models.py tests.py views.py И чтоб это делал PyCharm, а не я.
Не запускать же ради этого консоль.
>Также как и в линуксе. Линукс и винда - разные ОС, не находишь?
Как узнать директорию, в которой был запущен главный скрипт. Проблема __file__ в том, что он указывает на модуль исполняемый в данный момент и этот модуль может быть в произвольной директории, а нужна главная директоия.
>>1139323 О, кажется сам догадался: os.path.dirname(os.path.abspath(sys.argv[0])) Не таит ли это подводных каменей после компила? Есть вариант более правильный?
Анончики, поставил себе задачу спарсить один ахуенный сайт с парой лямов страниц. Данные буду оформлять в dict, типа названия, текста, тегов и т.д. Ясен хуй столкнулся с тем, что я не смогу всё это хранить в переменной чтобы в конце парсинга сохранить в файл. Подкиньте совет как организовать сохранения дохуища данных без убийства оперативки ради переменных, как вообще работать с тегами и фильтрами в дальнейшем. Кидать теги в отдельный словарь и потом при выборе прогонять генератором по всему списку и если в тегах есть выбранный тег, то высвечивать? Статейки или книги подкиньте по это хуйне в общем, а то я ньюфаг ещё ебаный
>>1139332 Ну понятно, что просто берёшь и парсишь. Всю эту хуйню я знаю, это не проблема. Я просто озадачился правильностью сохранения таких данных, ибо я попытался хотя бы 100к страниц спарсить с сохранением в одну переменную и ахуел от -1гб озу. Потом подумал, что нужно бы в какой-то файл писать, но каждой иттерацией открывать - дозаписывать - закрывать, эт пиздец кромешный. Насчет бд ты ахуенно подсказал, спасиб. С фильтрами и тегами как быть?
>>1139335 Doorique, я же тебе русским языком написал. Соьираешь коллекцию ссылок на те страницы, которые надо парсить. Из этих страниц хтмл парсером выбираешь блоки с текстом и блоки с тегами. Заносишь это в БД. Как? Чуваки, которые лучше меня шарят сиквеле меня поправят, но мне видятся 2 таблицы связанные с клбчами. В первой поля id, text, tags, где теги ключи на вторую таблицу с тегами. И так страницу за страницей заносишь в БД
>>1139331 https://docs.python.org/3/library/shelve.html Под капотом dbm, сами значения кодируются через pickle. Можешь взять из реляционной базы наколхозить подобное на binary/json fields, можешь взять монгу, там сразу жсоны пишутся.
Почему Python не сделали компилируемым? Это в принципе не возможно из-за его дизайна? Можно ли Python сделать компилируемым (например поможет ли в этом статическая типизация), чтоб работал быстро как программы на C? Или статическая типизация испортит все? Можно ли сделать язык синтаксисом и удобством как Python и в то же время быстрый как C? Или это невозможно?
>>1139541 Меня в нем смутило, что идентификаторы с разными регистрами являются одной переменной. Его стоит использовать или в нем есть существенные недостатки?
Как мне замерить время выполнения ассинхронной функции? Есть парсер на aiohttp в нем есть примерно такие строки
task = [asyncio.ensure_future(func(i)) for i in range(10)] await asyncio.wait(task)
Нужен вывод времени выполнения функции + ее аргументы В обычной ситуации просто делал декоратор с time, а сейчас этот же способ выдает ошибку. Нужно мой декоратор тоже async await как то обмазать?
>>1139423 Лямбда там вообще не за чем. >if x < 100 or x > 500: >if not 100 <= x <= 500: > print("Сообщение") Вот два варианта if-конструкции, требуемых в задании. Зачем тот анон лямбду приплёл я не знаю, пока не забивай себе голову.
В общем, такие дела, братишки. Учу питоний, как и любом другому психически здоровому человеку, мне не нравится концепция классов, тем не менее, придётся верить на слово, что О О П мне ещё пригодится.
Так вот, меня терзает вопрос синтаксиса.
Короче, смотри, ёбана Сначала мы ставим классы >class Abu(): Потом объявляем функцию >def __init__ (self, hands): После, мы можем присвоить пременную внутри функции, чтобы функция могла обращаться к своим же значениям, если я правильно всё понимаю >self.ruki = hands Так вот почему, блядь, не >hands = self.ruki
У меня есть класс, У класса есть свойство, Этому свойству я хочу присвоить переменную (обычно, люди просто не ебут мозги и пишут self.hands = hands) Но, мне эта кривая структура мешает понять логику языка
Пока я это писал, то понял, что сначала нужно объявить переменную. Тем не менее, почему нет элементарной обратной связи?
Но, остались ещё вопросы. Почему я не могу просто обращаться к hands? Почему я должен создать новую переменную, причём через self? Отсюда вытекает другой вопрос, нахуя вообще нужен self?
Причём, что в действительности меня интересует, чем это удобно?
Почему нельзя было сделать просто и без задней мысли, вот так?
class Monkey(): def (hands): hands = True
class Makaba(): def class(): state = Monkey()
def check(): if state.hands: print("Dvach is working") else: print("Please, buy more passcodes")
dvach = Makaba() dvach.check()
Для сравнения, правильный код class Monkey(): def __init__(self): self.hands = True
class Makaba(): def __init__(self): self.state = Monkey() def check(self): if self.state.hands:# == True: print("Dvach is working") else: print("Please, buy more passcodes")
>>1139803 >Почему я должен создать новую переменную, причём через self? >Отсюда вытекает другой вопрос, нахуя вообще нужен self? Можешь обращаться к hands и ебаться с аргументами в функциях внутри класса, если ты ебанат конечно. А можно просто в __init__ объявить переменные в self и вызывать их из любой функции в классе. Пиздуй читай A Byte of Python
>>1139803 >Пока я это писал, то понял, что сначала нужно объявить переменную. Нет, не нужно. Переменные самообъявляются при их первом использовании.
почему, блядь, не >hands = self.ruki Так тоже можно для создания локальной переменной hands. Такова традиция оператора присвоения во всех языках. Слева пишется кому присваиваешь, а справа - что присваиваешь. Слово self.ruki - это всегда свойство объекта. Ты можешь создать новое свойство в любом месте в любое время: внутри метода или снаружи объекта: abu = Abu() # создали объект abu abu.ruki = 123 # создали ему свойство, что равносильно твоему self.ruki = 123 внутри метода.
>>1139809 >Можешь обращаться к hands Ты не можешь обращаться к hands. В этом вся суть вопроса, с hands вообще ничего нельзя сделать внутри класса, у функции просто есть переменная, к которой нельзя обращаться. Чтобы обратиться к hands, нужно создавать переменную self.hands. Которая, опять же, используется только внутри класса. >>1139818 >что это переменная объекта класса, если писать без неё, то получается, что ты создал переменную класса Может ты имел ввиду переменную функции? Внутри обычных функций переменные работают как обычные переменные. А вот внутри классов только через "self". Или я не понимаю разницы между объектом класса и классом. >И зачем это? >Можно было без этого обойтись ># == True: Может я и обошёлся, ведь это просто комментарий. >ты даже лутца Как что-то плохое. >>1139828 >Нет, не нужно. Я имел ввиду, что >a = 'word' >a = b >print(b) Не сработает, потому что сначала нужно объявить переменную "b =", ну и дальше ей спокойно присвоится значение 'a'. Но не наоборот, хотя, было бы удобно. >Ты можешь создать новое свойство в любом месте в любое время: внутри метода или снаружи объекта Это я знаю. >abu.ruki = 123 # создали ему свойство, что равносильно твоему self.ruki = 123 внутри метода. А вот сейчас я задумался. А ведь действительно. Вот сейчас для меня многое прояснилось. Но два вопроса ещё осталось. 1) Что делает переменная self в каждой функции класса? def Funct(self), зачем писать self? Почему нельзя просто оставить скобки пустыми, ведь к этому 'self' никак нельзя обратиться, оно ничего не делает. 2) Ок, у нас есть класс >class Abu(): >def __init__(self): Мы добавляем в функцию новую переменную: >Abu.hands = True Теперь внутри класса я могу обратиться к ней как к self.hands, без объявления, она уже существует как self.hands. Так почему я не могу сразу её создать в таком виде в функции? >class Abu(): >def __init__(self, self.hands, self.somethingelse) Чтобы избежать вот этого вот >def __init__(self, hands) >self.hands = hands
>>1139852 > Что делает переменная self в каждой функции класса? Функции класса я называю методами. Переменная self делает доступными внутри метода все свойства объекта. Через нее можно вызвать другие методы, либо значения переменных пример https://ideone.com/gh5R5S
>зачем писать self? Можно не писать, если метод статический. См. пример выше.
>>1139865 >статический Я примерно понимаю, что это означает, но всё же, не до конца. Если в данном статическом методе прописать self, это вызывает ошибку, почему? >Переменная self делает доступными внутри метода все свойства объекта. Через нее можно вызвать другие методы, либо значения переменных Получается, что она не только делает доступным, но и заставляет проводить определённые манипуляции. Какие? Почему статическая переменная с self выдаёт ошибку?
Кроме того, я понял одну из причин, почему переменные методов нужно вызывать через ".self", потому что внутри методов можно использовать обычные переменные. Не встречал таких примеров в "Python Crash Course", отчасти поэтому не мог понять, зачем нужно обращаться через ".self" >>1139878 Будем надеяться, что к четвёртой версии предусмотрят.
>>1139902 Статический в контексте ООП означает "не имеющий инстанции", т.е. нет сущности, нет объекта. Статический метод в питоне можно вызывать до создания объекта класса. В статическим метод нельзя передать self, потому объекта нет. Ведь, Self - всегда указывает на объект класса.
>>1139865 И ещё один вопрос, как ты обошёлся без __init__? Без __init__ ты не можешь присваивать значения самому классу, только отдельным методам внутри него. В этом есть смысл? Это - полноценный класс? Или в нём нет никакого смысла?
>>1139902 > внутри методов можно использовать обычные переменные Верно. Так реализовано разделение namespacе(именное пространство). Обычная переменная действует только внутри одного метода. А переменная self.ruki действует во всех методах этого класса.
>>1139912 >присваивать значения самому классу Эту фразу я читаю как "передавать значения при создании объекта класса". Действительно не могу. Это нормальная практика. На самом деле мой класс обладает этим методом __init__(), как и любой класс в питоне. Каждый класс наследует базовый питоний класс object. Мою декларацию можно написать более явно: class Abu(object): ... или в терминах Java: class Abu extends object { ... }
В случая, когда программист прописывает def __init__ (self) в декларации своего класса, он фактически перекрывает своим кодом существующий метод __init__ у родителя - object.
>>1139705 Ебать, сколько ж людей пытается срубить бабла, по сути говоря об одном и том же. Такое ощущение, что либо им всем в одно утро приходит в голову заебенить самоучитель для чайников, либо они в принципе не гуглили, что у них уже есть сформировавшиеся конкуренты.
>>1140054 Олсо ты даже сообщения об ошибках, похоже, не читаешь, тебе же пишут: >positional argument follows keyword argument Т.е. ты не в том порядке передаешь аргументы - сначала должен идти обязательный аргумент, а потом опциональный. Это основа основ, что в вызове функции аргументы передаются в том же порядке, в каком они были определены в описании функции. Узнать порядок можно из прототипа функции или из документации.
>>1140259 Уже выше писал. Дла даунов: Одно подчёркивание: условная договорённость именования "приватных" атрибутов и методов. Два подчёркивания: включается механизж mangling-а чтобы наследник не испортил твой атрибут или метод.
>>1140341 Забугорная общепрограммерская, там сравнительно активный канал питона. IRC какой-нибудь freenode, канал #python, там больше тысячи человек сидит, но тоже на английском. Слак python-ru.
Написал свою первую программу в жизни (не считая калькуляторе на Бейсике по школьной методичке): текстовую версию "камень-ножницы-бумага". Теперь ебусь с "угадай число", конкретно с while, потому что в Питоне нет аналога goto, который бы здесь пиздец как помог.
Парни. Постепенно вкатываюсь из сей/плюсов в питон. Написал пару программок по типу бот для телеграмма/скачивание веселых картинок из вк-другой-хуйни-с-апи/скраппинг рандомной хуйни с разных сайтиков и пришел к следующим выводам: -по сути, я пишу все тот же с/с++ код, только на питоне -я заебался скраппить, блять
В связи с этим два вопроса: 1) Каким образом быстрее задрочить все эти питоновские штуки типа [[govno for mocha in zhopa] for tratat in lala if chlen in zhopa] ? И есть ли в этом смысл? будет ли это работать быстрее дефолтной хуйни в условные 4 строки? 2) Подскажите, че еще можно пиздатого написать, не залезая во всякие джанги и другие здоровые фреймворки/либы. Ну и чтобы не скраппить, блять
>>1140541 Ну, типа, идут условия, идут, а потом БАЦ в середине: "Вы выиграли! Хотите сыграть еще?" И это все добро должно вернуться к старту, где машина загадывает число.
>>1140552 С этими функциями корешусь без проблем, поскольку такие функции есть и в других языках. Больше интересует мишура, присущая только питону. Говоря о той хуйне, что я напиcал до этого - в питон доках написано, что list comprehension - это просто удобная хрень для создания списка. Судя по гуглу, бОльшая часть типсов-триков питона направлена на удобство. Значит ли это, что по той же производительности разницы особой нет?
>>1140563 На производительность в питоне нужно забивать и писать максимум читабельно. Почитай как устроен интерпретатор, основной тормоз это миллионы dict-accesses в объектах, всякие getattribute с дескрипторами (например когда ты делаешь банально zhopa.atatat). Всё очень медленно, но очень гибко. Вместо компилятора используй линтеры/mypy: всех ошибок не выловят, но самые очевидные покажут.
Дополнительно можешь попробовать пописать экстеншены на си/плюсах.
И да, чего ты так зациклился на скраппинге, пиши что захочешь или попробуй поконтрибьютить в попенсорц где-нибудь чтобы не зря трудился.
Хуле pprint такой малонастраиваемый? Хочу переносы привычные для json. Про json.dumps я знаю, но блять, я данные пиздона хочу форматировать, а не json.
Дело в том что math вызывает хардварные инструкции процессора, которые внутри себя вполне вероятно те же ряды Маклорена считает микрокодом. То есть так или иначе ты придёшь к тому что выгоднее напрямую вызвать инструкцию процессора, нежели считать собственноручно. >>1140670 С такими вопросами в школьный курс математики. Аризона, Вест-Верджиния, Оклахома и Мэрилэнд.
Привет, двач. Помоги совсем тупому. Решаю простейшие задачки и не могу решить эту: есть пять сумок, надо спросить вес каждой из них, и потом выдать количество сумок с весом больше 20 кг. Подскажи, в каком направлении думать :(
>>1140726 >>1140725 Благодарю, конечно, но все равно, на столько туп, что не понимаю, как запихнуть в массив =( Если что, вкатываюсь только второй день. Как я понимаю, делаю пять инпутов, запрашиваю вес сумок, а дальше что? Как эти значения обозначить в коде? Задача не для цикла, а для if-else.
>>1140726 >1 for _ in range(0, 5) if int(input()) > 20 Поясните как это работает. Почему выражение возвращает единицу только когда условие выполняется?
Посоны, расскажите, как запросы работают в aiohttp, вот отослал я асинхронное 10 get'ов, event loop, когда контекст ни чем не занят каждую секунду опрашивает функции на наличие результата? И как они принимают этот результат, если во время переключения контекста они "спят"
>>1140923 Все асинхронные задания отправляются в ядро, затем приложение говорит: я хочу возобновить выполнение когда что-нибудь произойдёт на этом наборе заданий (вызывает select/epoll). Далее ядро занимается своими делами или другими приложениями, потом когда происходит эвент, передаёт управление твоему приложению со структурой куда записано где с каким заданием что произошло. Соответственно приложение/asyncio выполняет свои перекладывания по полкам пока снова не вызовет select/epoll и не уснёт.
>>1140890 Просто надо разбить выражение на четыре части. 1) range(0, 5) - генерация значений 2) for _ in <...> - получение и преобразование значений (в данном случае значение игнорируется) 3) if int(input()) > 20 - фильтрация (все значения не выполняющие проверку игнорируются, остальные идут дальше) 4) 1 - преобразование значений (в данном случае любое входное значение преобразуется в единицу)
Просто они расположенные в странном порядке.
На жаваскрипте этот же код можно переписать примерно вот так: [0,1,2,3,4,5].map(_ => null).filter(Int(input()) > 20).map(_ => 1)
>>1140977 >в данном случае любое входное значение преобразуется в единицу Но в этом удивительном примере False в единицу не преобразовывалось. Все в sum() считалось правильно.
Шахматный король ходит по горизонтали, вертикали и диагонали, но только на 1 клетку. Даны две различные клетки шахматной доски, определите, может ли король попасть с первой клетки на вторую одним ходом. Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки. Программа должна вывести YES, если из первой клетки ходом короля можно попасть во вторую или NO в противном случае.
stb1 = int(input()) str1 = int(input()) stb2 = int(input()) str2 = int(input()) if (str1-str2 == 1) or (str2-str1 == 1) or (stb1-stb2 == 1) or (stb2-stb1 == 1): print("YES") elif (stb1-stb2 == 1 and str1-str2 == 1) or (stb2-stb1 == 1 and str2-str1 == 1): print("YES") else: print("NO")
Cука. Решаю тесты на пичарм, только 2 неправильных. Вот их входные 1) 4 4 5 6 2) 4 3 2 2 Это нормально, что я на подобной хуйне по 2-3 дня сижу? Тема циклов сама понятна,а вот эти задачи не совсем получаются.
>>1141066 Хотя, нет, ничего не заработало. Да, точно, не работает, как складывается, так и вычитается только 10, не переприсваивается значение таким методом.
Я решил замутить свой класс. В конструктор этого класса передаю токен, в конструкторе создаётся экземпляр бота, копирую в тело классо метод из примера выше и питон начинает ругаться на декоратор @bot.message_handler(bla-bla), дословно "name 'bot' is not defined'. Как заставить эту хуйню работать?
>>1141137 unittest.mock Что значит костыльное? Заебали эти словечки везде вставлять. Оно либо сделано и работает/тестируется, либо нет. Костыли это затычки для заведомо хуёвой архитектуры, позволяющие сделать хоть как-нибудь, при этом известно что можно лучше и правильнее. А здесь как ты лучше сделаешь?
>>1141179 Можно не засерать тред вопросами которые очевидны любому кто хотя бы 100 страниц любого учебника по Пиздону прочитал? Может хотя бы гуглить научишься, прежде чем учиться кодить?
Свой код кидайте через https://ideone.com/
Книги и ссылка на PyCharm: https://yadi.sk/d/tArKKuQu3Kejuq
Предыдущий тред
Python питон