Это копия, сохраненная 23 февраля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>1752122 (OP)
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
#######################################
ЧаВо: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat Актуальность примерно 2015 года
Вопросы-ответы:
— А стоит ли читать Лутца, том номер N?
Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х?
Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать?
Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
злата обуховская
У рыбы между клоакой и заднепроходным отверстием.
А, ну я наверное могу просто в цикле сначала сделать строку из элементов, а потом вывести её
Бессерверные вычисления в амазон веб сервисес
Не всегда. Порой захаживает Люд вроде меня. Таких черти и шныри кличут Хозяином, а пацаны - Папой
Что с tornado? На моей галере половина продукта написано на нем, придется тащить
Каковы перспективы tornado в 2020, приятно ли на нем писать и что в нем с асинхронностью?..
Ну сам разработчик FastAPI не любит писькомерство. По сути любой бенч это тот ещё черрипикинг.
То что aiohttp без говнокода даёт на клык это факт. То что жанговская ОРМ самая продвинутая тоже факт. То что на Tornado уже меньше и меньше пишут тоже факт.
Дай обниму. Хватит кормить уже инфоцыган.
Документация, SO, другие тематические форумы или блоги. Ощущение, что инфоцыгане в продакшен нихуя не выводили. По сути это как аспиранты на кафедрах. Что-то выучили, как-то поняли и стали преподавать
Fastapi удобнее в сотню раз из-за pydantic и зависимостей, но зато в aiohttp есть клиент и тестовый клиент. С последним ещё можно как-то сторонней протухшей либой решить проблему в fastapi, а вот что там из сторонних асинхронных клиентов есть сейчас?
for key, value in dict.items()
Надо смотреть методику и результат в тех же условиях.
Держит то держит, а БД когда упадет без репликации? И это сама держит или с прокси? Яндекс Танк в помощь короче
А я вот аспирант. Сижу в ней потому что мне дают халявные 8к стипухи, проездной и общагу
Параллельно работаю фуллстек-макакой. Мне норм
Вот я отправляю некий http запрос и пока он "летит" туда-обратно мне надо еще выполнить какие-то действия, код вроде этого:
result = await send_request()
make_calculations()
result.process()
попросту же "встанет" на моменте с await, event loop будет искать другие задачи, пока результат с await не выполнится, но тем не менее, пока send_request не вернет что-то, выполнение кода дальше этой строчки не пойдет
Я упустил что-то?..
await нужен как раз для последовательного выполнения, чтобы не ебаться с коллбеками.
Так оно нужно для io задач. Представь, что у тебя таких запросов тысяча, и они независимы друг от друга. Код будет ждать и дальше await не пойдёт, но у тебя там ждут выполнения ещё 999 таких же, и пока ты ждёшь этот, ты можешь другие отправить. Пока отправляешь другие, прилетит ответ на этот и продолжишь его выполнять. А если ты хочешь ещё что-то считать, пока запрос выполняется, то подход надо менять. Есть future_requests, там запросы вроде в отдельном треде дёргаются, главное только не охуеть там коллбеки писать, если они нужны. И вроде как при системных вызовах снимается блокировка интерпретатора, так что ты сможешь дальше выполнять код, а потом по мере необходимости забрать ответ на свой запрос. В принципе, в asyncio можно аналогичные штуки проворачивать, но нахрен он нужен, если у тебя упор на вычисления, а не на ввод-вывод?
что-то не соображу, как это сделать. если спавнить таски через gather, результаты же придут только когда корутина завершится. как быть?
да там и всё ебало покорёжено. только на кладбище этого пидора.
promise = send_request()
make_calculations()
result = await promise
result.process()
Наверное должно сработать
>Так блин, что-то я не вдуплил, как асинхронка тащит
Ивент луп скачет между корутинами, поэтому они все выполняются параллельно. Считай как потоки на одноядерной машине если утрировать.
>event loop будет искать другие задачи, пока результат с await не выполнится
Типа того. Await "блокирует" только текущую корутину.
>send_request не вернет что-то, выполнение кода дальше этой строчки не пойдет
В этой текущей корутине естественно нет, но это нормально.
make_calculations()
Тут серьезная ошибка. Ты не имеешь права в асинхронном приложение использовать нечто блокирующее, так как это заблокирует ивент луп и все корутины "встанут". Ты должен через редис/rabbitQM отправить задачу процессу воркеру на выполнение каких-то блокирующих вычислений. В самом асинхронном приложение только I/O. Зразумив?
>Ты не имеешь права в асинхронном приложение использовать нечто блокирующее
кек
ТЫСКОЗАЛ?
p.s. создается новый тред или пул тредов, декораторы вроде sync_to_async так и делают, но вообще ничего не запрещает вызывать синхронщину внутри асинхронщины
И ты идёшь нахуй.
awaitable loop.run_in_executor(executor, func, *args)¶
Arrange for func to be called in the specified executor.
The executor argument should be an concurrent.futures.Executor instance. The default executor is used if executor is None.
Стандартно это thread. Засовывает туда блокирующую операцию и погнали.
Да, но весь смысл теряется. Пока что корутины в питоне уебищные, green events в го мне показались как-то интуитивнее и понятнее
сам задал, сам отвечу. помазался фьючерами, хуй его знает, правильно ли всё сделал. петяны, чекайте, вот простой пример.
https://pastebin.com/qBBDw7CR
суть в том, что есть долгоиграющие корутины, которые "через некоторое время" уже готовы дать некоторый результат, который так важен в месте старта этих корутин. ну вот как-то так.
В 3.9 обещали завести нечто адекватное и отказ от предопределения asyncio.get_event_loop().
Если в asyncio.run() добавят методы для перехвата signal и штатного завершения процедур или их отмены если это например цикл без конца будет заебок.
Пока предлагают вот это
coroutine asyncio.to_thread(func, /, args, kwargs)¶
Asynchronously run function func in a separate thread.
Any args and kwargs supplied for this function are directly passed to func. Also, the current contextvars.Context is propogated, allowing context variables from the event loop thread to be accessed in the separate thread.
Return a coroutine that can be awaited to get the eventual result of func.
>Представьте, вы разрабатываете CLI-инструмент для извлечения размера веб-страницы и хотите поддерживать и синхронный, и асинхронный способы его работы
Спс, поорал
ололо, там какой то пидор два месяца переводил с английского блогпост другого пидора, и выдаёт перевод на свою статью? хуябра как обычно.
Пытался осилить JS, но каждую секунду мне пригорало. Не знаю по какой причине, но я его блять ненавижу. Разве пикрилейтед может прочесть ЧЕЛОВЕК? В общем, поясните за веб и пригодность питона для этого.
учи пехапе
ну если бы ты си или перл застал, то так бы не верещал, щегол.
Шта? Ты ещё RabbitMQ на rapsberry запусти, пёс. Совсем уже жангодебилы в край охуели.
Да хуй его знает. Может оптимизируют на уровне C. Пока все наработки, не заметил конкретики при описании changelog. Да все ещё письмами обмениваются, решают что в какую версию вносить
да, потом у них гостевая книга работает в шести докер контейнерах под кубернетисом в облаке на микросервисах, медленно.
Нет. Ты путаешь фронтэнд и бэкэнд. Питон/года/го для бэка, адекватный Vue для фронтэнда. Вот и вся кухня.
>веб
На фронте альтернатив жс просто нету. Или ты в танке?
На бэке юзается. Топовые асинхронные фреймворки вроде FastAPI хуярят на уровне с Нодой. Тут Господа сейчас как раз и базарят за асинхронщину
Хуй знает. Короче это код, который должен создавать иллюзию 3д т.е. пользователь "вращает" объект мышкой, а на самом деле это скрипт выводит обычные картинки в определенной последовательности.
Как здесь
https://www.root-solutions.co.uk/product/keyshot-web/
если проскроллить вниз, там есть мотоцикл — его можно покрутить мышкой. В общем, это очень дешевый способ показать 3д с красивым графоном, в отличии от web gl.
В общем делает это все из коробки одна прога для визуализации KeyShot, но мне по многим причинам она неудобна и я написал свою, кроме части, которая реализована на JS.
С этим скриптом работает всё норм, но я хотел во избежание правовых претензий сделать свой скрипт и увидел это нечитабельное говно. Пытался осилить JS, но понять этот текст я не в силах.
UPD в JS треде уже ответили
Лутц 1-2;
Николенко "Глубокое обучение" или Франсуа Шолле "Глубокое обучение"( Еще не решил);
Ну и параллельно матешу подтянуть, хотя итак +- знаю
Что скажете, бояре?
Ну и вот лутц тоже под вопросом. Вдруг лучше Byte Of Python, хотя я его поскролил и там вроде совсем база которую я знаю уже
Демидович и Численные методы были в печатном виде, но сдуру отдал племяннице. А теперь срочно надо кашу в голове структурировать, ух бомбит теперь.
мимопроходил
Да я перекатывателям отметил ссылку.
На самом деле ищи на Coursera или edx.
Вот как пример. https://www.edx.org/course/cs50s-web-programming-with-python-and-javascript
Слушаешь нахаляву, а нужен сертификат (нет) тогда оплатишь.
Сомневаюсь, что "численные методы" вообще имеют какое-то отношение к теме, они совсем про другое. Да и матанализ Демидовича.
С алхимией будет работать? Я че-то думал что алхимия синхронная сама по себе...
В 3ке почти не было невероятно крупных изменений кроме начала ввода асинхронщины, читай по 2ке
А то никак книгу себе выбрать не могу...
Плюсую. Вот есть у меня io-вызовы вроде:
await asyncio.sleep(4)
await asyncio.sleep(3)
await asyncio.sleep(2)
await asyncio.sleep(1)
Я хочу чтоб все они пошли выполняться вместе и чтобы все результаты были готовы через 4 секунды, а вот в этом куске кода результаты вернутся через 4+3+2+1 = 9 секунд, что не есть гуд
Ты их собираешь и запускаешь одновременно, учитывая что с gather() ты будешь авейтить до момента, пока выполнится самая медленная корутина
Заметил, что многие пишут цикл с условием в 1 строку - это нормально? Не снижает ли это читаемость кода? Так же, реквестирую книжку, где было бы все максимально подробно расписано. Т.е. не просто: вот есть переменная, ты ей присваиваешь значение, все круто. А подробно, что происходит, когда ты присваиваешь значение переменной ( про объекты, счетчик ссылок, когда это все удаляется, перезапись) и прочее. В "Как устроен питон" хорошо написано, но там только основы.
Об этом я догадывался. Ебучий пример из лутца не могу выполнить, он работает не так как в книжке.
def gen():
for i in range(10):
x = yield i
print(x)
Дальше он делает вот что:
g = gen()
next(g)
>> 0
g.send(10)
>> 10
>> 1
Это в примере, а у меня сенд нихуя не робит, не понимаю, как это понять сукаааааа. Помоги, если можешь
>next(g)
>>> 0
Запускаешь генератор, yield отдает тебе и и ожидает что ты ему что-то передашь
>g.send(10)
>>> 10
>>> 1
Закидываешь в генератор 10, х становится 10, выводится, цикл уходит на 2й круг и возвращает тебе 1 и т.д.
Блядь, чувак, ну я в дебаггере посмотрел, там по шагам, x становится равным 10 а потом сразу срабатывает yield i и x принимает следующее значение. Этот пример почти дословно из книжки, и там у лутца другой вывод. Ты лучше объясни, как работает генератор. Вот я вызываю next(g) первый раз, функция отрабатывает до первого yield значения, возвращает его, и замирает на следующей строчке кода в ожидании следующего next. В книге, send возвращает значение которое ему передали, плюс сразу следующее из рэнджа. А у меня нихуя не так. Я блядь заебался, уже 2 часа бьюсь об эту хуйню и никак не могу понять.
Спасибо, сейчас взгляну.
> В книге, send возвращает значение которое ему передали, плюс сразу следующее из рэнджа.
Возвращает только yield, send отправляет 10 в генератор но ты его не выводишь учись смотреть на свой код и искать ошибки в отступах
Как мне к ней обратиться в expected_conditions?
EC.presence_of_elements_located(By.XPATH, '//button')[4]
^вот так вроде не работает
Чувак, я в отступы могу. У меня вопрос возник, по этому поводу.
Смекаешь, к чему я? В книжке хуйня какая-то, либо я в глаза долблюсь.
Если ты можешь в отступы то поставь уже ебучий отступ перед принтом, как ты блядь выводить 10 собрался, если у тебя принт вне цикла?
Энджой йор пиривот.
Я делаю приложение на Flask - что-то вроде браузерного просмотрщика медиафайлов. Каталоги, в которых лежат файлы я храню в БД, то есть это одна таблица.
Каталогам можно назначать типы и категории. То есть это как минимум еще 2 таблицы.
Можно назначить любой тип (один), а категорию - только из списка категорий для выбранного типа.
И я не могу понять, как настроить связи и ограничения. Можно конечно не ограничивать поля в БД и проверять уже это в коде напрямую, что категория которую мы назначаем находится в допустимом списке, но хочется поканоничнее это реализовать.
>все равно не понимаю
Проведи аналогию с каким-нибудь конвейером или еще какой-то хуйней, принцип выше уже писал
Так а в чем проблема? Если ты с каждого собеса будешь так рваться, тебя не хватит надолго
Да проблема в том, что так уже три месяца. Все говорят, ну да, всё заебись, приходи оформляться, и постоянно то весь отдел кадров уходит в отпуск, то руководитель пропадает, то внезапно появляется внутренний кандидат, то вот очередная хуета.
Я вообще не понимаю проблемы, ну если видно что я еблан, ну так откажите сразу, ёбаный в рот. Зачем тянуть резину, заставлять ждать, давать какие-то надежды. Более того, если им не нужны РАБотники, нахуй тогда вообще висит вакансия и зачем меня пригласили на технический собез.
А ты приходил к ним через месяц, когда они уже с отпуска возвращались?
Может, ты слишком всратый? Ну внешне на сколько себя оцениваешь?
Видимо сегодня этой какой-то ритуал - издеваться над джунами.
Начал активно искать работу уже будучи мидлом. Делал тестовое, если ок, брали. Если нет, то нет. Ни разу не спрашивали про всякие алгоритмы, ооп, хэши и т.д.
Ельд и не должен ничего в Х сам возвращать, если ты не отправил ничего туда, а сам генератор возвращает цифры как положено
https://repl.it/repls/DullNearMouse#main.py
Раздели логику, так понятнее будет. нахуй тут n я не вдупляю, но вот твое рабочий говнокод.
За nonlocal сразу под сраку.
Тащемта стековерлоу уже почитал, например вот тут https://stackoverflow.com/questions/6670275/python-imports-for-tests-using-nose-what-is-best-practice-for-imports-of-modul
прям как у меня проблема. Пока мне больше нравится вариант с sys.path.append, потому что вариант с setuptools кажется слишком громоздким https://stackoverflow.com/a/50193944. Как вы решали, если сталкивались?
f1 = open('1.txt', 'r')
f2 = open('2.txt', 'r')
f3 = open('3.txt', 'r')
out = open('file_for_writing.txt', 'w')
капице?
r не нужон, салага.
Но вообще это вопрос на однострочник для перла или авк. Но я пробую отсечь эти решения для более активного переката, лол.
Екб. А шо?
Саблайм вроде
Есть карусель с 4мя элементами-цифрами (см пик), файнд элементс создает лист с этими элементами, но ебаный вебдрайвер их не кликает (почему?) и выкидывает "javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite."
Перечитал уже кучу статей на стаковерфло и ничего не помогает.
Нужно просто прокликать все элементы в этом списке, коих на данный момент 4.
>driver.find_elements_by_class_name('carousel-indicators')
for element in video_workshop_carousel_indicators:
ActionChains(driver).move_to_element(element).click().perform()
sleep(3)
Спасибо!
забыл сам эелемент:
>video_workshop_carousel_indicators =driver.find_elements_by_class_name('carousel-indicators')
import requests
class Blog:
def __init__(self, name):
self.name = name
def posts(self):
response = requests.get("https://jsonplaceholder.typicode.com/posts")
return response.json()
def __repr__(self):
return '<Blog: {}>'.format(self.name)
Я с реквестами никогда не работал напрямую. Моя идея такая, просто пройтись по методу на ассерт по коду? 200 ОК и тд. А по бади уже через словарь. Это так делается?
>>64675
В общем запилил такую вот хуиту. Но ничего не работает. Просидел с этим дерьмом уже часа 4.
1. Выдает ошибку, почему-то не импортирует функцию, хотя sample_mock находится в той же папке. Ошибка - File "tests_mock.py", line 16, in <module>
from src.sample_mock import posts
ImportError: cannot import name 'posts' from 'src.sample_mock' (.../src/sample_mock.py)
2. Само собой говорит, что нет response не определена.
import unittest
from src.sample_mock import posts
class Test_Blog(unittest.TestCase):
def setUp(self):
self.test = Blog('Test')
def test_post_response(self):
self.assertEqual(response.status_code(), 200)
if __name__ == '__main__':
unittest.main()
Какие варианты?
а) что нужно для переката в Дата Инженера? Вроде там перспективы по зп и по развитию пизже
б) если оставаться по моему направлению, то что стоит учить, чтобы не отстать от рынка и стать более востребованным?
Ну и хули ты не можешь решение скинуть, которая наверняка не больше пяти строк занимает, не дебилушка?
Чем и как можно подобное реализовать? А то я настолько, дебил, что не могу даже в гугле запрос составить правильно
Спасибо!
Есть встроенный curses, есть библиотеки вроде urwid и вообще
https://github.com/vinta/awesome-python#command-line-interface-development
atexit.register( lambda: print( get_info() ) )
Но внезапно я выяснил что если скрипт завершается через ctr+C или инвм сигналом, который его "убивает", то нихера не принтится. А у меня мой скрипт завершается именно так (это бесконечный loop). Че делать?
atexit вызывается при цивильном экзите. Попробуй сигналы обрабатывать.
>from src.sample_mock import posts
что такое posts? Я ебу что ты там наговнокодил? Показывай давай нормально.
>это бесконечный loop
signal_event = False
def handler(sig, frame):
signal_event = True
os.exit(0)
signal.signal(signal.SIGTERM, handler)
while not signal_event:
print(''Govnokod is working')
Читаешь спеку и реализуешь.
Я как-то колхозил парсер сервиса на вебсокете на пхп и нашел либу с реализацией что-то в 300-400 строк включая каменты и прочую хуйню. Так что должно быть не особо сложно.
Но суть даже не в этом. Похуй на импорт. Я могу в том же самом файле на крайняк тест сделать.
Смысл в том, чего делать дальше.
Метод post из класса Blog? Пиздуй азы учить, братюнь.
Если метод класса, то и вызываешь его Blog.posts(), если инстанса, то через инстанс: new_blog.posts().
Вы вообще хоть что-то читаете про ООП в питухоне? Там же все тривиально.
import unittest
from src.sample_mock import posts
class Test_Blog(unittest.TestCase):
def setUp(self):
self.test = Blog('Test')
def test_post_response(self):
self.assertEqual(response.status_code(), 200)
if __name__ == '__main__':
unittest.main()
Только сейчас заметил.... Ты определил инстанс зачем-то в методе. Полный ахалаймахалай.
перенеси в init(). Потом self.test.posts() вызывай.
Ты main() где определил? Нигде. И что в данном случае интерпретатор сделает? Правильно, напишет что нет такого метода main(). Ну ебана. Ты хочешь автотесты писать, при этом на выходе говнокод.
Убирай нахуй unittest, пиши обычную логику. Как поймёшь что куда дальше уже смотри или пиши свои тесты.
Если у тебя библиотека requests, то status_code нихуя не функция.
assert response.status_code == 200.
Знаешь что лучше сделай? Пиздуй на github fastapi (загугли блеать) и посмотри как они тесты написали. У тебя полная каша в голове сейчас.
>Метод post из класса Blog?
Да.
Ок, заработал сам Метод. Спасибо!
Сейчас он возвращает мне то, что в этом методе - return response.json().
А как теперь проверить статус код? Ведь внутри этого метода есть
response, но как я могу достать переменную response из этого метода?
Всем спасибо за ответы! Дедлайн горит, у меня еще свой проект на стороне. Я на питоне никогда не работал пасаны.
Само собой этот код не работает. Потому что у метода posts нет response.status_code.
Никак не могу достать статус код, потому что он возвращается в формате Джсон. :(
У любого респонса статус код доступен априори
Это свойство любого респонса бля
не говоря уже о том, что ты зачем-то заюзал на объекте метод response.json() а потом жалуешься что "не могу достать статус код"
иди в /web и латай дыры в знаниях
презентации от дэвида бизли посмари есть в pdf и на утубе
Не смотри что писал касательно main и setUo(), в глаза уже долблюсь
response.status_code - возвращает статус код.
По поводу дедлайна успокойся. Так больше ошибок сделаешь.
Бро, все так. Только это не мой код. Мне нужно протестировать этот функционал. Конечно же я бы запилил отдельный метод в классе Блог чисто для респонс код. Но такие условия задачи.
>>65249
Спасибо, но как уже писал выше я не могу достучаться до переменной response из свой тест класса.
Вот что на выходе.
Тест test_posts_response не работает и выдает.
AttributeError: type object 'Blog' has no attribute 'response'
Пиздец... ты хоть в одном языке видел определение переменной?
Какой метод делает запрос и возвращает результат? Его используй.
r = self.test.<my_func>
assert r.status_code == 200
def permutel(seq):
if not seq:
return [seq]
else:
res = []
for i in range (len (seq) ) :
rest = seq[:i] + seq[i+1:]
for x in permutel (rest) :
res.append(seq[i:i+1] + x)
return res
>Есть ли у меня шансы в пограммировании, если функция ниже для меня пиздец как сложна для понимания?
У меня 4 год опыта работы, и я понятия не имею, что делает твоя функция. Для нее должен быть написан docstring, а в идеале юнит-тесты. Если этого нет, то запускай дебаггер и смотри что она делает. Блок-схемы бесполезны.
https://ideone.com/CveeBN
>>65280
Это пример из Лутца, я понимаю что она делает, точнее что она возвращает, там это сказано точнее. Перемешивает последовательность, выдавая список из всех возможных вариантов последовательностей с теми же элементами. Делов в том, что я не понимаю как она работает.
Скачай PyCharm, запусти дебаггер и смотри что происходит после выполнения каждой строчки.
Проблема не в том, что ты не умеешь программировать, а в ограниченных возможностях человеческого мозга. Именно поэтому сложные алгоритмы должны иметь хорошую документацию, а в идеале лучше такое вообще не писать, а использовать готовые библиотеки.
>Делов в том, что я не понимаю как она работает.
Воспользуйся дебаггером, посмотри что на каждом шагу происходит. если только вкатываешься ясен хуй будет сложно и будешь тупить
Да вроде не очень сложно.
Выбираются элементы кроме текущего и рекурсивно прокручиваются, потом в результат добавляется текущий + каждая из этих прокруток.
Добрый вечер, аноны. Быдло-кодер на связи. Вкатываться в коммерческую разработку не планирую. Программирование не профильное. Пилю небольшие скрипты для себя.
Ситуация следующая: большинство моих потребностей в основном упираются в разбор текстовых файлов html, xml, csv, просто текст в txt, etc. и преобразование их в другой формат.
Т.к. хорошего кода я практически не видел, то все мои манипуляции с текстовиками в итоге пришли к макаронам из del, split, replace и списков из ошметков, повторно проворачиваемых через них.
Делаю так, потому что наглядно, "универсально" и в голове держится минимально необходимая информация. Есть подозрение, что скорее всего заблуждаюсь и существуют дефолтные бест практис, в связи с чем вопросы:
1) Насколько сильно это хреновый подход?
2) Дадут ли регулярки больший профит? И стоит ли лезть в это болото?
3) Как вообще это делать правильно?
Можно просто макнуть ебалом в линк.
Да, регулярки это охуенно.
Все твои сплиты и прочее можно сделать регулярками (но не нужно), а чтобы повторить довольно несложные регулярки ты сто раз через жопу провернешься.
Где вписываются базовые методы - юзаешь их, но без велосипедов.
Наверное, баланс приходит с опытом, никто тебе не распишет каждый случай.
Этот метод.
def posts(self):
response = requests.get("https://jsonplaceholder.typicode.com/posts")
return response.json()
Я пытаюсь через этот метод узнать status_code, но он не видит эту переменную..
Да ты заколебал. Отоспись, все равно башка не варит уже
f - функция
f() - вызов функции
f.status_code не имеет смысла блэт
Реально отоспись.
Сделай return response без доп. методов.
Тебе нужен именно сам объект response,
Спасибо, друг. Но как я уже сказал, я не могу править исходный класс.
Получается что из этого метода, без его изменения Никак нельзя получать статус код?
def posts(self):
response = requests.get("https://jsonplaceholder.typicode.com/posts")
return response.json()
Там написано людям с Двача не рады. Обоссут там за любой вопрос?
return response
В json уже на месте превращай. Если ситуация не позволяет и код править нельзя, то само по себе наличие json-объект ( if response.json() ) говорит о том, что response_code == 200. Сам подумай. Не веришь - читай спеку: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
Епт, ну канешн надо проверить валидность тела, а как иначе?
приходет вызов из коллбака, спавнится ждун А. ждун А заканчивает, спавнится новая задача Х.
если во время выполнения ждуна А, пришёл новый вызов спавнится ждун Б, ждун А ничего не делает. после того, как ждун Б закончит, спавнится новая задача Х.
не, мне для дома, для семьи, в уютный маленький прожэкт.
Я так понимаю, лучше всего токенизировать и потом разбирать, или можно как-то попроще?
>регулярки это охуенно
Понимаю. У них же основная проблема - это читаемость. Поэтому стараюсь не лезть без крайней необходимости.
>баланс приходит с опытом, никто тебе не распишет каждый случай
Ну что поделать. Будем набивать с переменным успехом. Спасибо за реплай в любом случае.
Чики двощ!
Я заканчиваю "Автоматизацию рутинных задач", набрал новых крутых учебников, но в них подход недостаточно проектный. Надо больше чужого кода и практических задачек. Вот по Джанго нашёл Django for Beginners by William S. Vincent, очень нравится. А что есть по чистому Питону для того, кто хочет стать интермидиэйт? С английским я ок.
Нет такого подхода. Ну можешь почитать GoF и все.
Или посмотреть какие-то части решений.
У меня был опыт сбора данных из БД или по SNMP, парсинг/обработка -> передача в БД/обмен данными через AMQP. О чем попросит тебя заказчик... хуй его знает. Ко всему нельзя быть готовым.
Пока ковырял проект были и идеи по управлеию сервисами через собственный вебсервис через pystemd. Так как часто снимали логи через SSH со сторонних устройств , то прикручивал asyncssh.
Автоматизировал отчетности. Выгрузка из БД, перевод в excel и рассылка через SMTP библиотеку.
Парсил HTML, использовал OpenCV для получения данных из видеопотка с камер. Передавал потом в сторонние системы...
Задачи разные у всех. Кому-то вообще потребуется интеграция с АТС, недавно такие вакансии видел.
При том неважно будешь ты на питоне это писать или на другом языке. Просто если ты не тупой, твоя задача не просто кодить (ты же не мартышка с печатной машинкой), а именно находить решения и реализовывать их.
Ну ты можешь что-то для себя ковырять. Подергать чужие API, посмотреть как люди документации пишут и потом вспоминать это с умилением. Потому что отечественный IT все равно с "душком". Кто-то где-то реализовал хуйню, ее не протестили, потом начинаются костыли и так далее. А ты сидишь как баран и пишешь ебучие заплатки. И молишься чтобы тебя предупредили, когда в проде что-то поменяется.
Пойми одно. Есть проект - людей нагоняют и вроде как пишут документацию, потом галера пустеет и остается только полтора землекопа, которые знают наверное 30% о своем продукте.
Потом когда надо что-то допилить, снова галера заполняется и так пока не придут к какому-то логическому концу или не выдадут новый бюджет для попила и все нахуй с нуля перепишут.
У меня был такой горький опыт.
А ты думал IT в 21 веке это сказочный мир что ли?
Тут блять CoC обсуждают, а не развитие инструментов. Запрещают slave/mastery/blacklist/whitelist.
А ну и выгорание на проекте в течение полугода, так как если ебашить малой группой, то с переработками и иногда без выходных. Бывало спал по 2 часа в течение 3-х недель.
Я не специалист в компьютер сайенс, но мне кажется, что тебе надо отрастить яйца. Пик релейтед - иногда смотрю на него и вспоминаю, что человек сделан из звёзд, и отчаиваться ему не подобает.
Еще про политкорректность скажу. В Америке если человеку не нравится что-то - он ищет единомышленников. Пишет о себе, проводит встречи, пробивается в медиа и во власть. Негры не хотят терпеть чего-то там - и вот, как видишь, мир меняется, становясь всё более похожим на их мечту. Вместо того, чтобы ныть, ты бы посмотрел на жизнь вокруг и понял, что всё так засрано и бедно, потому что лично ты ничего не делаешь.
Тут за тред уже 4й или 5й чел просит какие-то книги по Джанге блять кроме "Two Scoops of Django" с его best practises ничего нормального нет, остальное слишком старое
Не хочу в полемику углубляться. Разработчики не делятся по полу/национальности и расе. Раньше всех все устраивало. Пришли люди с улицы и сказали все переделать. Потом скажут что Julia ущемляет права женщин, а маскот Python является фаллическим символом и ваще патриархальный.
И мейнтейнеры будут заниматься полной хернёй вместо решения проблемы с GIL и оптимизацией встроенных библиотек.
>>65816
Покажи код. Почему мультитрединг не эффективный? Все от задачи зависит.
>>65801
Ну напишут. Кто-то читает что ли? Тут даже заходят с вопросами, которые разжеваны на SO
Не хочешь постоянного переключения - ебни отдельный процесс под функцию, хули
return Response(json.dumps({'error':'ID is unknown', 'comment'':'I am calling police'}), status=403, media_type='application/json')
Я так вебсервис писал, ибо нехуй. Если возвращается ошибка, то ее надо обозначать через статус коды.
Тогда я делаю контракт (через документацию), что при успешном запросе статус 200, а при неуспешном все от 400. При этом, если статус не 500 и выше, то можно получить тело ответа.
ЭТО НОРМА. Я так работал с ИС, которая возвращала всегда 200, даже если ошибка была. Это полный ад.
То есть я ОБЯЗАН парсить тело ответа и определять там есть ключ 'error' или нет. Это банально лишние операции и больше ошибок.
https://habr.com/ru/company/ruvds/blog/475246/
Т.е. ты знаешь (нет) про мультитрединг, но не знаешь про асинхронку... чую ты нихуя не разобрался в задаче.
def test_posts_status_code(self):
status_code = self.test.posts()
expected = {здесь экспектед бади}
if status_code:
self.assertEqual(self.test.posts()[0], expected)
else:
return False
Чет ты коляску какую-то пилишь.
assertEqual(first, second, msg=None)
Test that first and second are equal. If the values do not compare equal, the test will fail.
Нахрена ты булевые ввел?
ну и опять же
assertIsNotNone(x)
если None, то сразу непройденный тест. За тебя уже давно все придумали
Где я могу научиться писать нейросети? Кто-то может научить меня писать нейросети?
А можно? Я спасибо скажу, обещаю
Ну не совсем. Смотри доки
>unittest.mock provides a core Mock class removing the need to create a host of stubs throughout your test suite. After performing an action, you can make assertions about which methods / attributes were used and arguments they were called with. You can also specify return values and set needed attributes in the normal way.
У тебя же задача клиента написать для тестов. А вот хер который бэк писал должен был как раз mock использовать.
нахуй не нужны для них.
Нашел вот такую ботву. Сам не знаю, что это такое, но вроде что-то похоже.
Только в моем случае нельзя посылать прямой запрос.
https://stackoverflow.com/questions/57663308/how-to-mock-requests-using-pytest
Как думаешь, это то?
Ты долбоеб? Что там нельзя послать в твоём блядь случае я чё телепат нахуй? Скажи мне пидорас тупорылый, я телепат нахуй ты думаешь или чё?
Не слушай поехавшего.
ef test_get_employee(requests_mock):
test_id = 'random-id'
requests_mock.get(f'{__BASE_URL}/employee/{test_id}', json= {'name': 'awesome-mock'})
resp = get_employee('random-id')
assert resp == {'name': 'awesome-mock'}
def test_absent_employee(requests_mock):
test_id = 'does_not_exist'
requests_mock.get(f'{__BASE_URL}/employee/{test_id}', status_code=404)
with pytest.raises(HTTPError):
resp = get_employee(test_id)
Вариант 1.
Возвращается тело, логика теста, а следовательного всего приложения может продолжаться
Вариант 2.
Возвращается ошибка. логика теста продолжается, идет обработка кода ошибки.
У тебя уже готовый сервис с данными, которые ты проверяешь. Mock в данном случае не требуется. Тебе просто надо пройти тесты с разными входными данными, которые тебе выдали. Все.
Короче. Объясняю с точки зрения погромиста.
Вот написал я охуенную приложуху, но у меня еще нет ни БД, ни сервиса. Проебывается БД админ например и второй программист ответственный за вебсервис. А я в соответствии с графиком заебашил свою часть, но при этом чтобы реально сказать "я сделал, дальше ебитесь сами" я должен подготовить тесты, в том числе с mock. Т.е. я должен буду описать логику поведения своего говнокода, так чтобы возможные ошибки не повлияли на общую работспособность, когда все соберут воедино. Как-то так.
>Тебе просто надо пройти тесты с разными входными данными, которые тебе выдали. Все.
Благодарю! Означает ли это, что при получении экспектед бади я могу сказать, что статус код будет 200?
Алсо. Поясните почему или зачем метод возвращает именно return response.json() метод?
Вообще мне тоже кажется, что я велосипед изобретаю. Проверил бади, если получил правильный ответ, по идеи статус код похуй же.
Почитал про мокинг классы. Какая-то непонятная тема.
Запилил вот эту кашу, ну и само собой на выходе ошибка.
def test_hello(self):
with patch('sample_mock.requests.get') as mocked_get:
#mocked_get.return_value.ok = True
mocked_get.return_value.text = 'OK'
r = self.test.posts()
mocked_get.assert_called_with('https://jsonplaceholder.typicode.com/posts')
#mock.assert_called_with('https://jsonplaceholder.typicode.com/posts')
self.assertEqual(r, 'OK')
>AssertionError: <MagicMock name='get().json()' id='4436669720'> != 'OK'
Он почему-то не запрос возвращает, а какую-то ботву.
Решили с другом на Питоне сделать бота в вк, чтобы он выполнял различные функции. Уже 5 скриптов есть (пикрил) еще будет функция удаления всех диалогов+хотим вынести в отдельное десктоп-приложение.
Но нужно наполнение. Подкиньте идей годных.
PS: это колаб если что
В жопе мозге понимаю что взять - посчитать массив цветов и отсортировать. Но вот не пойму с какой стороны подойти. Ткните носом, плз. Чую что через имажмагик, но понять не могу с какой стороны начать
смотри либу pil
https://habr.com/ru/post/513510/
Но я не могу никак вдуплить: что такое инъекция зависимостей и нахрена она собственно нужна? Определение в гугле путанное
это короч когда ты отдаешь управление зависимостями для твоего кода внешней хуйне(фреймворку). в общем случае такой подход называется inversion of control. внедрение один из способов мутить ioc. еще есть лукап и фабрики.
мимо жабамразь
>что такое инъекция зависимостей
Это когда рантайм твоего языка ломают к хуям через, например, механизм рефлексии или кодогенерации и ебут инкапсуляцию в рот, без скрыто инициализируя приватные поля, оправдывая это программированием через конфигурацию и возможностью легкой замены классов как перчаток.
И что этот чел намутил, интересно? В чем в целом профит той еботни, что он понаписал?
Ты вечерний прием галоперидола забыл
Суть такова: есть 1 рабочий конфиг для этого скрипта, хочу прогонять тесты с его использованием, ожидаемый результат собираюсь поддерживать в отдельном файле, синхронизируя по мере обновления конфига.
Наговнякал вот такую говнину https://pastebin.com/CHp29rCM
Она работает, но выглядит поуродски.
Можно ли как то сделать загрузку данных красиво через фикстуры? А не костыли прикрученые сбоку как у меня?
>Я хочу чтоб все они пошли выполняться вместе и чтобы все результаты были готовы через 4 секунды, а вот в этом куске кода результаты вернутся через 4+3+2+1 = 9 секунд, что не есть гуд
В питоне многопоточность не многопоточность в смысле что долбить больше одного ядра в соточку нильзя. Только через процессы.
Проверка список.count(элемент) тоже возвращает 0.
Какое там решение, tuple(el) in list или (el,) in list
Сосач, почему оно не хочет писать русский текст без пикчи?? endcode utf-8 не работает
Решено
Ну, игру уже написал, осталось монетизацию прикрутить.
Мне вот книжка понравилась - хз тебе такое надо или нет https://automatetheboringstuff.com/2e
Охуенно интересно делать без примеров строк - ты совсем ебобо?
def three_files():
with open("file1") as file1:
file2 = open("file2")
str2 = file2.readlines()
file3 = open("file3")
str3 = file3.readlines()
result = []
for str1 in file1.readlines():
if str1 in str2:
for s3 in str3:
if str1 in s3:
result.append(str3)
return result
Это кривая хуета по идее вернет тебе лист строк из 3 файла.
Если найдёшь чего, то маякни - я б тоже почитал
Маленько начал учить питон - пока всё нравится, прошёл курс на курсере бесплатный от вшэ, лол, порешал задачки на гитхабе для нубов, порешал на codewars, читаю automating boring stuff сейчас и вот всё не даёт мне покоя вопрос:
Нахуя нужны классы? я всё что ни делал пока - писал через функции, прям ну вот не было нужды совсем. В чём плюсы ?
Это я не дорос просто до задач или что?
>Нахуя нужны классы? я всё что ни делал пока - писал через функции, прям ну вот не было нужды совсем. В чём плюсы ?
Если ты задаешься таким вопросом, значит пока что не нужны. Необходимость в них появится когда твоя программа разрастется до тысяч строк процедурного говнокода. Понимание когда именно использовать классы приходит только с опытом.
На курсере ебанутая система, хуй найдёшь инфу, что курсы платные, я так проебался, добился рефанда. Спишут через неделю, отвязывай карту
а что означает "доступна финансовая помощь" ? многие курсы как будто бесплатные, но я не разобрался в условиях.
Что на самом деле?
points = [ (1,2), (3,4), (5,6) ]
Как "нормально" вытаскивать из набора по 2 точки за раз и вычленять их аргументы x и y? Что-то лучше чем
for i in range(len(points) - 1):
----first = points
----second = points[i+1]
----x1, y1 = first[0], first[1]
----x2, y2 = second[0], second[1]
существует?
В поваренной книге питона есть рецепт, как запилить демона через os.fork, но вот как оперативно его запускать/останавливать? Это по хорошему надо делать через systemd для единообразия а не питоновсеими командами. Я в линухе пока не особо шарю
Ты ж в курсе, что ты вытащил только одну?
И это наводит на дальнейшие размышления: наверняка есть генератор, который позволит за раз отдавать нужное количество объектов, например нам нужно вытаскивать не 2, а 4 точки за раз и проводить над ними одну и ту же операцию
В шапку
Норм, работает. Оно как tuple принимает x,y - я верно понимаю?
points = [(1, 2), (3, 4), (5, 6)]
for (x, y) in points:
print(x, y)
это же не то шо ты хотел, а так оно распаковывает из кортежа в переменные х и у соответственно
Так я и не он :) кортежи то просто выдернуть, а что в такой форме работает я не знал
Сам написал генератор для этой херни. Как приду домой, скину сюда, мне все равно не нравится, как получилось
толсто
Кек)
import itertools
points = [(1, 2), (3, 4), (5, 6)]
generator = (p for p in points)
while True:
try:
print(next(generator))
except StopIteration:
print('generator exhausted')
break
Чем не устраивает?
Импорт мой лишний, сам тестил кое-что. Можно и в более наглядном виде и по PEP8
points = [(1, 2), (3, 4), (5, 6)]
generator = iter(points)
проебался. блять. там итератор на выходе. Короче ты понЕл
>>68408
>>68007
>>67971
ну я в прошлый раз не зометил шо тебе нужна пара координат
глянь ето
points = [(1, 2), (3, 4), (5, 6), (7, 8)]
def two_points(points):
----g1 = (p for p in points[::2])
----g2 = (p for p in points[1::2])
----point = zip(g1, g2)
----return point
g = two_points(points)
print(next(g))
print('----------')
(x1, y1), (x2, y2) = next(g)
print(f'x1 = {x1}, y1 = {y1}\nx2 = {x2}, y2 = {y2}')
print('----------')
можно попробовать еще класс генератора напейсать, но у мну пока не получилось, сам нуб еще, методы init next iter надо реализовывать
и да, глянул ща фукнцию зип, он юзает генератор списков, значит моё решение в помойку если у тя будет миллион точек
а не, я тупанул, там же yield, так шо всё зоебис
>>68007
https://ideone.com/AW8ICy
Такс, я дома, нахер. Накидал подобное. У нас есть генератор, который принимает на вход итератор и integer число, за каждый проход он возвращает именно это (или меньшее, если не хватает) число объектов
Но тут есть свои косяки и непонятки. Во-первых, с фига ли он мне пишет что тот же range не является итератором?? Чтобы все работало его нужно обязательно в iter() обернуть
Думал кстати делать raise StopIteration внутри блока except в надежде что тогда внешний цикл увидит это и прекратится, чтобы обойтись без ебучих флагов, но нихрена - лишь ошибка: RuntimeError: generator raised StopIteration
Когда нужно использовать в коде конструкцию
if __name__ = '__main__':
...
?
Также неплохо было бы добавить "дефолтное" значение для "пустых" ячеек. Например при вызове: numbered(iter(range(10)), 4) последний список будет содержать 2 значения а не 4, что может вызвать проблемы при присваивании. Поэтому юзер сам сможет задать свое дефолтное значение по типу: numbered(it=iter(range(8)), n=3, default=None)
А так значения можно принимать списком, а можно распаковывать на лету как: for x, y, z in numbered(iter(range(110)), 3)
>>68494
>>68502
https://ideone.com/vFZV0D
Вот вроде как нормальная доработанная версия. iter напрямую больше нет нужды вызывать, отсутствующие значения тоже заполняются. Можно делать что-то вроде:
for u, x, y, z in numbered(range(255), 4, default=0):
print(sum((u, y, z)))
А у тебя задача какая?
Из цикла можно просто через break выйти без флага, а сам цикл while True.
ИТТ каждый третий такой
"Хочу готовое решение, нихуя не умею, в ангельский не умею, вот".
Бич питона. Даже не знаю, где ещё такой идиотизм есть. Видимо только только с питоном, спасибо инфоцыганам. Коллега без знания всего хвастался торговым ботом, который построен на if-else и жаловался, что питон медленный, лол. Все хотят здесь и сразу. Сразу стать миддлом и 150кк в наносекунду.
Про архитектуру приложений и паттерны никто и не слышал. Думали тут как на пехе, просто добавь воды говнокод
>Про архитектуру приложений и паттерны никто и не слышал.
Слышал только про паттерны PIDOR и MVC. Я успешен?
Анончик, подскажи, я видел многие намекали что if-else типа хуевая структура организации кода, а как реальные пацаны пишут тогда? Во что она эволюционировать должна? Я максимум до чего дорос - тернарный if.
Он о том, что бизнес-логика, построенная на ветвящихся if - однозначный признак говнокода
Ну для жангодебила хватит, пиздуй DRF макакой работать или CRUDы дрочить. Через пару лет завезут кривую асинхронки и комбайн снова начнет работать, а потом начнутся очередные бенчмарки без проксирования с черрипикингом, где жанга ПОЧТИ догонит ноду и не совсем Go, мхех
Да хоть свитч сделай (обещали в 3.9, лол. Таки дошло до Гвидо) через dict/enum.
Один хуй когда логика более чем "if my_date != date.today(), и состояний объекта может быть на цикл более чем 5 if-else уже нужен рефакторинг, иначе будет спагетти-код, ещё и сам запутаешься.
Ты думаешь многие советуют из-за ЧСВ? Просто сами столкнулись в своем/чужом коде с таким. Лучше заранее соломку подстелить.
В начале можешь хуячить и так. Правда потом обиднее лезть в старый код, вспоминать какая была первоначальная идея и снова писать тесты.
Это реально обидно и времени ещё больше отнимет.
switch давно реализуется через dict вида:
selecter = {
"first": lambda x: 2x,
"second": lambda x: custom_process(x),
"third": lambda x: not x
}
result = selecter[option](input_data)
Че там этот Гвидо подвозить собрался?
>Думали тут как на пехе
В 2005 году. Современный боевой пых - это джава с динамической типизацией, ООП, SOLID, паттернами и прочим.
Сахар.
>ООП, SOLID, паттернами и прочим
Пощади, ирод
Пыхобляди это вообще особый подвид долбоебов. Понагородили в динамически типизированном языке многоэтажных конструкций лишь чтобы выебнуться и заодно доказать самим себе что они почти "белые люди" (джависты). Тот еще цирк
мимо жсмакака
Нихуя ж себе - надо записать!
Может тогда объясните как вот эта хуета работает ?
def wind_direction(deg):
direction = {0 <= deg < 20: "N",
20 <= deg <= 30: "N/NE",
...
...
...
320 < deg <= 340: "N/NW",
340 < deg <= 360: "N"}[True]
return direction
Когда мне кстати кто угодно начинает предъявлять за solid, я сразу же понимаю что это attention whore с двумя извилинами. Это что-то на уровне предъяв за 5ю нормальную форму БД
Ты просто вернул словарь весьма странного содержания вот и все
Switch что через словарь что в том же си обеспечивает быстрый доступ к процедуре и порой лучшую читаемость через параметр case. В твоем случае case в любом случае должен быть вычислен до доступа к словарю. И тут внезапно вычислять его таки надо через if. Switch тут бесполезен
Хотя в твоем случае ты вообще не туда воюешь. Тебе надо банально решается математически. Вот у тебя есть окружность и 1722 равных по величине сектора. Ты серьезно собрался хуярить 1722 if-а либо 1722 case-а? Вот тут мы и подходим к вопросу, что огромное число if-ов говорит о тупости прогера в первую очередь
кста а есть репозиторий на паттерн PIDOR?
Самое очевидное что у меня на уме на жанный момент это разновидность бинарного поиска: берем середину окружности (средний сектор, если быть точнее) и проверяем больше или меньше значение deg, отрезая таким образом половину вариантов. Повторяем по новой пока не получим единственныф сектор
Призываются математики, способные решить задачку без циклом лишь на бумаге...
Либо: создаем массив элементов Decimal от 0 до 360 с шагом base = 360 / n (n - число секторов). Все ответы у нас уже в руках то бишь. Ищем index элементов, между которыми попадает deg
Но это по-прежнему решение от дауна-прогера. Уверен, математически это будет легче
Да это понятно что метод каличный, я не понимаю что за хуйня [True] после словаря идёт? Это можешь объяснить, пожалуйста?
С помощью Python разработать программу,которая выполняет следующие действия:
1.Открывает браузер
2.Осуществляет переход на google.com
3.В поисковой строке вводит слово "новости", после чего выполняется поиск по заданному слову
4.На открывшейся странице выполняется переход на раздел "новости"
5.Вывести в терминале заголовок случайной новости в пределах первой страницы
Получилось только сделать первые два пункта. Как дальше работать со страницей в браузере понятия не имею,подскажите как гуглить эту задчку
Поиск по ключу True, что в большинстве случаев бред само по себе
Кто это навалял? Чтоб код работал надо при каждом новом значении deg инициализировать новый словарь. If и то профитнее
Учи жангу чтобы не быть батхёртом, чел
Анон, напомни, пожалуйста, как решать следующие задачи.
Есть список (например, из 22 элементов), есть окно (например, из 5 элементов, т.е. длина списка не делится нацело на длину окна).
Надо окном извлечь все элементы из списка, включая последние два, которые это окно полностью не заполняют. Как это сделать?
теперь понял, спасибо
Когда ты хочешь, чтобы модуль по разному себя вел, когда ты его импортируешь из другого модуля, и когда ты запускаешь этот модуль как самостоятельную программу. Код в блоке после строчки "if __name__ == '__main__':" будет выполняться только, когда ты запускаешь данный модуль как основную программу, а когда ты импортируешь этот модуль из другого модуля, этот код выполняться не будет
https://www.codewars.com/kata/5571d9fc11526780a000011a/discuss
да
Как первый курс, когда ничего не знаешь - ОК (если жопа не сгорит на тестовых заданиях), если есть основы - такое себе.
ладно.был не прав. и вправду через селениум делается. но все равно не могу доделать таску. застрял на том,как рандомно вывести заголовок новости в консоль.
подскажите хоть как примерно это реализовать?
сорян за скрин кода,а не в pastebin
пока только в голову пришли вложенные классы и properties
Изменилось ли что-то в Питоне?
Почему код из __init__.py не исполняется неявно при исполнении модуля?
Получи список заголовков, а потом выбирай с помощью функции choice из стандартного модуля random
мне нравится
Хорошо для хоббистов или всяких тыжпрограммистов, можно найти решения для типовых задач. А так ничего особенного.
>>69318
Каждому питонисту в том или ином виде стоит ее прочитать. Но всерьез думать, что это сделает тебя YOBA-разрабом - быть дауном
Для более глубокого погружения стоит читать Python Cookbook от Бизли (ебана, уже полгода работаю на галере, но иногда таки возвращаюсь к этой книге, действительно набор годных рецептов есть). А так - начинай потом хуярить доки фреймворков, которые тебе нужны и сразу же параллельно пиши на них свои проекты, учись на практике и не корми инфоцыган
ну python cookbook это само собой тем более шо от бизли, решил узнать шо анон нашел в этой книге, а так спасибо за ответы
Спасибо.
@
TypeError: 'type' object is not subscriptable
Спасибо, уже не надо.
for i in range(0, len(sorted_dict), 5):
dict_slice = list(sorted_dict.keys())[i:i+5]
a = list
for elem in a:
print(elem)
Ты определил тип, но на задал начально значение переменной, отсюда и ошибка. Хули тупишь? Ты бы и в жаве и Go говнокодил.
Так это ты петух зарезервированные имена для переменных используешь? Ох, мудила...
Бле, всегда казалось что срез выплюнет ошибку, если значения выскочат за индекс листа - ан нет, работает =.=
OSError: [WinError 10048] Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)
То есть этот петух сделал app.listen(8888) как я его и просил, но после перезапуска сокет 8888 остался занятым. Че за хрень? Как его "почистить"? (это винда если че)
Явно - нет. Раньше вроде без этого обходилось и все работало, а сейчас че-то он не закрылся
Где в винде его вручную ебнуть?
У него есть время, которое он будет занят, что-то около 3 минут. Чтобы пакеты все дошли.
Что ты дурачок.
Посмотри, не висят ли питоньи процессы.
скорее дата сатанистов и девопсов ну и прочих кому надо два раза ударить хуем по клаве и сделать скрипт
Думаю что делать дальше, как перейти от консольных программ по типу "посчитай сколько в телефонной книге Ивановых не считая Иван Ивановичей" к чему-то серьезному. Джангу/фласк учить или задрочить стандартную библиотеку чтоб от зубов отскакивало или что еще?
Единственное что приблизительно похожее находил это https://github.com/terrencepreilly/darglint DAR401, но это совсем не то.
Учи фреймворки(синхронные и асинхронные), пиши сервисы с ними и всё будет ок. Параллельно с этим основные библиотеки выучишь.
dict1 = {'a' : (1, 2), 'b': (1, 5)...}
Надо отфильтровать словарь по определённому условию, например, если первый элемент значений в промежутке от 1 до 10.
Пробую:
dict2 = {key:val for key, val in dict1.items() if val[0] >=1 and val[0] <=10}
Пробую len(dict2), а он мне 0 выдаёт.
Что не так?
Как это сделать? Объясни тупому, пожалуйста
а, да, туплю ))
Может переберешь просто словарь первый в цикле и через условие прогонишь? Добейся чтобы так работало, потом засунешь уже в такую форму
Параметр то добавить я могу...
Не понимаю, что от меня вообще хотят.
Что эта функция должна делать в конечном итоге?
ну добавь и запихни в range после hight чтоб было range(start,stop,step). Функция выглядит как пустышка абсолютная которая циклит до ручного интерапта.
Откуда задание? Явно из контекста вырвал.
Есть диапазон 0,1,2,3,4,5.
Тебя просят просто ввести число из него? Похоже что так. Какой дальше алгоритм знаешь только ты... Потому что... вырвано из контекста
https://docs.python.org/2/library/itertools.html#itertools.ifilter
Уже придумали и сделали за тебя.
Ну в range шаг по умолчанию и так равен 1, я хрен знает что за секретная у тебя такая книга, что ты только куски показываешь. видимо все действия приведут к единому приложению.
Ты полный долбоеб. ask_number из игры "отгадай число" и к "крестикам-ноликам" отношения не имеет.
https://skobki.com/python-zadachi-i-resheniya-glava-6-funktsii-igra-krestiki-noliki/
Prepare your anus! Fight!
lvl 0. знать о docstring, pep8, стандартные либы, особенно всякие collections, asyncio, functools, socket, queue и т.д.
lvl 1. ознакомься с попурярными алгоритмами (сортировка и поиск) и структурами данных, как они устроены, поделай свои связанные списки, деревья, но глубоко не залезай, оно тебя сожрет
lvl 2. базы данных, postgres, советую задрочить индексы, потренеруйся с сложными запросами, всякими join и прочим
lvl 3. сделай 5-10 полноценных проекта на django, django-rest, django-channels, интернет магазин там какой нибудь, https://github.com/Hexlet/ru-test-assignments
lvl 4. git, docker, travis и покрыть тестом свой же код pytest, unittest (ради зелененьких бейджов в гите, ы)
lvl 5. читаешь "карьера программиста", много вопросов покрывает для собесов
lvl 6. пиздуешь по собесам, нарабатываешь скилл прохождения, корректируешь скиллы, решаешь задачки на leetcode
и да, не советую говнокодить в git, проекты тут должны быть как ебаный алмаз, даже самые простые типа ЕБУЧИЙ-ТУДУ. как минимум должно быть внятное README, без всякого говна в репозитории, скрытых папок типа .idea и прочего дерьма. переменные окружения держи в env...
короче советов дохуя можно дать, тебе главное нарабатывать свой опыт, наступать на грабли. учится и кодить, кодить и учится.
Более того, я и не собирался её "дорабатывать" для крестиков-ноликов.
Первое задание указано безотносительно какой-то игры. Просто доработать функцию. Этой функции можно указать дефолтный параметр step = 1.
Я не могу понять, какую задачу такая функция должна выполнять и что они вообще хотят.При чём тут вообще шаг, если функция просто запрашивает аргумент - целое число для переменной response. до тех пор пока он не в заданном диапазоне. При чём тут какой-то шаг!?
https://ideone.com/40MBo4 - код
https://mangaplus.shueisha.co.jp/viewer/1007477 - сайт что пытаюсь парсить
Я тупой, оно брало flex высоту и по ней обрезало изображение, если задать ручками то вроде норм
Какой пэт проект заебашить, чтобы он был максимально полезен при устройстве на работу?
Ну хотя бы направление? Джанго или как-то в опен сорс проект попробовать заехать или еще че-то?
микросервисный бигдата блокчейн по торговле криптопирожками у вокзалов с машинным обучением
Без шуток, если нахуяришь как можно больше хипстерских технологий и оно будет работать, тем охотнее жадный кабанчик пустит тебя приностить ему бабки.
Это сраный учебник. Просто для тренировки может быть.
Да пиздец, наворотили хуйни, чтобы просто так сохранить пикчи нельзя было, в итоге ебаная читалка просто шакалила картинки, которые у них же в нормальном качестве. Добавили разрешение пикч - все равно у некоторых шакалит, ууу, сука.
ну ёпта, дай каждому клиенту свой сервер))
ошибка из дебага "sequence item 0: expected string or Unicode django"
user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=LABELS['user'])
@receiver(post_save, sender=MyModel, dispatch_uid='active')
def active(sender, instance, kwargs):
if instance.note and MyModel.objects.filter(pk=instance.pk, user=instance.user, note=True).exists():
email = EmailMessage(
subject='%s Тема' % settings.EMAIL_SUBJECT_PREFIX,
body=('%s измененна ' % (instance.pk)) + (instance.message),
to=[instance.user],
)
email.send()
post_save.connect(active, sender=MyModel, dispatch_uid='active')
>>69829
Проблему решил. Оказывается в джанге кривой русский перевод в стандартных формах аутентификации, хуй знает чем это объяснить. Чтобы починить частичный перевод нужно найти проблемные строки msgid на английском и закопипастить их заново, затем сконвертировать файл с переводом в бинарик с помошью msgfmt -- и вуаля. Надо им ишью зарепортить, охуели блядь.
Разница-то сука ключевая (но большинству как и мне скорее всего не придется с этим столкнуться): если создать объект через obj = range(10) то по нему нельзя будет пройтись, вызывая next(obj) - с другими итераторами все работает, например с itertools.cycle
{"key1": "key2", "key2": "key1"}
По-другому никак?
По-другому никак, но вероятно строки и так будут лежать в одном месте в памяти, так что это оно и есть.
Сначала учишь pandas наизусть (это означает, что ты должен будешь знать все методы наизусть, а не открывать стак каждый раз)
Потом всякие skikitlearn'ы и прочие тензерфлоуы
Но ключевой библиотекой будет pandas
Нихуя ты жоский. Нормальные люди сначала смторят доку и стак каждый раз, и через время знают все методы наизусть.
А че такого?
п.с. сам-то я на джанге не пишу, но интересно что тебе так не приглоянулось в нем, для своих задач норм же
Так, значится... У меня небольшая идея по написанию "чата с незнакомцем": юзер заходит на основную страницу ресурса и коннектится с другим таким же юзером, теперь у них двоих приватный чат, где они могут общаться и даже пересылать фотки хуев, если надо. Это то, что происходит на фронте
На бэке собственно и идет основная работа, то что мне надо написать: сервер принимает ajax-запрос от нового юзера, находит другого такого же юзера, который ожидает, соединяет их при помощи вебсокетов, отправляет каждому из них идентификаторы нужного вебсокета, и чат начинается
А теперь мякота: КАК это намутить? Вот подобие каркаса, который я накидал:
https://pastebin.com/ibjYWSZj
я выбрал tornado, но это вообще не суть, принцип бизнес-логики везде должен быть один; MainHandler принимает post-запрос в котором лежит рандомно сгенерированная на фронте строка, кладет ее в общий пул waiting и начинает каждые 0.1 секунды вытаскивать из этого пула рандомное значение (гениально, правда? пиздец, если быть точнее, белый человек сделал бы асинхронную очередь и ожидал бы данные через await (учитывая конечно что в пуле будет точно лежать тот самый идентификатор тоже)) когда значение таки подберется, мы помечаем строки-идентификаторы как занятые, убираем их из пула waiting и запиливает вебсокет-соединение: по одному на каждого юзера (то есть юзер отсылает данные на сервер через вебсокет, серв читает сообщение и пересылает его в другой "спаянный" вебсокет второму юзеру, и наоборот)
Норм? Че пофиксить?
Также я вот тут писал про ебанутый вид словаря: >>71018
Он конечно же нужен, чтобы хранить там парные соединения для вебсокетов. Идентификатор1 ссылается на Идентификатор2 и наоборот, каждый из них можно легко найти по нему же как по ключу. Когда удаляется один ключ, удаляется и второй. Чтобы установить идентификаторы достаточно установить лишь один из них как:
pool = PairedConnections()
pool[idn1] = idn2
Операция pool[idn2] = idn1 выполнится самостоятельно
Конечно же надо учитывать, что соединение может быть "в состоянии ожидания" и ссылаться на None. В таком случае пары у нее нет
Вот код основанный на питоновском словаре, судя по тесту в конце вроде работает:
https://ideone.com/U9VZ03
>Какой самый простой способ проверять является ли одно изображение продолжением второго? Единственное что приходит в голову - какая-нибудь простенькая нейронка на каком-нибудь тензорфлоу, но никогда особо этим не занимался
Мне кажется это будет не простая, а ебейщая нейросетище
>Какой самый простой способ проверять является ли одно изображение продолжением второго?
Считаешь разницу RGB между соседними пикселями (один пиксель на одном изображении, второй на другом), усредняешь значение для всех пикселей на границе изображений. Если разница небольшая, то изображения являются продолжением друг друга.
А ты хорош!
Сделал тупо по mock библиотеке и замокал класс. Тупо, но что хотели, то получили.
>>64675
Я тупой, проебался:
https://stackoverflow.com/questions/63314181/selenium-python-upload-a-file-in-window
> Селениум может перейти в мобайл -> десктоп, но не наоборот
pyautoit
Тоесть у тебя всплывает окно операционной системы, в которую ты хочешь ввести символы с помощью инструмента для работы с браузером, я все правильно понимаю?
Пацаны, я тут провел исследование насчет дейтвия try/except и if. Если эксепшнов мало, то try/except блок быстрее примерно на 20%, а если же эксепшны вылетают постоянно, то отсос try/except составит в 1200% и более епта. В примере выше for через if выполнился за ~2 секунды, а тот же for через try за 25 с...
да забей это хуйня, если запускаешь скрипт из той же директории то не надо, -м дает возможность исполнить скрипт импортировав как модуль,
python zalupa/govno/pizda.py
python -m zalupa.govno.pizda
вот эти 2 хуйни делают по сути одно и тоже
интересно, а если не сохранять данные об эксепшоне в е, а просто экцепт:пасс будет такая же разница?
Не ну в целом то оно конечно понятно, там же внутренности по сути поднимаются, а не просто пару проверок на истиность, но цифры действительно внушительные
Как перейти к созданию ботов? Я недавно начал изучать питон, какие-то основы понимаю, но вот мне сказали что для ботов нужно учить библиотеку, я открываю нужную библиотеку с описанием модулей типов етц и нихуя не понимаю. Может есть какой-то промежуточный этап?
могу назвать 2 случая когда очень полезно
1 когда нужно вызвать pip и питонов этих в системе не один и так будет гарантия, что будет вызван нужный pip
2 Запустить встроенный модуль. Например зайти куда то и
python -m http.server --bind 127.0.0.1 5000
даст нам по бырому вебсервачок для этой папки.
Анон, я может не так понял, но как именно усреднять значение на границе? Т.е. я вычисляю разницу двух изображений, а на втором просто беру 1 из выбранных сторон и делю каждый пиксель на высоту изображения? Сначала подумал сложить все пиксели, поделить и вывести средний цвет с обоих сторон, но чет хуйня какая-то выходит
Нихуя, спасибо, анончик. Добра и апельсинок тебе.
Можешь, пожалуйста, рассказать о проекте? Тоже хочу борду для теста запилить.
При создании класса я даю ему имя второго класса, с которым он должен быть "связан" вроде этого:
def __init__(self, name, pair_name=None):
----self.name = name
----self.pair = self.__class__.getinstance(pair_name) # как-то надо достать экземпляр с определенным именем, но как?
Тебе список или экземпляр по некоторому параметру? Если второе, то делай словарь и пихай туда экземпляры при инициализации.
>Анон, я может не так понял, но как именно усреднять значение на границе?
Допустим, у тебя есть две части изображения, каждая шириной в 1000 пикселей. Из верхней части тебе нужно извлечь нижний ряд пикселей:
row_1= upper_part[-1]
Из нижней, наоборот - верхний ряд пикселей:
row_2 = lower_part[0]
row_1 и row_2 имеют shape (1000, 3), поскольку ширина картинки 1000 пикселей и пиксели записаны в RGB. Дальше просто считаешь разницу между каждым соседним пикселем и усредняешь значение при помощи Numpy:
value = np.abs(row_1 - row_2).mean()
Полученное значение сравниваешь с некоторым порогом. Если больше него, то изображения не являются продолжением друг друга, если меньше - являются. Сам порог можно либо подобрать руками, либо при помощи машинного обучения, что в данном случае очень просто, поскольку можно написать скрипт для создания датасета.
Понятно, значит я примерно правильно понял, просто подумал что надо сравнивать не с каким-то пороговым значением, а со средним значением пикселей на одной из границ. Ну тогда у меня какая-то хуйня немного получается, может быть из-за того, что все пикчи черно-белые.
Тестил вот на пикчах отсюда https://mangaplus.shueisha.co.jp/viewer/1007310
Вот код - https://ideone.com/bQZb4O
По результатам выходит, что среднее значение у страниц, которые должны быть 1 большой не обязательно является минимальным или максимальным. Так для пикч со ссылке выше получается: 1-2: 63.64, 2-3: 89.55 - должны быть одной страницей, 3-4: 132.97, 4-5: 53.21, 5-6: 45.22, 6-7: 107.68, 7-8: 119.89
8-9: 120.21 - должны быть одной страницей, 9-10: 108.46, 10-11: 65.11, 11-12: 21.20, 12-13: 81.72, 13-14: 82.43, 14-15: 158.41, 15-16: 158.08, 16-17: 82.90, 17-18: 118.89, 18-19: 92.19
sum(i for i in range(int(8e9)))
чтобы посчитать гипотетическое количество количество соединений, которое получится, если каждый житель Земли установит приватное соединение с каждым другим жителем. Комп пидарюга подвис на хуялион минут. И дело тут не только в Питоне (ну и в нем канешн тоже). Как это задачу решить математически "на бумаге" без циклов? Это реально?
С кодом ты явно перемудрил, и все можно было сделать намного проще.
>По результатам выходит, что среднее значение у страниц, которые должны быть 1 большой не обязательно является минимальным или максимальным
Скорее всего слишком много шума и мелких деталей. Нужно упрощать картинки. Снизить разрешение, немного размыть, и прогнать через Otsu threshold чтобы остались только два цвета. Что конкретно сработает сразу не скажешь - надо экспериментировать. Я бы для начала поискал, занимался ли кто-нибудь подобной проблемой.
Подскажите пожалуйста, почему текст из файла не прочтён и почему выдаёт ошибку.
Потому что либо автор еблан, либо ты не умеешь копировать
Интерпретатор даже говорит тебе в какой строчке ошибка и как ее пофиксить (только не говори, что не знаешь ангельского...)
Ты файл заново не открыл (пытался открыть, но таки не открыл). Прочитай код заново и сравни код посимвольного чтения файла с чтением целиком
Прост на будущее: юзай менеджеры контекста для открытых файлов
with open("read_it.txt", "r") as text_file:
----do_stuff()
Загугли. И читай логи интерпретатора, он тебе сам расскажет, как фиксить ошибки
Я исходил из того, что код в книге не может содержать ошибку, до сих пор не понимаю, как такое возможно.
Действительно, проанализировав я понял, что предыдущий кусок кода закрывает файл, а новый его не открывает.
Я изменил строку
open("read_it.txt", "r", encoding='utf-8')
на
text_file = open("read_it.txt", "r", encoding='utf-8')
Теперь результат такой.
На сколько я понимаю, кодек utf-8 по какой-то причине не может что-то декодировать... До этого мог, а теперь нет.
Спасибо за совет про менеджеры контекста. В будущем...
А этот код писал не я, я его только копирую и анализирую с помощью книги.
Ебля с кодировками она такая
программа не выводит на экран первую букву?
Если передать 2, выводит первую букву, вместо первых двух и т.д.
Это типа как индексация, первый символ нулевой?
>Насколько, по-вашему, рынок пресыщен предложением со стороны исполнителей
Как ты блять думаешь, если сейчас уже мамашки в декрете питон знают и рвутся в айти?
Видимо, у тебя что-то с файлом, может, кодировка необычная, или что. Он же у тебя напечатал что-то, это тире или точка, посмотри, может это и есть первый символ в твоем файле.
Попробуй применить стандартный модуль pathlib
Ну это-же сегмент индусского быдлокода. А какие мидлы, например, задачи решают?
А на фрилансе лычек и нет
ебани readline
Перекатываются на Julia и Go.
Всем, кто любит орать про бенчмарки которые "показали однозначное превосходство ФреймворкаА над ФреймворкомБ"
там же правильный комент
"Молотком стена красится медленнее, чем кистью, я проверял, вывод - молоток не нужен. Именно так выглядят подобные холиварные статьи. "
Посчитать лимит символов для левой части
Если левая часть меньше лимита символов, добавить пробелы
Если левая часть больше лимита символов, отобразить первые n символов, где n — лимит символов
На следующих строках отобразить всё остальное, но максимум n символов на каждой строчке
Суть в том что это доработка программы-магазина которая выдает чек.На пике 1 показан код где нужно внести изменения по заданию, а на втором результат который сейчас.Собственно буду благодарен любым подсказкам как это можно сделать ньюфагу, или чаво можно почитать чтоб понять что делать.
max = WIDTH - len(right)
left = left.ljust(max, " ") if left < max else left[:max]
# Идея такая: если меньше максимума то добиваем пробелами (ljust сделает это справа, можешь поменять на rjust). Если больше, то делаем срез строки
Дальше сам
Расскажите насколько я проебался, не взял вашего лутца, или еще какую тру книгу.
Нет, но она у меня в закладках тоже есть.
впринципе для обучения пойдет, я коенчно не читал первую половину книги, так как прочитав одну книгу по питону, у остальных можешь половину скипать, так как там азы все время пишут
но я видел проэкт с игрой из этой книги и он написан просто ужасно, такое чувство что автор не питонист, а какой то джавист в смеси с еще какой то функциональной хуйней,
а вот с автоматизацией мне понравилась книжка, правда первую половину я опять же не читал, а вторая начинается с регулярочек, который при первом знакомстве могут показаться той еще ебалой,
лутц это конечно пиздец рофлан поминки тем кто решился его читать, основная идея книги это повторение мать учения видимо, впринципе очень подробно, но пиздец как скучно
Первую часть про совсем язы я тоже пропущу, наверно. Я не программист, но приходилось делать всякие штуки типа парсера текстовых файлов/xml/выгрузка данных из бд когда я загуглил как сделать мне нужное на оракле, то просто охуел и не встал, оказалось проще написать скрипт на коленке 50 строк со сторонней библиотекой. В том числе и на том же питоне. Короче всякие такие одноразовые дрочилки, которые были нужны по работе.
Но все, что я делал, было без понимания. Тупо копипаст со стаковерфлоу и прочих готовых примеров. Есть у меня желание в будущем, если получится, пойти по карьере программиста. Если не получится, то хоть для себя поучу, чтобы эффективнее решать свои мелкие задачи.
По поводу регулярок - я давно себе зарубил на носу, что если решил какую-то проблему решать регулярками, то у тебя уже две проблемы.
Стараюсь их не использовать, если нет острой нужды. Мне читабельность и реюзабельность важнее, чем скорость и меньший объем кода. Даже с онлайн-тулзами отладка этой шняги у меня частенько занимала непозволительно много времени.
Я не твой собеседник, но хочу заметить что раньше тоже блевал от регулярок, но потом открыл для себя онлайн тестеры вроде https://regex101.com/ и re.VERBOSE, блять, я хз как вообще люди живут без этой штуки - это просто О-ХУ-ЕН-НО упрощает понимание регулярок и что важнее - читабельность кода.
для примера сравни:
([a-zA-Z0-9._%+-])?([a-zA-Z_ ])(\d{1,20})([a-zA-Z._%+-])?(\.[a-z]*)
и скрин.
Я regextester и rubular раньще юзал.
А как тут сделать автогенерацию комментов к коду? Чет не вижу.
Может не так выразился, на https://regex101.com/ есть автогенерация коммента к регулярке, чтобы как на скриншоте было?
Чел, это мои комменты если что...
На regex101 там автокомменты справа, но они не то чтобы очень информативные, если честно.
Это копия, сохраненная 23 февраля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.