Это копия, сохраненная 21 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>1967018 (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: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
Исходник: https://dumpz.org/bASGKD8cCFDf
Самое свежее учи, потому что сейчас всё активно перепиливается под ASGI и, скорее всего, скоро это будет стандартом.
Лучше изучать новое.
Базовая часть там общая, больших принципиальных изменений нет, джанго-3 даёт какие-то дополнительные возможности по асинхронной поддержке, но немного замудрённые. Тажеловесно и требуется понимание того, что ты делаешь. Ими можно и не пользоваться и писать полностью в старом стиле.
С асинхронным программированием лучше разобраться сначала отдельно, вне джанго.
Кто-нибудь бы пункт для шапки про джангу проапгрейдил.
Но сейчас конкретно в питоне понял, что у меня очень просела математика, решаю задачи и часто больше думаю не над кодом, а над математическими действиями. И это на элементарных задачках, сейчас вот дошел до циклов if.
Короче вопрос в чем, работает ли тут тема с прорешиванием огромного числа задач и соответствующим повышении скилла, или если не прет, лучше вообще не соваться?
> все задачи либо у кого-то брал, либо делал на подобие
Так и продолжай, в чем проблема?
https://www.freecodecamp.org/news/the-10-most-popular-coding-challenge-websites-of-2016-fb8a5672d22f/
Из списка советую выбрать хакерранк(для новичков, но сложность заданий очень быстро наростает), проект ейлера(сложные задания), SPOJ.
32 минуты назад, кстати, стартовала международная олимпиада гугла по программированию.
https://codingcompetitions.withgoogle.com
Банальный литкод как раз годен для таких задач. Если hard на алгоритмы, то easy и частично medium как раз вот на базовое кодирование.
У тебя main нет во view, есть text.
Я тут тоже джангу стал изучать, если хочешь можно скооперироваться типо peer-to-peer leaning
*в шаблоне
Да я начал пол часа назад джангу, от меня мало толку будет.
Поменял в index все на text и все равно нихрена не выводит.
endfor слитно пишется
Вторую книгу Лутца? Ну, это 2010 год. Standard Library by Example - 2017 год, что немного лучше.
Рекомендовал бы официальной документацией и гуглом ограничиться, параллельно работая над каким-то проектом, а то уйму времени на воду потеряешь. А уже когда надобность в инструментах по-сложнее возникнет, вроде асинхронности, тогда к книгам обратиться - строго по теме, чтобы было.
Да мне не к спеху. Я вообще сейчас открываю книжку по Пайтону, открываю IPython и под фортепианный эмбиент перепечатываю примеры, представляя, что играю на фоно. А еще в уголке экрана включаю видео с кабины поезда, катящимся по заснеженной Норвегии. Кайф.
>параллельно работая над каким-то проектом
В этом-то и проблема: то, что я хочу запилить - достаточно сложно, тут надо хотя бы какую-то книгу по микропроектам пройти. Знаешь годные книги по проектам?
А также, какие будут дополнительные рекоммендации по тому, что можно добавить сюда ещё. Пока программа умеет только вычислять площадь треугольника и цилиндра, но надо что-то ещё, мб какую-нибудь вшитую справку для егэ и т.д.
Automating boring stuff. Остальное по хотелкам. Хочешь написать скрапер рутрекера на докачку серий текущих сериалов с выводом в телегу? Я никак не могу спокойно потратить на это время, завис с заказчиком на хуйне полной
мимо
Понял, там инфы покурить надо много. Займусь
Да, все так.
>нормальный GUI
Самый простой вариант - при помощи tkinter. Но по-моему для GUI питон вообще лучше не использовать.
tkinter ограниченный, но простой, встроенный и без лицензии.
В PyQt, мне кажется, лучше не лезть, если не работал с обычным Qt, который на C++.
https://dev.to/amigosmaker/python-gui-pyqt-vs-tkinter-5hdd
>А что насчёт PyQT5?
Для твоей задачи перебор. Вообще, писать интерфейсы в одиночку лучше всего на электроне. Но если интерфейс совсем простой, пофиг на дизайн, и прямо обязательно нужен питон, то юзай tkinter.
Сначала треды научись делать, а потом интерфейс делай.
С GUI надо разбираться отдельно, сначала научиться работать с GUI, потом уже прикручивать. GUI требует изменения структуры программы, это не тоже самое, что input из консоли добавить.
Если никогда не делал gui под что-либо, то нужно немного времени, чтобы разобраться с логикой, там немного непривычно будет со всеми этими сообщениями от окон, циклом обработки сообщений и т.п.
В продвинутом случае понадобятся треды, но в твоём случае скорее всего они не нужны.
Пожалуй присоединяюсь к тому, чтобы сначала с tkinter что-нибудь поделать.
Понял, тогда постараюсь сначала ткинтер покурить, потом уже что-то посерьёзнее сделаю. Просто есть идея, чтобы когда ищешь площадь цилиндра, например, по заданным параметрам 3д-моделька показывалась сбоку. Или чертёж 2д-фигуры со всеми указанными параметрами на этом же чертеже
>GUI требует изменения структуры программы, это не тоже самое, что input из консоли добавить.
Надо стремиться к тому, чтобы было как input из консоли добавить, делать все модульным, чтоб вот была основная программа, у нее был известный интерфейс для общения с другими модулями, нужен консольный интерфейс, сделал модуль для консольного интерфейса, нужен десктоп - сделал для десктопа, веб - сделал для веба, и подключаешь эти модули по необходимости, а центральный код самой основной программы вообще никак не трогать.
В ipython, а значит и в jupyter, есть магическая команда %store
https://ipython.readthedocs.io/en/stable/config/extensions/storemagic.html
Пользуюсь джанго орм в асинхронном скрипте, вызываю функцию через sync_to_async в которую передаю ключ модели, меняю 2 поля модели, сохраняю, но она не сохраняется, код:
https://pastebin.com/1WY6gr6z
Да, там больше логов, я просмотрел все, наверное, что мог, все должно работать, все логи печатаются, и 2 поля до присвоения и после через саму модель и правильно отображается ее ключ, но в базу значения не попадают, я просто уже даже не предстовляю в чем может быть проблема, натолкните меня
без практики нихуя не выйдет. пробуй снова, потом уже и получится
Ладно, тогда отклоню оффер и останусь бездарной питочмоней.
можно, конечно, сделать sorted(array, key=lambda x: (x[1], x[0])) и дойти до последнего элемента с максимальным числовым значением, но мне не очень нравится это решение
reverse=True забыл, да
в таком случае сортировка сначала будет по строкам, потом по интам, что не то что мне нужно
а, нет, ошибся, все в порядке, только в другом проблема - минус для строк неопределенная операция
Сплит возвращает список, а [0] - доступ к первому элементу этого списка. По смыслу там (a.split())[0]
i это индекс объекта из списка, row его содержание
Это set. Который set() или который a={2,3,4}
Что-то вроде std::unordered_set из c++ - набор неповторяющихся неупорядочненых значений.
Ты всегда можешь набрать print(type(main_diag)), кстати.
>в порядке убывания чисел
Мимо прочитал. Тогда чем sorted(l, key=lambda x: (x[0], x[1]), reverse=True) не устраивает?
Если хорошо понимаешь, как работает веб, есть опыт с html, и нормально плаваешь в питоне, включая ООП и т.п. вещи то реально.
Вопрос ещё на каком уровне "знать джангу".
имеется
path = "/opt/backup/"
command = "du -sh --time " + path + ""
args = shlex.split(command)
p = subprocess.Popen(args)
print(p)
в выводе ловлю
du: cannot access '/opt/backup/': No such file or directory
хочу получить вес каждой директории и файла
/opt/backup/
db
123123
log
123123
Попробую угадать - операция в БД происходит в отдельном потоке, какая-то часть конфигурации сделана в другом потоке, и некоторая часть стека (Django ORM или коннектор к БД) не готова к такому положению дел. Документация (https://docs.djangoproject.com/en/3.1/topics/async/#asgiref.sync.sync_to_async) постоянно указывает на то, насколько это нестабильная конструкция.
Думаю, это можно обойти, поддерживая отдельный поток (процесс) для записи в базу, в котором явно будут создаваться объекты для работы ORM (соединения и т. д.). Общение - через какую-нибудь очередь.
В целом запрос выглядит просто, и даже если эта БД создавалась через Django, ей все равно можно манипулировать через другие, асихнронные по умолчаию, библиотеки.
Нахуячил решение для задачки https://leetcode.com/problems/jump-game-ii/ особо не думаю и внезапно оно прошло, но я че-то сам не въехал как. Тут надо найти наименьшее число переходов, но в коде это никак не учитывается - просто обычная рекурсия
Задумался что значит вообще знать джангу? Одно дело уметь рендерить темплейты через функциональные вью, другое писать на drf, третье писать свои бекенды для авторизации, паролей, пермишшоны, мидлевери и прочее, ну а предположим все это умеешь, что дальше будет знать джангу?
Учитывая что другалек в треде "изучает рест", в его случае идет речь о понимании устройства хеловорлда на джанге и какой нибудь hello-world app, а у тебя вопрос философский, на уровне с какого момента можно говорить что я знаю пытон?
Оказалось все гараздо тупее и тривиальнее, хотя отчасти и правильно, я наговнокодил так что многие названия очень похожи, хотя и значат разное и просто загружал объект заранее из бд, без доп полей, потом я про это забыл и в эту функцию передавал ключ модели и сохранял поля, а потом оказывается есть последняя строчка про которую я забыл, которая меняет поле той модели, которую я загрузил в начале, той модели, в которой нет доп полей и потом он ее сохраняет, т.е я сначала сохраняю с полями, а потом без, а ощущение словно поля просто не созранялись, час-два точно убил на этот баг
Ну под "знать джангу" я скорей бекенд подразумеваю. Судя по задачам заказчика, надо будет парсить хмл разной структуры, делать запросы к разным бд, и результат отображать в браузере + реализовать правку этих сущностей в сурсцах.
>на уровне с какого момента можно говорить что я знаю пытон?
Ну если какой-либо синглтон можешь запилить без подсмотров, то можно сказать что знаешь. Остальное дочитаешь.
ETL а чистом виде, на фреймворки не смотри. Большинство проектов такие, ну стэк только меняется.
Может только задачи другие. Типо M2M (ещё кто-то помнит о таком?) безучастия в процессе человека.
Ну джанго это желание заказчика. Пока не вижу, где он там должен применяться, я вообще подумал, что под решение его задачи нужен какой-нить апач айрфлоу и редис, но с обоими не работалю
Хороший вопрос как у тебя весь этот обмен данными будет устроен. В первую очередь как и откуда ты будешь брать xml, как они к тебе будут попадать в движок.
Джанго это CRUD классический. Для сервисов он не удобен.
Джанго хорош, когда тебе надо работать со сложной SQL базой, делать массу связанных страниц, иметь админку по управлению контентом.
Когда надо, например, слушать какой-то сокет-вебсокет и брать оттуда данные, сопутствующую активность по приходу проявлять, то вот совсем на это не рассчитан.
Лучше какой-нибудь aiohttp под это использовать.
Ну вот я так недавно после мини-отпуска, на эмоциях и из-за сжатых сроков повесил боевую базу.
>>79494
Пока сам не понимаю, но расти хочется, поэтому наверно попробую вкотиться в это. Если обосрусь за испытательный срок, так обосрусь, зато опыт. Тем более если заказчик что-то нашёл в моём опыте, значит он готов идти на такие риски.
Задача: выводить минимальный лог (время + ключ) в админ панель.
Как я хочу сделать: есть модель User с полем secret_key ключик используется в заголовке http для доступа к АПИ. Я хочу создать модель Call с полями:
- key = ForeignKeyField("User", on_field=secret_key)
- date = datetimefield(auto_now_add=True)
Такая, грубо говоря, сводная таблица. И ее с сортировкой по времени в админку выводить.
Но даже в моей голове это выглядит как велосипед. Что посоветуете?
> Тем более если заказчик что-то нашёл в моём опыте, значит он готов идти на такие риски.
На самом деле самый вопрос в том, насколько заказчик адекватен. Там в команду берут, где ты не один прогер, или ближе к фриланс работе, где ты единственный исполнитель.
Если в команду, то норм.
Если ты единственный исполнитель, то проблема может быть в том, что заказчик вот не компетентен совсем. Он что-то слышал, что-то представляет, ему кто-то что-то сказал, вот он и предлагает. Но не понимает, что сложно а что просто, откуда какие проблемы, и т.п.С такими довольно тяжело бывает, но тоже работа и в первую очередь опыт какой-то.
Модель как модель, простая и обычная.
Для логов есть специальные инструменты, но это для хайлоада или больших данных актуально.
Твоя модель хороша и другого не требуется, если ты эти логи хранишь постоянно и их не очень много.
Плохо тогда, когда у тебя в итоге 90% данных это твои логи, тебе их надо как-то чистить и т.п.
Там уже есть команда (архитекторы, девопсы и т.п.), меня берут на позицию разраба бэка, с уклоном в бд. Сам я дата аналист/дата недоинженер, ментора там не будет, вся работа через лида/прожект менеджера, который меня и собесил.
Но как питухон разраба меня берут первым.
856x480, 0:16
Дублирую вопрос. Минут 25 сидел и думал над уравнением 4 класса, не дошло. Посмотрел решение, не дошло. Пошел смотреть на ютубе объяснение решение задачи, и только потом стало все понятно. Правда нужно отметить, что из школьной математики я помню только формулу дискриминанта, формулы сокращенного умножения, многочлены, таблицу умножения и теорему Пигора.
Короче после этого словил фрустрацию и долго не мог прийти в себя, но все-таки убеждаю себя в том, что если подтяну элементарную математику и надрочу руку в таких задачах, то проблем в обычной работе в будущем возникнуть не должно.
Вроде и тест на IQ проходил, причем несколько раз с разной периодичностью, выдавало от 110 до 114(что вроде как считается за норму). Пиздец какой-то.
Если не вникать в унылые бесполезные доказательства, а просто общую концепцию разбирать (геометрический смысл, который просто первым пунктом должен идти в любой теме - так как память человека визуальная, и думают мозги изображениями и визуальными образами, а не (текстовыми) символами или теоремами) и потом решать задачи разных типов - тогда первые два курса матана можно освоить за 4-6 месяцев на неплохом уровне.
Блин, забыл что посты не редактируются.
Ищи всякие штуки вроде desmos.com/calculator - это может помочь, чтобы ты все эти переменные, графики и производные представлял в виде цельного визуального образа. Тогда любая задача с этим связанная станет тривиальной - так как тебе буквально очевидно что написано и в каком уравнении, и это один цельный образ - а не какой-то набор разрозненных математических символов.
Разница как между тем, чтобы по буквам читать (и терять смысл предложений) - или по словам и словосочетаниям.
Спасибо. Добра
[[0,0], [0,1], [0,2],
[1,0], [1,1], [1,2],
[2,0], [2,1], [2,2]]
Листы добавляются по мере работы программы, поэтому заранее номера позиций неизвестны
ну так напиши сортировку с функцией филтьром
Сап анончики, вот есть пик1, вроде все выглядит логично, вводишь себе массив A, потом вводишь количество элементов N и все должно работать, но после ввода массива А, возникает пик2
Если не сложно объясните пожалуйста что я делаю не так ?
Ладно, я разобрался, извините за беспокойство
https://ideone.com/BI9qLf
Можешь не считывать N (удалить потом из списка первый элемент), в питоне это не особо требуется, так как в списке всё-равно массив указателей. Осторожно, такая фигня числа через точку считывает как два отдельных.
Пример: на входе: 1 1 1; на выходе: 20.
Запускаю у себя - все работает и с разными значениями. Пытаюсь отправить на Степике - пишет, что неверно и иди нахуй. Скажите пожалуйста, в чем проблема?
дрочат хуй, а питон изучают
Или можно только создать значения в словаре и работать с ними?
> В питоне можно сделать функцию, которая будет создавать пустые переменные?
Просто интересно. Но чет я подозреваю, что хуй там.
Можно, но переменные все равно в словаре будут, просто в другом. Из словаря выхода нет.
нихуя ты спалился!
Типа так невзначай похвастался, что у тебя макбук и ты успешен?
>С классами тоже так можно
Можно, но всё-таки это неправильно и грязно. И не всегда работает.
У тебя может не быть __dict__ у объекта, если ты создавал его с __slots__
Соответственно при попытке присвоить какой-то существующей переменной значение у тебя будет исключение
Корректно присваивать через setattr
setattr(obj, var_name, var_value)
В случае __slots__ ты, конечно, так сможешь только определённые в __slots__ значения переопределить, не совсем что автору надо.
Но это не единственная проблема с __dict__.
Так как таблица формируется динамически, то элементы появляются только после прокрутки и поиск например строки 20 если она не отображается не получится, по классам поиск не работает только по селектору. Если например найти элемент:
<div class="slick-cell l1 r1 undefined">49</div>
то могу выделить и заполнить ячейку однако текст 49 не могу получить никак, есть ли способ получить значение?
Что-то вроде найти селектор и использовать функцию .text выдают пустой результат.
Почему работает:
ActionChains(driver).send_keys(Keys.TAB).perform();
но не работает никакие комбинации Keys.LEFT/Keys.ARROW_LEFT
которые мне нужны?
c Keys.LEFT понял почему не работает, ячейка была выделена поэтому это было перемещение по тексту.
Наверное я проебался с геттекст() , это вроде из явы.
В селениуме есть же встроенные функции получения значений классов. get_attribute() и get_property()
Крч я не совсем понял что ты написал ввиду своего начального изучения питона , но данная проблема помогла разобраться мне как работает типичный "for k in range N" и что вообще происходит , а еще то что там чтобы вводить массив и все нормально работает надо вводить "A=[int(b) for b in input().split()] вводил с телефона по памяти вроде не проебся, но спасибо за ответ.
<div class="slick-cell l1 r1 undefined">49</div>
Да getText это не из питона, get_attribute() работает, но как вытащить из получаемого объекта "49"?
или хотя бы source этого объекта после find
Всё разобрался, спасибо всем. В общем попробовал подняться этажом выше и взять не ячейку а целую строку и вывести .text, сначала выдала всё кроме нужного и я понял т.к. у меня на нужной ячейке был .click() её содержимое получить было нельзя.
Есть множество sql query на обновление данных в таблице (через sql alchemy)
Можно ли при помощи threading выполнить эти запросы конкурентно? И что если таких запросов несколько тысяч штук? Создавать по треду на каждый запрос - уебанство
А что за запросы такие и откуда пришли, что прям несколько тысяч надо сразу запихнуть?
Ты не дудось базу запросами, а собери в один лучше и проверь скорость работы. В любом случае можешь обвешать таблицу локами.
Посмотри, что такое ACID. Всё уже придумали.
Например https://ru.stackoverflow.com/questions/920086/Группировка-dataframe-по-дате
df = pd.DataFrame({'val':np.random.randint(100, size=20), 'date':pd.date_range('2018-12-01', freq='500T', periods=20)})
Предлагают df.groupby(pd.Grouper(key="date", freq="D")).sum()
Но мне нужно не сумму считать, а все 'val' соединить в список. Для примера это будет так
date val
2018-12-01 [65, 63, 8]
2018-12-02 [12, 0, 74]
2018-12-03 [86, 27, 57]
Если важно у меня все списки будут разной длинны.
df.groupby(pd.Grouper(key="date", freq="D"))['val'].apply(list).reset_index()
SQL Alchemy обязательна? Есть же pewee-async/tortoise и ещё какие-то для MySQL/PostgreSQL, если уж очень ORM нужна
>Нормально
Часть пакетов не может быть установлена/собрана. Uvloop'a нет, uvicorn дропнул поддержку IOCP, hypercorne все ещё нестабилен. Куча нюансов, если просто книжки дрочить, то норм. Все равно же в контейнере все разворачивают, в шиндоус докер поддерживается, WLS есть, можно же и там все делать.
Как работать с сайтами, на пиотне? В смысле не скрэплинг йобаный, а получение информации с сайта и отправление другой например, в сообщение и т.д.
Просто когда я пытаюсь найти в интернете инфу, мне выдают ебучий скрэплинг, а я блять не хочу делать сайты.
Ну так-то скрапинг это оно и есть - шлем запросы, получаем ответы, потом извлекаем.
Допустим у нас проект, в котором модуль main.py импортирует модуль A.py. Модуль A импортирует B, а B импортирует C. В такой ситуации, если нам понадобится перезагрузить все модули, то просто reload A не сработает, ведь его внутренние импорты не будут перезагружены. Как решение Лутц предлагает огромную рекурсивную поеботу, которая обходит все модули на произвольную глубину и всё перегружает. Это всё прикольно, но почему бы для решения этой задачи не импортировать модули сразу с перезагрузкой? То есть в модуле A мы импортируем B следующим образом:
import B
reload B
Тогда при reload A у нас B сразу же перезагрузится, ведь выполнится reload B. Менее изящное, но более простое решение. Тем более мы не перегружаем вообще всё, а явно указываем какие модули мы собираемся перегружать.
Я ещё плохо разбираюсь в программировании и питоне, в чём я не прав?
Я это понимаю. Но если у меня только два модуля требуют перезагрузки, а Лутцевская функция перегружает вообще все модули из пространства имён (а она так и делает), то проигрывает Лутц.
Эта требует ручного перечисления всех переменных и никакие аргументы кроме простого ввода не принимает.
Нашел вот это https://stackoverflow.com/questions/2960864/how-to-save-all-the-variables-in-the-current-python-session первый ответ
Но при сохранении выдает Can't pickle <built-in function input>: it's not the same object as builtins.input
Потом при загрузке invalid load key, '\x27'.
Походу толком ничего не сохранишь. Всё какие-то костыли.
У него это просто пруф оф концепт, ты можешь произвольно для своей ситуации делать.
ну тк, я зеленый хуище. хотя я и сам почитал ошибку. Сначала скачал файл и тупо запустил как еблан. А потом только допёр что до него путь нужно хуйнуть в
driver = webdriver.Chrome(executable_path=r"C:\Users\User\Desktop\chromedriver.exe")
Да я понял. Я просто удивился что моё решение СИЛЬНО проще и потому усомнился в его адекватности.
а пон спс
a = 3
def func(): print(a)
main.py:
from mod import func
func()
Я правильно понимаю, что в пространтсве имёy модуля main функция func() будет выглядеть как print(3) ?
Я другой анон, годик назад пробовал джангу, наковырял франкенштейна, но т.к. питон я не изучил нормально и появилось 100500 важных дел забил, сейчас сделал комбэк, дрочу питона уже месяц по 4+ часа в день, хочу через пару недель окунуться в джангу и начать ебашить на ней. Если вы скооперировались можно к вам?
То что ты хочешь делается через апи если оно есть, если нет то только парсеры
Бро, как и тебе посоветовали займись ооп, ну или функциями для начала, а то это больше не проект, а задачка.
У объекта тело какое?
Там ниже контакты есть.
Если создать не много по другому, то будет ворой пик или так всё и должно быть? В гайдах на ютубе по другому всё.
>В питоновых файлах не будет подсветки
Вообще-то будет, нужно только подсоединить нужную базу данных в панели database.
Правда? А хтмл верстку в джеэсе он у тебя тоже подсвечивать будет?
Это строка, с точки зрения питона, поэтому он и не будет подсвечивать.
Сам как-нибудь, нулевую полистай
>А хтмл верстку в джеэсе он у тебя тоже подсвечивать будет?
В жс файлах будет. В питоновских нет, по крайней мере по умолчанию.
>Это строка, с точки зрения питона
С точки зрения подсветки синтаксиса это не имеет никакого значения. Только в случае с sqlite надо сначала подсоединить базу данных, чтобы пайчарм знал, какие в ней таблицы.
Рекомендую самому искать и изучать инфу, сейчас вкатывайся во что хочешь, это зависит от того что ты хочешь делать(веб,десктоп и прочее). Могу только свой список кинуть который сам насобирал, по нему изучаю все, пока что неплохо идет
Да мне чтобы за границу свалить и получать 7к зелёных не вылазия из дому,что попроще наверно,чтобы взяли же ещё навыки и опыт нужен
лел, дохуя хочешь.
а если серьезно амбиции это хорошо, ты можешь в принципе любой язык который пригоден под веб выучить, т.к. ты в питон треде, то можешь в принципе посмотреть в сторону джанго как основного фреймворка, он хороший и мощный, на нем работает сайт варгейминга, гугл некоторые сервисы и прочее, для его освоения нужно знать сам синтаксис, ооп в питоне, БД , регулярные выражения.
Классический страницашлеп без cs образования, нахуй никому не нужен. Только в Урюпинске помощником эникея можно идти.
Ты про фронт говоришь, бэкендер это другое, или ты думаешь что выучишь фреймворк и будешь бесконечно пилить магазины?
Толковый разраб везде нужен, в том числе и фронтендер
И за сколько это всё освоить можно?так лол там даже сранные сантехники 5-6к $ получают
Ну бля, питон, подрочишь задачи и ооп 1-1.5 месяца интенсивно. Почитаешь о сетях и устройстве интернета, изучишь гит-несколько дней. Фреймворк и базы хз сколько, но на базовом уровне за неделю.
В принципе после этого можешь делать ебы.
Потом нужно знать современные инструменты, паттерны, rest... и тд., список большой, но без него нахуй не нужен быдешь у пиндосов
После того как это освою,мне для начала годик в рф поработать или сразу стараться в компании сша рваться?там же надо ещё учить на инглише или это не обязательно?
я не знаю, я просто собрал кучу инфы что требуется от разработчика сейчас и как сейчас пишут код, какие технологии используют, по рф я бы мог еще сказать, по бугру нет, но там в основном по технологиям тоже самое, по работе кури ютуб.
У меня пидорский питон иногда не видит изменения в файле и приходится пересоздавать. Даже если удаляю файл все равно его запускает. Даже если терминал перезапускаю.
Нужны не настолько, чтобы вытягивать себе из-за границы спеца. К себе вытягивают сильных спецов из сложных областей.
>там даже сранные сантехники 5-6к $ получают
В твоих маняфантазиях? Это хорошая зарплата для специалиста с вышкой. Рабочие специальности получают в полтора-два раза меньше. Говночисты - в три.
Если хочешь работать на штаты, то я бы ориентировался на 3-4к в месяц. За большие деньги ты не нужен, поскольку проще нанять местного раба в офис.
*Поскольку проще нанять инженера, который может тянуть на себе код, а не месяцапитониста за 7к.
Саммерфильд, хотя это с основ.
Intermediate Python, там выжимка про специфику.
Видео курс специфики питона для умеющих программировать
https://www.youtube.com/playlist?list=PLlb7e2G7aSpTTNp7HBYzCBByaE1h54ruW
Друзья, здравствуйте. Может ли кто-то, понимающий питон, посмотреть на эту проблему: https://github.com/philippj/SteamworksPy/issues/62
Очень нужно хотя бы понять, куда сосать с этой проблемой.
Пока что имеются
- Средние знание пистона
- FastAPI
- RabbitMQ
- Kafka
- Redis
- ETCD
- MongoDB
- PostrgeSQL
- Amazon
- Docker
- GitlabCI
- Умение писать микросервисы и масштабировать их
- Сейчас щупаю на работе CQRS c эвент сорсингом и DDD
Последние пункты хотел бы особо расширить, так как хочется узнать больше архитектурных паттернов
Надо обновить записи в базе. Их там дохера, и обновить нужно все
Сначала показалось что мужик на пикрелейтед ебет трех питонов в ротеш. В чем смысл слабой типизации питона?
Импортирую переменную через from:
from modul import a
В пространстве имён появляется имя a. Меняю в файле modul значение a.
del (a) #объект а удаляется
from modul import a
print (a) #выводится изночальное значение, а не изменённое.
Вопрос: почему так нахуй? Где питон берёт значение, если объекта модуля modul нет?
Я знаю как перегрузить правильно, я хочу понять почему ТАК не работает.
Ещё читать книжки, или что? Библиотек не знаю, горем с пополам могу назвать пару методов, да и всё.
Может быть может быть. Вот думаю это недостаток или плюс. С одной стороны разрабы должны быть не дураками. С другой стороны столько языков разных включая brainfuck что даже не знаю. Меня одолевают смутные сомнения.
Импорт модулей это дорого, пистон кеширует данные по нему. Если хочешь перезагрузки, то юзай reload.
То есть в памяти где-то всё равно сидит объект модуля из которого импортировали переменную?
>Если хочешь перезагрузки, то юзай reload.
Да я же говорю - я знаю как.
читай еще и решай задачки
ИМХО укус питона это рекламная брошюра питона, а не учебник никакой. Я после прочтения книжку понял, а про питон не понял нихуя. Что и как делать то? Но после него проще читать уже что-то более серьёзное. Я после него Лутца читаю, но он не для всех - слишком подробно.
Я надеюсь, что ты не имеешь ввиду pyc файлы, я про нормальную компиляцию с бинарником и запуском без интрепретатора на машине
Если было бы много дублирующихся данных, которые можно было закешировать в разных запросах, то делал бы второе.
Обновлено: ни треды, ни асинхронка не помогают
Походу в postgres стоит лок на операцию update, как его блин убрать
так он только простые конструкции объясняет,
https://proproprogs.ru/
вот тебе годный сайт блогера selfedu, он чуть направит тебя
Если написано Syntax Error то значит это ты долбоеб и питон тут ни при чем
Даже не сри такими кнйсами здесь
Графы, деревья и алгоритмы обхода их знаешь? Всякие задачи на вычисление вложенных скобочек решал?
Дурачок, лок стоит для того, чтоб целостность обеспечить. Он же не знает, собираешься ты обновлять одно поле 10 раз или что ты делать будешь.
Я тебе уже написал, собираешь запрос в один update и обновляешь.
Ну вот смотри. Через модбас терминал я посылаю реквест в шестнадцатиричной системе и получаю ответ в ней же. А в паймодбасе есть функция, через которую запрос делается. И там только три аргумента - адрес, количество регистров и юнит ID. В итоге я получаю сообщение что не получено никакого ответа. А в терминале я посылал реквест из 4 параметров - адрес, функциональный код, адрес регистра и количество регистров.
чяднт?
Есть несколько датафреймов с котировками и датами. Мне их нужно совместить. Но прикол в том, что даты не совсем совпадают. Если что даты идут как индексы. Мне нужно чтобы в финальном фрейме были все даты, а если котировки на заданную дату нет, то она заменяется на предыдущую.
Пример исходных данных и результата в пастебине. https://pastebin.com/5HiEb47C
Я так понимаю, ты создал правильный инстанс клиента, с правильными параметрами, вызвал метод .connect() и он вернул True, все так?
Если нет ответа, то скорее всего адрес слейва неправильно указал.
>там только три аргумента - адрес, количество регистров и юнит ID
Все правильно, функциональный код pymodbus за тебя подставляет. Адрес - это адрес регистра, unit - это адрес слейва.
>чяднт?
Не показываешь код. Без кода трудно угадать, что не так.
Первый пик - отправка запроса и прием ответа в терминале. Все работает нормально. Второй пик - пояснение реквеста. Третий пик - мой код.
Все зараболо! Ты был прав, я адрес слейва неправильно писал. Лучей добра тебе!
Все заработало! Ты был прав, я адрес слейва неправильно писал. Лучей добра тебе!
Собрать запросы INSERT в один - хуйня вопрос. Дефолтный пример это 1й пикрил
А как собрать запросы UPDATE в один? Хрень со второго пикрила - ерунда, он обновляет любые строки где проходит condition
Через UNION ALL или через JOIN на временную таблицу, где будут твои параметры под кондишн
Было
[
[0 0 0 1 5 0]
[0 4 6 7 8 2]
...
]
Стало
[
[1 5 0 0 0 0]
[4 6 7 8 2 0]
...
]
Решение в лоб (в цикле ищем первый не нулевой элемент и аппендим срез от этого элемента до конца и np.zeros с количеством недостающих нулей) работает очень медленно (np.roll и np.trim_zeroes тоже медленные). Можно ли как-то то ускорить такую операцию?
Это выглядит как очень подходящая для распараллеливания задача. Порезать исходные данные на N кусков, запустить N дочерних процессов, каждый процесс обработает свой кусок, а потом склеить результаты. Можно самому, с помощью модуля
concurrent.futures из стандартной библиотеки, можно поискать какие-то свои подходы для numpy, может библиотеку какую поискать
Где мало пишут? Про ООП литературы просто дохуя.
Писал когда-то разложение дерева в словарь питона, но это все тоже прочту и порешаю
Пробовал гуглить, но везде одно "смотри network". Где можно подробней про это почитать?
Двачую. Daun++ где почитать про парсинг веб страниц.
>Это выглядит как очень подходящая для распараллеливания задача.
Нет. Это не вычислительная задача, а прогон по памяти. Тебе дороже будет рассылать по процессам, чем делать всё в одном процессе.
>>82723
А не проще использовать это?
https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.Executor.map
А если там правда 100500 тысяч мильенов массивов в списке? Неужели при больших объемах парализация не поможет ускориться на многоядерных процессорах?
Чтобы запустить что-то параллельно, надо раздать распределить по процессам задания. Это сложно и дорого.
То есть ты больше потратишь времени на пересылку данных, инициализацию и т.п., чем выиграешь от параллельной работы.
Это скорее многопоточная задача. Кстати надо тестировать, может она адекватно работает под тредами, поскольку работа должна быть внутри np, которая не задевает GIL.
Когда данные реально большие, эти расходы не важны, иначе бы параллельных вычислений просто не было бы
> которая не задевает GIL.
Когда используешь процессы, а не треды, на GIL похую
У каждого процесса своя память. Тебе надо расклонировать твой список по другим процессам, потом собрать результат с других процессов. Это очень дорогие операции, они дороже вызова np.roll() будут.
Раскидывание по процессам работает в других случаях, когда задание небольшое по объёму, но требует больших вычислительных ресурсов. Здесь другая история.
Впрочем треды в данном случае не помогут, я ради интереса протестировал быстренько, только хуже работает.
Может быть надо смотреть в сторону numba, это очень сильная штука, я слёту не смог, но я не работаю с numpy/numba.
Скорее всего в numpy есть какие-то возможности для того, чтобы именно внутри numpy всё обрабатывать.
Здесь проблема в том, что используется дорогой вызов np функций с передачей туда np.array объектов.
Если где-то в процессе выполнения скрипта случится исключение или просто прога вылетит, то уже записанные данные не исчезнут?
Для надёжности надо метод flush() использовать, это принудительный сброс данных.
Гарантий наверное нет, тут ещё от шалостей ОС может зависеть, что произойдёт, если прибьётся процесс с незакрытым файлом.
Возможно тебе стоит чуть архитектуру изменить, вынести открытие-запись в файл в отдельные функции, перехватывать исключения, которые у тебя возникают, и в обработчике исключений делать закрытие файла.
У open есть настройки буфферинга. Алсо, можно явно делать flush.
Да такая мысль тоже была. Надо попробовать.
Есть один продукт, который будет интегрироваться с другими.
Задача: писать тесты собственно для продукта И для интегрируемых продуктов.
Вопрос: Стоит ли для каждого продукта, включая собственный пилить отдельный репо? После успешной интеграции с продуктом, тесты будут переделаны вместе а продуктом. Спасибо. Продукт Тим сказали мне делать ресерч как лучше хуже.
Весь экран вдруг засрало зеленым цветом, хуй пойми зачем и почему, как убирать нахуй? Пидарасы из жетбрейнс здесь сидят? Рот я ебал вашего говноконвеера, нахуй на VSCode съебываю
Смотри на задачу, там надо делать np.roll(np.array, shift).
Вот сам вызов долго работает, а сам ролл отрабатывает очень быстро, вне зависимости от размера массива.
Короче тут нужны спецы по numpy, чтобы придумать, как уменьшить количество связок python-numpy.
Анон бы ещё озвучил величины примерные. Сколько в списке массивов, какого размера примерно и какого типа элементы. И сколько по времени это работает, и сколько надо.
Я почему-то думаю, что тут можно какие-то более глубокие оптимизации делать. Не просто же так у него вот эти мелкие np.array присутствуют, что-то с ними он ещё делает.
Я конечно понимаю, что оно видит, что строка только на запись и потому там прокает оптимизация для s+=, так что реально оно не создавало на каждом шаге новую строку - но с этой оптимизацией результат вроде как всё-равно не должен превосходить однострочник.
>>82927
Вторая картинка?
Ну либо если тупл один, то просто [0] допиши за списком, чтобы оно этот один тупл извлекало?
вообще numba jit вроде хорошо дружит с numpy
Скинь куда-нибдь текстовый файл с дохулиардом np.array, бинарник и код для его открытия или код для генерации.
Мне интересно выдрачивать код, чтобы он быстрее работал.
Или не скидывай, я сам сгенерирую - просто масштабы укажи, сколько нулей и какие размеры массивов.
У тебя main нет вo view, есть text.
Я тyт тoже джангy стал изyчать, если xoчешь мoжнo скooпеpиpoваться типo peer-to-peer leaning
(Автор этого поста был забанен. Помянем.)
Это не джанга, я питон пока учу. Первый том Лутца вот дочитал.
Up
Код с цифрами скинуть не могу np.array те что внутри 100 элементов, всего их в списке порядка 107, ведущих нулей от 0 до 100.
Я перевожу этот проект в exe при помощи auto-py-to-exe
Проект работает. Но меняю в settings.ini параметр "F:/GoogleDrive" на "C:/GoogleDrive" и программа перестаёт запускаться
В чём может быть дело?
Например:
list1 = [a, b, f, g]
list2 = [1, 2, 3, 4]
нужно list3[a1, b2, f3, g4]
бамп вопросу
Пукон кривое говно и не переопределяет адрес.
Для начала найди как вывести текущую директорию и попробуй пройтись по ней в верх.
я бы согласился, но ведь с начальным параметром то работает
С np не работал, но, если просто через async делать, такие результаты.
А, тут малость не то сделано: вместо всех начальных нулей только один свапнут. Но не думаю, что сильная разница была бы.
Может это даст какие-то зацепки?
Слева лог работающей программы. Справа, когда я заменил путь в файле конфигурации. (после выделенной строки начинается ошибка)
Если вернуть значения в файле конфигурации обратно, то программа всё равно не запускается
>async
Когда вы блять уже усвоите что асинхронка в принципе не способна сделать быстрее ни одну числодробилку? Ни в пистоне, ни в жс, ни где-то еще
сравнил - это два одинаковых лога до этого момента
> здесь другая история
Здесь у тебя асинхронность в принципе не используется, никак. Только одна задача, не преключения задач, ничего.
Ты можешь просто удалить всю эту асинхронную обвязку и всё будет работать как без неё.
Алсо, для более сложных задач, с несколькими потоками исполнения. У тебя всё будет работать не так, как ты зассчитываешь. Не смотря на слова async/await вызов функции main, весь цикл и вызовы swap_zero будут полностью синхронными, а не так, как ты ждёшь, наверное.
сука 3 часа
в итоге оказалось, что
config.read(ini_path, encoding="utf-8")
можно записать без энкодинга, и всё равно будет работать
config.read(ini_path)
ну и мякотка в том, что без энкодинга не работает в pyCharm'e
вообще хз, как вы мне бы могли помочь
До этого ничего не учил именно на инглише, я очень свободно понимаю и терпимо говорю, никогда не тестил свой уровень. Но я читаю на русском с умопомрачительной скоростью. Если сравнивать - книга на русском у меня упирается в 200-300 страниц до "уставания", на английском около 70-80 страниц, это конечно касается худ.литры.
Вот и вопросы такие:
1)Cтоит ли мне миксовать курсы и гайды на инглише с базовыми книгами на русском?
2)Вообще эти базовые книги на русском актуальны, хорошо написаны и их следует читать?
3)В случае если стоит ради бОльшего количества информации и большей ее доступности читать литературу на русском - не возникнет ли у меня проблем с мешаниной в голове между, например, integer и целое число и прочие понятия, даже базовые арифметические операции лучше наверное запоминать на одном из двух языков?
4)Если таки стоит читать на русском - какую книгу в бумаге я мог бы купить? Мне так очень удобно, с закладками, выделением. У меня есть ридер, и телефон офк, но это немного не то.
Сорян за нуботу, хочу организовать как-то свой "курс" заранее
>Код с цифрами скинуть не могу np.array те что внутри 100 элементов, всего их в списке порядка 107, ведущих нулей от 0 до 100.
Смотри вот какая история. Я только предупреждаю, что сам на numpy реально ничего не делал.
Суть np в том, что это внешняя система, которая как-то у себя хранит данные, вызовами функций ты эти данные преобразовываешь. Всё внутри работает быстро, а вот связка питон-нумпи работает медленно.
Я глянул быстро, но не мучал, своя работа висит.
Вот, я бы в эту сторону смотрел:
1) создаёшь двумерный numpy массив. Не большой питон-список из небольших np.array, а двумерный np.array размерности 10М х 100
2) создаёшь векторизующую функцию через np.vectorize
там первым параметром ты указываешь питон-функцию, которая будет применена к элементам массива
my_rotate = np.verctorize(rotate)
в rotate описываешь логику преобразования элемента
после чего делаешь my_rotate(np_2dimension_array)
В общем это примерная идея, смотри сам в этом направлении. Может какие-то более эффективные подходы могут быть. Но это должно работать быстро, быстрее всех других решений.
Правда при условии, что у тебя двумерный массив, если у тебя np.array всегда длины ровно 100, это не проблема. Иначе сложнее, но скорее всего и для этих ситуацию решения есть. Может другие аноны подскажут.
Хуй знает че тут всякие подосы развели. Папки пришел нахуй, всем лежать, всем стоять
ProcessPoolExecutor ёпта
Убеждаюсь в том, что без целевой вышки нельзя допускать до программирования вообще. Максимум простенький фронт делать.
А может быть и можно. Должен же кто-то создавать спрос на 128-ми ядерные процы и 1тб память для запуска простейших задач, которые деды на 386 процах реализовывали.
У нас такое качество вышки что это вообще не показатель, все зависит от мозгов индивида, это не компьютер сайенз в гарварде где дрочат. У нас старый пердежный дед набирает часы и рисует хуету на доске, а сдается все беготней, молитвами, пиздежом и покупкой готовых работ, т.к. делать их тебя не то что не научили, а почикали программу так что забыли даже попытаться научить.
>А может быть и можно. Должен же кто-то создавать спрос на 128-ми ядерные процы и 1тб память для запуска простейших задач, которые деды на 386 процах реализовывали.
Вот ты и выдал свою необразованность, плебей.
Современных адекватных русских материалов очень мало. Культура перевода вымерла. Старые книги были очень хорошими, и авторские русские книги, и качественные переводы. Сейчас почти нет, только когда документация от разработчиков, вроде nginx или postgres.
Ты когда читаешь материал, тебе надо вникать и осмысливать. С такой скоростью, как художественную литературу, читать невозможно, бестолку. Больше 10-20 страниц в день ты реально не освоишь. Если язык более-менее норм, то уже не важно, на каком языке читать, на русском или английском, всё время на осмысление материала уходит.
Поэтому лучше на английском.
Определённо. Я не будут тыкать технологию туда, где она не эффективна, не нужна и вообще не работает.
Крепкие оригинально русские книги по айти это вообще редкость, а переводные это неизбежные косяки перевода и лаг по сравнению с оригиналом.
Я вообще хуею с тех, что боятся английской тех. литературы. Это не художественная, где дохуя собственно художественности и всяких изъебов литературных.
Да и какая скорость чтения для учебника, надо вникать и практиковаться, подгугливать и смотреть документацию параллельно.
>>83259
Спасибо, я просто наивно полагал что наша школа перевода и тут творит чудеса, но видимо нет.
Ну тогда не особо важный, но все равно вопрос - если я все таки захочу бумажный учебник(желательно мягкий), то какой выбрать и можно ли его заказать, не знаю, с амазона, типа он вообще дойдет, кек?
С амазона можно заказывать через форвардера, там будет какая-то пятерка-десятка сверху максимум.
Конкретные тайтлы хз, надо знать твой уровень.
ага, короче аноны. СУКА 6 часов спустя я просто удалил файл конфигурации, создал текстовый домент, переименовал его в .ini и всё заработало. Винда что-то делала с файлом конфигурации, что он переставал работать
мне нравятся курсы, но я бы посоветовал тебе начать с бесплатных (rutracker)
>внутри 100 элементов, всего их в списке порядка 107
>>82594
>работает очень медленно
Ты точно правильные числа написал?
1000 строк по 200 элементов через слайсы работают за 30 мс.
https://ideone.com/KJCLr8
Я потестил всякое разное - питон говно ебаное и не один из вариантов не догоняет jit-вариант.
Обрати внимание на np_musor - собственный код циклов на питоне настолько медленный, что проще вызвать нагромождение функций из numpy чтобы получить массив (sm) со смещениями и потом через roll и bool-массивы прокрутить массивы. На больших числах всего в 6 раз отстаёт от jit-варианта.
Там двумерный np.array вместо списка - преобразование списка в np.array всё-равно 0 мс требует, а вот jit-вариант просаживается до 9 мс с ним.
>1000 строк по 200 элементов через слайсы работают за 30 мс.
а у него 10 миллионов строк по 100 элементов. Получается несколько минут при такой скорости.
А, это он 10^7 107 хотел написать...
Тогда хули он думает, написать программу на си на 20 строк, и передавать в неё массив - или нубму заюзать.
Питон же не для таких задач, очевидно.
Вариант с мусором из нумпи не проходит из-за того что у меня оперативка заканчивается, а так за 4 секунды выполняется самым тупым кодом с нумбой.
>Убеждаюсь в том, что без целевой вышки нельзя допускать до программирования вообще.
Вышка в лучшем случае дает базу, при помощи которой будет легче учиться дальше. В худшем - ничего. А все потому, что ни один нормальный программист не пойдет преподавать.
>Максимум простенький фронт делать.
Фронт уже давно сложнее бека.
Первый раз делаю питон проект с базой данных.
веб страничка где ты получаешь инфу из базы и выводишь ее. и кнопка где ты заносишь инфу в базу.
Разве верно получать данные из бд напрямую при каждой загрузке страницы?
Как правильно это сделать?
Ты че пидор что ли?
Не занимайся преждевременной оптимизацией.
Хороший совет. Возьму на заметку.
Для опыта пишу говнопрогу - генератор карты сайта.
В идеале: у главного класса proc_manager было три сына - классы старший page_walker, средний test_url и младший, совсем дурак и кроме писания в файлы нихуя не умеет - file_writer. Каждый реализован отдельным процессом средствами модуля meltipricessing для создания процессов и общения процессов между собой.
В классе page_walker хочу запустить многопоточное чтение очереди Queue, наполняющуюся годными урлками из процесса test_url, чтобы минимизировать ожидание ответа от сервера. Самый простой способ, что нашёл - модуль concurrent.futures и класс ThreadPoolExecutor
Это ситуация в идеале, на данном этапе есть говнокод и я знаю, что это говнокод. По этому говнокод есть вопросы. Фоты прикладываю (извините что фоты, а не скрины, уже убегать надо было).
1. Многопоточная обработка не робит, почему? Что закоментить ThreadPoolExecutor, что self.walk() - разницы никакой. Почему?
2. Сама структура программы, которую я описал в идеале - насколько она приемлема? Так программируют или есть шаблоны проектирования попроще и поудобнее?
3. Есть ли способы огюрганизовать многопоточное чтение из очереди и доступ по урлкам проще, чем описанный?
Буду рад любым советам
Код принимаем только на абонентский ящик, не забудь вложить марки для ответа.
Да не нахуй... 1 апреля же прошло уже
Носит в сумке наверное.
Чтобы было легко и не жалко его насиловать же.
Я просто вчера часов 8 учил стартовый синтаксис по юдасити, мне как преподу не нравится их структура, да простые, но когда говорят о дата-структурах лучше бы мне сначала озвучили их всех, а потом толкали про каждый телегу, в итоге я вчера остановился на сетах, которые судя по юдасити как бы нахуй не нужны, ну т.е. объяснить их преимущества и особенности перед листом они как бы не могут, потому что он идет 3м в списке, и кажется после листов и туплов просто ненужной хуйней. Я понимаю что скорее всего сет будет наиболее часто встречаться далее, приходится читать извне, и книга позволяющая быстро освежить знания без гугла мне была бы в помощь.
>2020
>Опять пишешь свой реквестс потому что попенсорс ебаны уже лет пять теряют формдату и куки на редиректах
Это легенда прикрытия.
>в итоге я вчера остановился на сетах, которые судя по юдасити как бы нахуй не нужны, ну т.е. объяснить их преимущества и особенности перед листом они как бы не могут, потому что он идет 3м в списке, и кажется после листов и туплов просто ненужной хуйней.
Это потому что ты пока не мыслишь категориями "сложность вычислений", "производительность" и т.п.
Поиск по сетам работает быстро, по спискам медленно. Вот это главное.
Ну и иногда плюшки вроде возможности удобного объединения, вычисления разности и т.п., но это реже на практике встречается.
Я пока пытаюсь с этим очень ограниченным набором знаний придумать себе промежуточную задачу, которая меня удовлетворит. Я придумал, но для нее нужны роллы процентов, случайные значения, я пока до этого не дошел, но уверен что это все есть в любом языке.
В сетах я уже использовал юнионы и сделал задачку про ашотов на рынке, которая выдает ответы в духе - какой фрукт не продают оба ашота, какой фрукт продают оба. По идее сейчас с дикшинари я смогу забить и цены и их придуманные локации, чтобы сделать поисковик самых дешевых помидоров на рынке ближе всего к тебе.
Сорян за нуботу, я тут 90% треда даже не понимаю, только вот начал и мне пока все нравится.
Тогда вылезает нечитабельная залупа <__main__.Vector object at 0x7f1b11a7c048>
Добавь туда два метода __str__ и __repr__:
def __str__(self):
return f"vec [{', '.join(str(x) for x in self.x)}]"
__repr__=__str__
__repr__ реализуй, а не вот эту хуйню со строками возвращай
__str__ будет __repr__ использовать, так что его вполне хватит
С перечислением структур данных есть проблема - их слишком много (даже в стандартной библиотеке). Частота их использования падает экспоненциально при удалении от str/list, а если говорить про те, которые используются 90% времени - то ты их уже изучил.
set, кстати, используется достаточно редко. Свойство отсутствия повторений в set не такое сильное, как кажется на первый взгляд, и чаще всего вообще нежелательно, как и отсутствие заданного порядка итерации. А в тех местах, где множества нужны, их зачастую нельзя использовать, потому что set мутабелен и не хешируется, например, {{1}} в питоне написать нельзя. В таких случаях используется frozenset.
Я не знаю, какую книгу тебе посоветовать, но проверь - может документация для тебя будет работать как справочник? Во-первых, есть сайт. Страница, которая тебя интересует, https://docs.python.org/3/library/stdtypes.html, написана фундаментально, в ней все имеет смысл, но может быть трудно выловить суть. Во-вторых, функция help выводит справку на объект: help(list), help(dict.items), help('foobar') и т. д.
>А в тех местах, где множества нужны, их зачастую нельзя использовать, потому что set мутабелен и не хешируется, например, {{1}} в питоне написать нельзя. В таких случаях используется frozenset.
Очевидные множественные проверки на наличие элемента без set ты никак не сделаешь
мимо делал лочки
>return "Vector(" + str(t) + ")"
Предыдущие ответы все правильные, просто добавлю, что такой return вернет строку, а не объект класса Vector. То, что тебе "вылезает", когда ты работаешь со своим классом, определяется в этом же классе методами repr или str - выше это уже написали. "Вылезти" всегда может только строка. Даже если кажется, что "вылазит" не строка, этап превращения в строку происходит всегда.
Кракозябра "Vector object at 0x7f1b11a7c048" - это работа той реализации метода repr, которая досталась тебе от класса object - (неявного) предка всех классов, которые ты определяешь.
Для рутинных проверок это, конечно, лучший вариант. Определенные ситуации требуют frozenset, но говорить "зачастую нужно" было ошибкой.
Я уже немного бьюсь головой об стол. От кракозябры я избавился своим способом, но вот сверить длину и нормально выбросить исключение не выходит. Это уже на завтра.
Монти Пайтон это не только фильм про Брайна, у них было целое шоу на телевидении и еще несколько фильмов.
Списки (и вероятно словари и прочие коллекции) не создаются с нулевой длинной - они создаются с такой длиной, которая статистически минимизирует необходимость перевыделения памяти под коллекцию. При необходимости расширить коллекцию она увеличивается в два раза - это хорошая (лучшая?) стратегия по минимизации количества перевыделений памяти.
ОС, в свою очередь, тоже может зарезервировать больше памяти для процесса, чем тот просит - по схожим причинам.
Скорее всего, при загрузке новых объектов, для них уже было выделено место.
Через systemd status
Но вопрос остается, если есть объект в котором хранится 10 полей, например, строк, которые иммутабельны, это разве не значит что на объект минимум 30 байт понадобится? А то я может чего не понимаю важного
Смотри функцию sys.getsizeof()
она тебе показывает, сколько объект занимает.
При этом надо учитывать, что есть у тебя список, например, то это будет размер самого списка и указателей на объекты, а без размеров объектов.
То есть условно список из 1000 объектов это 8кб + память на объекты, это на уровне ещё 30 кб минимум.
Скорее всего у тебя некорректные замеры.
Память выделяется под кучу, огромным блоком под много переменных. Она уже выделена на тот момент, как ты загружаешь эти 200к объектов. Поэтому ты можешь большой разницы не увидеть.
Короче тут много нюансов.
Конечно, память понадобится, но если ты видишь, что процесс забрал себе меньше памяти, чем ожидалось - значит, у процесса заранее была свободная неиспользуемая память. Все-таки, в процессе работает интерпретатор, который наверняка не хочет на каждое новое поле в конструкторе просить у ОС память. Это не вопрос конкретно к питону, это вопрос ко всему стеку.
Ты можешь узнать размеры объектов при помощи модуля sys, но это тоже непросто.
Задачи - решать, а не учить. Что касается языка, то ты уже все выучил, применяй знания теперь. Решил, чем хочешь заниматься, или не получается?
Так вот есть вариант не переписывать скрипт как функцию, но чтоб в него передавать иходные данные и он с ними исполнялся? Надеюсь понятно описал.
Прост скрипт длинный и у меня теряется форматирование при простом копировании строчек. Да и вообще лень под def всё загонять.
Комментарий к тому, что на скринах, другой анон
На первых двух память расходуется в классе, а не в экземплярах (инстансах) класса
Чтобы узнать размер класса, надо сделать
sys.getsizeof(C), но это очень большая величина будет, потому как там очень много системных переменных на каждый класс.
На третьем скрине память расходуется в словаре d, а не в экземпляре класса. В экземпляре хранится только ссылка на словарь.
Тут очень много тонкостей, конечно, надо помнить, что все объекты в питоне хранятся как ссылки, поэтому узнать реально занимаемый объём довольно сложно.
Нет, не понятно ты написал. Оформляй всё как функцию, единственно грамотный вариант.
Все нормальные редакторы умеют сдвигать. Используюй vim или vscode, там это не так сложно сделать.
> Нет, не понятно ты написал.
Приведу пример. В исходном скрипте №1 есть
Date_range = pd.date_range(start=start_date, end=end_date, freq='D')
Date_range.to_csv(f'{name}.csv')
Я из скрипта №2 задаю start_date=1/1/2020, end_date=1/1/2021, name=test
И у меня появится test.csv с датами. Естественно там намного больше операций, но смысл такой.
jupyter notebook у меня некоторые отступы при копировании съедает, поэтому муторно.
Не получается( Есть какой ни-будь совет по поводу этого?
Метапрограммирование
Многопоточность
Асинхронность
ORM и асинхронные операции с БД
Серверы и бэкенд разработка
И ещё где лучше всего брать задачки?
я знаю сайт:
https://www.codewars.com
На этом мои полномочия всё.
Кстати, ООП это хуйня или не хуйня всё таки? По тому, что я прочитал, напрашивается вывод - всё полезно в меру
Самое интересное для меня - многопоточность и асинхронность. Прикладных задач такого рода на питоне относительно мало. Самое востребованное - бекенд.
Раз уж ты что-то знаешь, то нужно себя попробовать в чем-нибудь.
Порешай алгоритмические задачки (codewars, hackerrank, leetcode), поанализируй данные (kaggle), сделай рогалик в терминале, чтобы генерировать коридоры и ходить по ним, напиши простой сайт на чем-нибудь маленьком (flask?) по гайду, напиши чат или посканируй порты в локальной сети, попарси сайт.
Лично я делал алгоритмические задачи и писал рогалик (получилось, кстати, ужасно). Потом сайт.
ООП нужно. Не прям нужно-нужно, но видеть его ты будешь постоянно.
Бля чел спасибо большое
А, разобрался - это чтобы можно было его из инстансов вызывать.
Здесь совсем база. Смотри на всякие генераторы, итераторы, контексты, классы, замыкания и т.п.
А вообще, язык программирования это инструмент для решения задач, вот чтобы с помощью языка что-то делать.
Вот делай.
Кстати, если хочется в игры pygame полная хуйня, так поиграться, или там реально можно что нибудь человеческое сдлеать?
я какое то время совсем чуть чуть в юнити погружался и в c# знаю примерно столько же сколько в питоне
Чтоб понятней было вот пример https://pastebin.com/upNwa5US
Никто не хочет вместе повкатываться?
У меня начальный уровень, знаю синтексис-хуё-мое, пытаюсь вьехать в ооп.
Если кто хочет присоединиться оставяйте телегу.
Так я тоже самое могу и на дваче сделать, а посмотреть кто лучше решил в лучших решениях на том же кодварсе или чекио
Ну значит это не для вас молодой человек написано.
Мне кажется кооперация, это именно что позволило человеку слезть с пальмы. На приведенные аргументы ,я отвечу аналогией:
Есть допустим сессионная игра, где можно играть либо со случайными людьми, либо взять уже знакомого напарника и осуществлять поиск игры уже с ним, в обоих случаях ты играешь в команде, но даже напарник будет играть чуть хуже чем случайные тимейты, эффективность игры с напарником будет выше. Тим - команда, плей - играть, группа всегда действует эффективней одиночек. Можно сказать что главное различие в степени отвлечённости.
То есть ты хочешь кооперироваться с таким же ебаклаком как ты и потом будете сравнивать ваши писаки с лучшими решениями, а если че потом бежать на двач и спрашивать че не так, все правильно понял?
Правильное решение, не то что записано в лучших, а то что помогло разобраться.
БИТАРДИЯ ДЛЯ ВКАТЫВАЛЬЩИКОВ 2.0
Скрипт№2:
def hack_this_shit(start_date, end_date, name):
with open('script1.py') as script1:
exec(script1.read())
if __name__ == '__main__':
hack_this_shit(дата1, дата2, имя_файла)
В скрипте№1 придется убрать объявления переменных, которые собираешься передавать ну и имена должны совпадать: start_date, end_date, name
Но вообще правильно тебе сказали переписать как обычную функцию твой код в скрипт№1
Что-то вроде:
class Zalupa(object):
def __init__(self, name=None, length =None,length =None):
self.name = name
self.length = address
self.length = phone
class Action(object):
...
...
def Obrezanie():
del zalupa[name]
Как раз занимаюсь сейчас тем, что хочу разбить класс-монолит на несколько. Не на питоне правда.
Нужно для того, чтобы логически разделить данные и их обработку.
Так удобнее поддерживать, структура данных постоянна, надо задокументировать и хранить в отдельном модуле. Обработчики данных активно меняются и перепиливаются, их может несколько версий разных быть, можно наследовать от класса с данными и мешать друг другу не будут.
Идея красивая, не новая, но сложно реализуемая. Особенно когда удалённо всё общение, да ещё через месседжеры.
Надо чтобы больше живого общения было.
Этим кстати универы как раз очень хороши. Там все одного возраста, статуса, вместе осваивают что-то, общаются на эти темы и тем самым быстро растут в уровне, даже если в программе про айти мало.
Если классы небольшие то канешн разносить не надо. Если они крупные то создавать один God-class херовая затея
Был на проекте где было 2 таких крупных класса с ебалионом методов в каждом (штук 40 наверно), через какое-то время была абсолютно нихера не ясно что куда идет
>Не проще ли создать один класс
Проще, и чаще всего именно так и нужно поступать. Идея класса как раз и заключается в том, чтобы определить и тип данных, и операции над ними.
Какие могут быть поводы разделить операции и данные? Например, снижение связанности компонентов в событийной архитектуре. Вместо того, чтобы иметь прямой доступ к мутации состояния, компоненты получают возможность отправлять события (действия) в абстрактное "наверх". Как сказано в >>84757, это дает дополнительную свободу при внесении изменений.
Стоит заметить, что изначальная предпосылка "класс - это данные и операции" здесь не нарушается. Меняется понятие данных - вызовы методов превращаются в объекты - и над ними тоже можно определять операции. Например, какой-нибудь класс ColorChangeAction может иметь метод convert to style change action или clone. Или, может даже apply change, который примет объект состояния и что-нибудь с ним сделает. В redux, например, это не так, и функция типа apply change определяется один раз рядом с хранилищем состояния. Но где-нибудь это может сделано и так.
Иногда сам тип данных не располагает к добавлению методов. Например, класс Point2D скорее всего не должен иметь метод "set to current active element", потому что методы такого рода привязывают класс ко всему подряд в приложении и постепенно превращают простейший контейнер для двух чисел в god object.
В этом случае, кстати, вполне можно говорить об объекте действия "set to current active element" с методом applychange(self, point2d). Или же просто о каком-то контроллере с методом "set to current...". В общем, твоя конкретная ситуация - это главная подсказка, как поступать.
if x in range(a, b) работает только если x - число типа int. В общем случае ты пишешь либо как на скриншоте, либо if a <= x < b.
Там в задании четко указано что число чисто int от 1 до 200.
Я видимо просрал понимание инклюзивности/эксклюзивности операторов сравнения, поэтому в башку автоматом пришла идея нагуглить есть ли range как явление и применить его.
Ты же понимаешь что итератор in range должен целиком поштучно пройтись по каждому значению в нем пока не найдет совпадение? Насколько это хуевее простого знака сравнения догадываешься?
Догадываюсь, вот и печет, благо там дальше задания внезапно проясняющие это
>понимание инклюзивности/эксклюзивности операторов сравнения
Вероятно. В коде с range нет обработки отрезка [50; 150], а также числа 180.
a in range(a, b) == True
b in range(a, b) == False
>>84819
>итератор in range должен целиком поштучно пройтись
Не должен, в range эта операция переопределена и оптимизирована до нескольких простых сравнений.
У тебя пропущен диапазон от 50 до 150
range (1, 50) работает в диапазоне от 1 до 49,
то есть если у тебя
range(1, 50), range(51, 100) то число 50 не обработается
Исключение из-за того, что ты некорректно строки сшиваешь.
Использую "txt {} txt".format(num)
Вариант использовать f-string или старые %d
Как ты делаешь работает в JS, в питоне нужно явное преобразование к строке
И 200 тоже не дает пингвина.
3 урока спустя они просят написать меня то что я написал сразу, кек
У меня в группе из 23 человек программирует только 3-4 человека, на втором потоке так-же, остальные всегда пишут в личку типо
1 - А почему a = 2 + 2 всегда 4, после такого и жопа сгореть может ( Ему надо было суммировать все это )
И люди вроде не тупые, к примеру, я школу окончил на одни двойки, а отличников в группе довольно много, но никто из них ничего не понимает в программирование, может потому-что не хотят и поступили сюда по другой причине.
За пол семестра первого курса я уже приступил к освоению фреймворка(Django), но до этого немного в bs4 и requests покапался, а они до сих пор не знают как работает цикл, стыд.
Да у меня есть небольшие, или даже большие(хз) проблемы в понимание OOP, да и я до сих пор не знаю где мне нужно использовать замыкание или деструктор, может потом как нибудь пойму.
Ну представь, ты хочешь выучить английский язык, тебе говорят что с мотивацией у тебя этой займет от полугода(в среде) до 2х лет очень ленивого учения если ты еще и тупой. В школе+универе ты учил английский лет 8 или около, по 2-3 часа в неделю. Если бы у тебя была мотивация, ты бы успел выучить за ~1200 часов 3 иностранных языка до флюент разговора, но ты прекрасно видел как твои одногруппники сдавали инглишь на 4-5, зная только матершину и мемасики.
Тут так же, мотивация и желание изучать что-то дает миллионный пинок под жопу любому окружению, инструментам(образовательная программа, группы, контроль успеваемости, конспектирование) если человеку не надо.
>У меня в группе программирует 3-4 человека
Вот у тебя в группе программирует 3-4 человека, у вас есть общие интересы, обмен знаниями, взаимная поддержка, конкуренция и мотивация. Вы постоянно друг у друга на виду.
А анон пытается хоть одного найти, чтобы как-то через чат общаться.
Огромная разница. Вот представь, что в твоём окружении нет ни одного, кто бы понимал хоть немного в технологиях и кому это было бы интересно. Ты бы свихнулся и не смог развиваться.
Я не понимаю почему это вообще работает. Типа питон понимает плурал форм в английском или я загоняюсь, типа до этого одиночная форма city или dildo не всплывала нигде, вместо воплей ЗАДЕФАЙНЬ city он спокойно делает свое дело. Я не понимаю почему
Ну т.е. мне хотелось убедится, что он просто понимает единственное и множественное число английского, если я неправильно назову единственное или множественное число, то выдает ошибку что name is not defined. Мне это показалось странным
Я уже переписал в функцию. Но спасибо за идею. В будущем пригодится.
Какие числа?
for hui in iterable
На месте hui может быть что угодно, оно присваивается в этой конструкции.
Конструкция "for x in y" неявно определяет новую переменную x вне зависимости от того, как конкретно она называется. Вот, например, обход списка в цикле while с явным определением переменной x - конструкция for x in y гораздо чище.
Это твоя пизда?
В каком формате держать мини-кеш при использовании скрипта?
Условно, у меня луп, где каждые 10 секунд совершается запрос и прилетает id и еще некоторая инфа. Я хочу сохранить id и пару других полей в кеш, и, если при следующем запросе, мне пришли опять те же данные, не делать последующие действия.
На ум сейчас просто log \ txt \ json файл с перезаписыванием приходит. Есть что то другое, или жсона будет достаточно ?
Не работа, свой скрипт.
В принципе для этого уже есть готовые решения в стардартной библиотеке, смотри, например, на lru_cache в модуле functools
https://docs.python.org/3/library/functools.html#functools.lru_cache
Естественно ты можешь сделать аналог, возможно более функциональный. Или использовать какое-нибудь внешний сервис для этого memcached/redis, если тебе надо долго хранить, вне приложения.
А если ты не хочешь поднимать redis, то может стоит глянуть в сторону sqlite, но это зависит от того, какие данные у тебя как ключ используются, какие тебе надо хранить.
Общий паттерн в этом случае такой, что ты по ключевым данным гененируешь хеш, например sha-hash от сортированного json, и хранишь в базе или файлах данные для этого хеша.
Соответственно если тебе надо получить данные, ты аналогично строишь хеш, если для него у тебя есть сохранённые данные, берёшь из кеша, если нет, вычисляешь-скачиваешь.
Так можно хранить очень большие данные, создавать каталоги с именем-хешем, большие файлы и др.
скину пятихатку кто сделает
tg - @katarsssis
cache = :MEMORY:
Если словарь пустой он по массиву и не идет.
Социоблядики пытаются в прогерство, ещё небось друг другу в инсте лайкаете фото кода.
Вот учу я пит%ух%он, и хочу попробовать какой-нибудь уеб-фреймворк, например Flask. Но я так понимаю я немогу просто написать pip install flask, и сделать збс. К нему же ещё нужно доставлять какой-нибудь апач да?
Я слышал что некоторые разрабатывают на винде ,а потом переносят в никсы, это что они это все говно себе на ПК корячат?
Ты вполне можешь на винду WSL2 и Ubuntu поставить и не париться
По сети передавать
В каком месте сложнее? Там весь стек ограничивается одним фреймворком и парой либ
А то я видел некоторые просто создают экземпляр класса,но работает не с экземпляром, а только с внутренними переменными класса.
Какой подход верный? Или оба имеют право на существование?
1й не исключает второго. Если не передаешь ничего в инит, то создавай просто пустой, в чем проблема? Только наследоваться надо не от dict, а от абстрактного класса в зависимости от того, что тебе нужно (mapping или mutable mapping или еще чего) https://docs.python.org/3/library/collections.abc.html#collections-abstract-base-classes
Тут вопрос немного в другом. Если допустим создаём класс без наследования, но хотим работать с ним как со словарём.
Т.е. можно сделать:
class WizCoin:
def __init__(self, galleons, sickles, knuts):
self.galleons = galleons
self.sickles = sickles
self.knuts = knuts
или же
class WizCoin(dict):
def __init__(self):
galleons={'Krasiqu'}
.
То и значит, max() с пустыми последовательностями не работает, max([]) кидает ошибку. По какой-то причине список a у тебя не сформировался, наверно, на вход подали x длинной 1 или вообще пустой, и твой цикл просто не запустился, и список a остался пустым. С этим можно бороться, используя значение по умолчанию, например, max([], default=0) не упадет с ошибкой, а вернет 0, но не всегда возможно найти приемлемое значение по умолчанию, тогда нужно следить, чтобы пустой список в b]max()[/b] просто не попадал, как-то по особому обрабатывать этот случай, ну или ловить и обрабатывать такое исключение
8.8.8.8/24
8.8.8.8/16
192.168.1.20/24
192.168.1.20/8
итд
чтобы остались только маски которые вмещают большее количество адресов? (т.е из списка выше оставить /16 и /8)
Для разработки хватит и фласка. Веб сервер (упомянутый стек nginx + gunicorn) понадобится для продакшена.
*переведи
При помощи стандартной библиотеки: https://docs.python.org/3/library/ipaddress.html#ipaddress.ip_network
Т. е. парсить подсети, адреса использовать как ключи в словаре, в значениях отслеживать текущее самое маленькое число (размер подсети).
а как?
если я правильно помню ipaddress.ip_network проверяет на валидность адреса(а они и так 100% валидные) а вот как по маске сортировать я нигде не нашел.
спасибо
Я не питонист, просто книжку по алгоритмам читаю.
Это значит, взять все элементы, начиная с первого, не забываем, что индексы у нас начинаются с нуля.
Так, если word = "qwerty", то word[1:] будет "werty"
from itertools import count
list(count(0)) # wait
print('done')
count - бесконечный генератор. list бесконечно разворачивает его
Сериализация же. Multiprocessing.Pipe использует pickle для свёртывания данных для передачи.
Так вот возможно ли как-то обратиться к этому result или result.summary(), чтобы вытягивать и в список или датафрейм?
Вот придумали люди программу,которая считает всё что нужно, но результаты выдает только неиндексируемым текстом или вообще графиками.
А, всё наверное отмена. Покопался в методе summary, нашел пару методов. А потом оказалось, что функция dir(results) дает все методы, которые выводят искомые значения в нормальном формате. Но чую эта библиотека мне еще подкинет сюрпризов.
filtered_nets = []
for net in cidr_list:
____addr, mask = net.split('/')
____if int(mask) < 24:
________filtered_nets.append(net)
При желании можно в одну строчку
[net for net in cidr_list if int (net.split('/')[1]) < 24]
Я хочу написать асинхронную функцию, которая будет говорить мне (писать лог) каждую минуту, сколько я потратил лимита по запросам.
Как я понимаю, это должна быть асинхронная функция, чтобы она не вмешивалась в ход основного кода?
Можно ли запускать одним скриптом синхронный код, и асинхронный? Если нет, то подскажите что можно прочитать и как мне реализовать задуманное.
В асинхронном программировании ключевая сущность это "задача", примерно как тред в многопоточном.
async-await и планировщик это механизмы для переключения задач.
У тебя одна задача может заниматься тем, что считать лимиты по запросам и раз в минуту выводить статистику. Не очень понятна твоя задача правда.
А вторая задача при каждом запросе запрашивает ресурс у первой, и ей же отправляет статистику использования ресурсов. Взаимодействие, например, через очереди.
>Можно ли запускать одним скриптом синхронный код, и асинхронный?
Синхронный код это такой, который работает от начала и до конца, пока не кончится. Асинхронный такой, в котором предусмотрены механизмы для переключения на другую задачу в определённых await-местах, а в остальном это те же синхронные задачи.
Если тебе надо, чтобы код работал одновременно, то или надо сделать твой синхронный код асинхронным, либо выносить его в отдельный тред и возиться с синхронизацией для обмена информацией с основным потоком. Базовые примитивы asyncio не thread-safe.
Хочу данные в асинхронную функцию передавать, а она будет писать лог каждую минуту.
Можно конечно же это сделать синхронной функцией(не думал как, но полюбому можно), но я хочу именно попрактиковаться в асинхронности.
Данные будут передаваться только при инициализации? Можешь асинхронную функцию в отдельный процесс отправить.
>Если тебе надо, чтобы код работал одновременно, то или надо сделать твой синхронный код асинхронным
Так и подозревал. Почему-то считал что асинхронный код как-бы работает в фоне но потом запустил пикрелейтед и понял что это не так принт не выполнился.
Раз уж ты шаришь, то спрошу вот что.
Получается что await, это как бы места выхода из функций?
Вот смотри мой нынешний код, это бесконечная функция-эвентлуп с вызовом самописных функций, условиями, переключателями, и прочими запросами. Идея в том, чтобы знать сколько я трачу лимита на запросы.
Получается, что я не могу тупо дописать async-await в функцию эвент лупа? Точнее могу, но тогда прийдется писать await в каждой строчке чтобы поймать нужный момент для выхода из функции и передачи управления в функцию счетчик? Ссорян что тебе приходится писать мой бред, у меня проблема с выражением своих мыслей
>Данные будут передаваться только при инициализации?
Это как?
>Можешь асинхронную функцию в отдельный процесс отправить.
И она типо уйдет работать в фон и не будет блокировать основной(синхронный) код?
>Получается что await, это как бы места выхода из функций?
Да, только на await можно прервать исполнение функции. Тут начинаются подводные камни, что на самом деле не на каждом. Но, у тебя 100% гарантия, что без await переключения не будет.
>но тогда прийдется писать await в каждой строчке чтобы поймать нужный момент для выхода из функции и передачи управления в функцию счетчик
А зачем тебе в каждой строчке возможность перехода? Используй тогда треды. Это как раз неудобно, что в каждый момент можно перейти.
Тебе надо дать возможность перехода тогда, когда у тебя программа блокируется, ждёт ресурс какой-то. Либо когда тяжёлая операция, раз в сколько-то итераций цикла ты даёшь возможность перейти, вот чтобы функция не могла работать больше чем 10мс-1000мс без переключения . Либо каждый раз, когда ты используешь какой-то ограниченный ресурс, который надо контролировать.
Я чет перечитал посты и понял, что возможно объебался.
Как я понял, у тебя есть некоторый код, который шлет запросы на апи и есть проверка количества запросов через ту же апишку, которую ты хочешь вынести в одну функцию, причем весь код синхронный?
Может тебе асинхронность не нужна вовсе? Сделал бы функцию в отдельном процессе, которая бы ходила бы с проверкой раз в минуту и выдавала значения в stdout/файл.
Поясните, разве что-то может быть быстрее, чем пройти по каждому элементу и сравнить? Какие вообще альтернативы могут быть? (для неупорядоченных данных)
> при создании сета ты и так проходишься по всему списку
Так regex'ы же, наверное, тоже, нет? Они же не терминируются после первого матча.
>Поясните, разве что-то может быть быстрее, чем пройти по каждому элементу и сравнить?
В данной задаче как раз тупая проверка именно в массивах строку будет самая быстрая.
Ох бля, это ж Python. Ну х.з. но в любом случае лишняя конверсия скушает время.
Вижу что шаришь. Есть ли смысл делать асинхронность с api запросами (request)?! Скажем их 5 штук, они идут друг за другом. Но некоторые работают медленно и задерживают другие.
быстрее всего будет проверка
string = "какая-то строка, возможно длинная"
symbol = "з"
или даже
symbol = "возм"
symbol in string
Это питон, тут для стандартных операций не нужно изобретать велосипеды или прикручивать фреймворки. Всё есть в языке и работает быстро.
Смысл есть. Но тебе придётся освоить сетевые функции asyncio, которые довольно сильно отличаются от синхронных. Но это полезно.
asyncio в первую очередь нужен для сетевых задач, в сетях надо смотреть именно сюда. В других случаях может быть разумнее смотреть на многопоточные и многопроцессные подходы.
> Как я понял, у тебя есть некоторый код, который шлет запросы на апи и есть проверка количества запросов через ту же апишку
Не. Там у них лимит 1200 веса на запросы. Разные запросы жрут по разному этот вес. Его нельзя превышать, иначе забанят.
И остаток этого веса нужно считать самому, они эту инфу не представляют.
А у меня обычный бесконечный код с разными запросами к апи. И я хочу раз в минуту выводить лог с информацией по потраченного весу. В синхронном варианте это делать как-то по не круто я считаю.
я пытаюсь разобраться в одном опенсорсе, но не понимаю где они налажали.
Тут sum по int из mysql превращается в pandas dtype = object
а если я колонку переделаю на float, то нормально.
Пытаюсь зайти с другой стороны - от возможных типовых ошибок в sqlalchemy.
Исходник для меня сложненький (
У них такие же приколы и postgres.
>Тут sum по int из mysql превращается в pandas
>dtype = object
>а если я колонку переделаю на float, то нормально.
Прочитай это предложение и попробуй его понять. Что ты написал? Что нормально? Что ненормально?
ну если ты не знаешь pandas и sqlalchemy, то тебе и будет непонятно.
Короче, есть попроще формулировка:
как sqlalchemy имитировать
select sum(field) ?
Мне не нужно чистый sql, с ним все работает.
Мне нужно это уебищный orm-синтаксис заюзать чтобы понять какой из опенсорсов налажал
Да, действительно ужасно сформулировал.
sum по полю int должен быть, очевидно, числовым типом где бы он ни был представлен. Хоть в pandas, хоть промежуточных местах в sqlalchemy. И это я называю нормальным.
Я пытаюсь накопать в каком месте в процессе трансформации из sql в pandas dataframe эта колонка превращается в object - и это ненормально.
В качестве этапа этого расследования мне нужно понять как обычно работают в sqlalchemy с sum, но при этом не создавать полноценные маппинги объектов. В этом проекте нет ORM в в виде объектов. Только запросы и базы данных все абстракционированы через sqlalchemy
def coldhot(user_number):
if user_number == hidden_number:
return 0
elif user_number > hidden_number in range(1,10) or user_number < hidden_number in range(1,10):
return 1
elif user_number > hidden_number in range(10, 20) or user_number < hidden_number in range(20):
return 2
elif user_number > hidden_number in range(50) or user_number < hidden_number in range(50):
return 3
else:
return 4
И она не работает правильно. Мне нужно чтобы чтобы она возвращала результат если одно число больше другого в указанном диапазоне. Вот именно с этим диапазоном и затык. Я нуб, если чо. Учу язык ровно неделю.
Сам спросил, сам отвечаю:
def coldhot(user_number):
test_number = user_number - hidden_number
if user_number == hidden_number:
return 0
elif test_number <= 10 and test_number >= -10:
return 1
elif test_number <= 20 and test_number >= -20:
return 2
elif test_number <= 50 and test_number >= -50:
return 3
else:
return 4
Тебе просто надо добавить логгер в loop с помощью .create_task, без await, тупо по системе fire and forget. https://pastebin.com/MVeypk70
Стандартный алгоритм сортировки в Питоне стабилен. Поэтому можно сделать два последовательных прохода с разными ключами (secondary key идёт первым, primary key - вторым).
mylist.sort(key = lambda x: x[1], reverse = True)
mylist.sort(key = lambda x: x[0], reverse = True)
Для дата инженерии, наверно.
sql учат ко всему, это базовый скилл. И такой хуйни куча, даже если она не оговаривается. Не получится выучить пару конкретных кейвордов и на что-то претендовать.
Можно ли задать первому паттерну такое условие, чтобы учитывалось исключительно i-тое вхождение?
Спасибо что ответил. Сейчас прочту и попробую понять что там у тебя, и как это к себе применить.
Пока только до такой схемы додумался пикрелейтед.
По сути функция my() должна ебашить без остановки, но эвентлуп ее тормозит. Пришлось в синхронный код добавить async-await
>По сути функция my() должна ебашить без остановки, но эвентлуп ее тормозит.
Получается, что функция my() доходит до await, передает эстафетную палочку исполнения второй таске и ждёт пока эта вторая таска вернет жезл власти над эвентлупом обратно. Выходит, надо смотреть что там у тебя боте целую секунду выполняется. Ты там случайно time.sleep() вместо asyncio.sleep() нигде не вписал, или у тебя запрос к апи синхронный?
>Пришлось в синхронный код добавить async-await
Все правильно сделал, главное чтобы заработало, а потом уже, если будет критично, вынесешь в отдельный тред.
А вообще, я думал, все биржи давно перешли на вебсокеты, и ты просто подписываешься на стримы событий и ждешь сообщений. Какой смысл апи долбить постоянно - непонятно.
Попробуй re.findall
Примерно так я и делал, но беда в том, что замена происходит для всех совпадающих символов (а это мне не нужно).
> замена происходит для всех совпадающих символов (а это мне не нужно)
Не очень понятно. Приведи примеры, как нужно и как нет.
Привет, анон. Ситуация в том, что по незнанию раньше ставил пакеты через Пип без виртуального окружения, теперь же, при попытке поставить что-либо получаю миллион неясных ошибок, нужно как-то вернуть все в первоначальное состояние. Как это сделать?
Ну и классика, те пакеты, что я поставил через виртуальное окружение не видны в пайчарме, какие-то блять костыли. Как решить проблему?
Да не, я, кажется, код не так скопировал. Все работает но я надеялся, что замена в регулярках имеет больше параметров
Где брать практику для пистона?
Вот прочитал я укус питона, подучил основы.
Вот как теперь их применить на практике?
Пробовал на codewars, но как по мне там задачки сложноваты для новичка.
Leetcode пробовал? Там есть разбивка по уровням сложности, легкие должны быть норм для тебя. Вот еще можешь попробовать https://stepik.org/course/431/info
Тогда вот так вроде можно.
input = "aaAaaBBaBBbbb"
replace = r"\1_mysub_"
n = 3
output = re.sub(r"^(.?((?<=\w)[A-Z].?){%s})(?<=\w)[A-Z]" % (n - 1), replace, input)
print (output)
Удалить из виртуального окружения или вообще глобально? Глобально можно как-то вернуть дефолтные настройки? Так же у меня похоже проблема с $PATH, может с этим что-то связано?
Path у тебя засран. Сделай в том окружении или глобально, где засрано pip freeze > ~/all.txt
Потом берешь и удаляешь те, что не нужны
>Ты там случайно time.sleep() вместо asyncio.sleep() нигде не вписал, или у тебя запрос к апи синхронный?
Да, запрос самый примитивный, синхронный. По пол секунды ждет ответа.
>Какой смысл апи долбить постоянно - непонятно.
Запросы баланса, выставление/отмена ордеров.
В итоге я решил использовать multiprocessing, мне кажется это хорошим вариантом, и вроде работает.
Как этот чувак показывает https://www.youtube.com/watch?v=35yYObtZ95o
Типизация в питоне сильная, например, строку с числом сложить не получиться, "2"+1 не вернет ни 3, ни "21", такое выражение выкинет ошибку, но она динамическая, это значит, что переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной, то есть, например, в джаве если напишешь int x = 1, а потом x = "qwerty", то компилятор на хуй тебя пошлет, а в питоне пожалуйста, интерпретатор все съест, только надо понимать, что если написать x = 1, то в x будет лежать int, и сделать с ним можно будет только то, что можно делать с int,
а если потом написать x = "qwerty", то там уже будет лежать строка, и с x можно будет делать только то, что можно делать со строкой
Спасибо за ответ. Здоровья тебе.
люди до сих пор путают статическую/динамическую и слабу/сильную типизацию
Можно ли из экземпляра запустить несвязанный метод в отдельном процессе? Не пойму почему не получается. Что я проебал?
ХЗ. У тебя ругается на то, что ты делаешь
args = non iterable object
некий Syncronized объект из модуля multiprocessing.
Тебе надо передавать в args tuple
Может как arts = (self.value_obj,)
(запятую поставить, чтобы tuple был)
for url in [url1, url2]:
....page = requests.get(url)
....print(page.txt)
Оочень долго думает и что-то делает и потом Фейлит. По отдельности все работает прост у меня 20+ ссылок, для каждой писать метод - думал обойдётся.
Запятую проебал в аргументах, без нее пистон это как обычную группировку воспринимает
Попрофилируй чутка, поймешь на какой именно урле пиздец
start = time.time()
page = requests.get(url)
print(time.time() - start)
print(page.txt)
На всех. Просто ни одна не работает в лупе.
Но этот луп в классе и методе. Не знаю, если это решает.
Куда двигаться дальше и что/где посмотреть по работе с апи и эндпоинтами?
Ну ты может тогда класс скинешь, раз очевидно проблема в нём
>понимаю когда просто клиент делает запрос к серверу и тот возвращает простую страницу
Создаешь пять простых страниц:
1. Создание партии игры
2. Подключение к существующей партии игры
3. Страница ожидания хода
4. Страница выполнения хода
5. Страница результата партии
Клиент периодически делает запрос и получает одну из страниц, в зависимости от состояния партии. Состояние изменяется от действия пользователя или сервера, допустим, истекло время хода игрока. Можно не отдавать всю страницу, а только изменения состояния, с помощью аякс-запросов или вебсокетов. Всё, ты готов. Берешь какой-нибудь фласк, или даже боттл, и пилишь игру. Удачи.
>>89585
Делаешь http-запрос на эндпоинт согласно документации. Примеры можешь посмотреть на гитхабе по запроса "binance api" там сотни клиентов разного уровня паршивости.
Сумасшедший, что ты блять несёшь. Какие полтора месяца? Если кто-то с нуля и без вышки за два года вкатиться, то это уже победа. Подставь вместо программиста врача, инженера, архитектора, экономиста и напиши про "изи вкатиться за полтора месяца". Тебя обоссут в любой тематической доске. И только погромисты несут хуйню про "пять неделю и уже сеньор 300к наносек"
def toJadenCase(string):
return " ".join(w.capitalize() for w in string.split())
С .join все понятно, соединяет cтроку из списка строк используя разделись, к которому применена. Интересуют параметры, которые принимает join - принимает он массив или список какой-то. В данном случае он принимает в качестве параметров выражение "w.capitalize() for w in string.split()", которое судя по всему создает список. Но почему я не могу написать "a = w.capitalize() for w in string.split()" в таком случае, чтобы у меня этот массив записался в а? Это какая-то особенность оператора join, что он может принимать какие-то выражения, или такие выражения можно писать только в качестве параметров функций?
вроде можешь так написать, если использовать лямбда функцию.
Хотя я сам нуб в питоне но насколько я понимаю вместо отдельной функции ты можешь заюзать безымянную функцию.
так делают при функциональном программировании.
пусть меня поправят питонщики, если я не прав
Бля, ну там же русскиманглийским языком написано. Сделай w.capitalize, где w это символ строки string. Тебе это непонятно?
>Интересуют параметры, которые принимает join - принимает он массив или список какой-то.
str.join принимает в качестве аргумента итерируемый объект (iterable). В частности, список (list) - iterable, но можно и генератор какой-нибудь.
>В данном случае он принимает в качестве параметров выражение "w.capitalize() for w in string.split()", которое судя по всему создает список.
Создается не список, а генератор.
>Но почему я не могу написать "a = w.capitalize() for w in string.split()" в таком случае, чтобы у меня этот массив записался в а
Можешь, только надо делать так: a = (w.capitalize() for w in string.split()), если нужет генератор, или так a = [w.capitalize() for w in string.split()], если нужен настоящий список.
Вообще, разумные вопросы задаешь, но тебе, кажется, надо почитать немножко основы про базовые модели данных в Питоне.
>выражение "w.capitalize() for w in string.split()", которое судя по всему создает список
Оно ничего не создаёт, потому что ты его не обернул в [] (генератор списка) или в () (генераторное выражение)
>почему я не могу написать "a = w.capitalize() for w in string.split()" в таком случае
Потому что выше
Тогда пустая трата времени. Вкатывайся в содержанки, там за тебя всё продумают и ещё и выебут.
Для таких как ты умные люди пишут библиотеки и фреймворки.
Ну если ты до вката вообще не представляешь что такое программирование и базовые вещи то это на долго да,
Я говорил про 1.5 месяца на синтаксис,задачи и ооп, всякое быстроизучаемое типо гита потыкать,остальное это уже да долгое изучение и практика.
Ну и на твои перечисленные профессии надо учиться чтобы куда-то взяли, в разработке закинул резюме, прошел интервью
>Ну и на твои перечисленные профессии надо учиться чтобы куда-то взяли, в разработке закинул резюме, прошел интервью
Интересно, если в резюме написать, что работал менеджером по продажам, по закупкам, организации туров и т.п., два месяца назад начал изучать программирование. Позовут на интервью?
Ты, конечно, скорее всего просто жирный тролль.
По факту, с нуля за год стать разработчиком невозможно. Вот невозможно, и всё.
Пиздец, ты чем читаешь? Где блять написанно что нужно пиздовать после двух месяцев работать? За 5-6 месяцев реально стать, у меня есть живые примеры. В итоге после дрочки 5 месячной ты знаешь язык+вебфреймворк+базу+хтмл/ксс+инструменты для разработки и у тебя уже есть проект простенький который просто покажет что ты не хуй какой-то.
>>90002
> Ну если ты до вката вообще не представляешь что такое программирование и базовые вещи то это на долго да,
На два года, да
> Я говорил про 1.5 месяца на синтаксис,задачи и ооп
А, ты имел ввиду свитчеров из другого языка? Ну я вот по работе сейчас частично свитчуюсь с питона на пхп, чтобы дописать кусок кода в сервисе. Думаю, как раз за месяц-полтора управлюсь.
> всякое быстроизучаемое типо гита потыкать,остальное это уже да долгое изучение и практика.
А то есть все-таки не про свитчеров с языка на язык? Тогда ты прос о нереальную хуйню несешь. С таким же успехом можно сказать, что в квантовой физике теоремы учишь за полтора месяца, а там дальше просто практика и все. Ну лет на 6 практики, ага.
> Ну и на твои перечисленные профессии надо учиться чтобы куда-то взяли, в разработке закинул резюме, прошел интервью
Как отличить вкатыша от человека, который работает. Вкатыш думает, что после прохождения собеседования работать не придется. Ну или придется, но это вообще не важно и всем похуй. Нет, тебя просто выкинут с испытательного и все. Напиздеть в резюме и без мыла пролезть реально и возможно. На неделю-две примерно. Стоит ли 10-15 тысяч за эти две недели того или нет – думаю, вопрос риторический
За 5 месяцев "выдрочить все фреймворки" нельзя. 5 месяцев на базовый синтаксис без ООП потратить — норм результат. То, что ты говоришь это лютая хуйня
Ты троллишь или что? Свитчеры с другого языка вообще только синтаксис смотрят и фишки языка, если ты пишешь на чем-то одном вкат в другой язык быстр и легок. Далее они просто фреймворк дрочат нужный.
>Как отличить вкатыша от человека, который работает.
Где я писал что дальше учиться не придется, я описал сколько времени для вката надо, сижу в конфе с 20 бэкендерами/фронтами(спб), у всех начало карьеры в основном 19-20 год, кого не спроси вкат 5-12 месяцев. Да и сам я дрочу по своему плану программу, по моим прикидкам там на 6 месяцев макс до работы
>>90659
пиздец, 5 месяцев на базовый синтаксис это необучамым дебилом надо быть, дети для егэ учат питон за неделю. Выдрочить нельзя, так я и не писал про это, но довести знания до состояния что возьмут на работу можно(читай ответ выше).
тут просто ставится фреймворк pipом и инициализируется коммандой, дальше пляшешь, почитай как создать приложение на джанго
Бля эти фантазии вкатышей, мое почтение. Почаще повторяй это. Ну и про свитч с одного языка на другой за пару дней это пиздец ор. Надеюсь, ты заплатил за новый курс скиллбокса?
Сомневаюсь что ты вообще где-то работаешь,какие нахуй пару дней, где я такое написал? Если ты разраб и блять 1.5 месяца учишь синтаксис языка, то это умственная отсталость явная. Я уже прошел это, потратил столько сколько я писал, уже после месяца дроча по 4 часа в день я свободно использовал классы и у меня не вызывало трудностей использование декораторов, хоть пруф того что где-то работаешь, посмотрю хоть на разработчика который 5 месяцев изучает базовый синтаксис питона.
Какой базовый синтаксис, мудило? Где я об этом писал? Пиздос, сам чета придумал, сам в это поверил, сам теперь с этим спорить начал. За месяц, говоришь, уже ООП изучил с базовым синтаксисом? Ну сможешь в два ифа отсортировать три числа по возрастанию? А что такое self знаешь?
>Какой базовый синтаксис, мудило?
Ты собрался синтаксис чтобы свичнуться 1.5 месяца учить лел, придумал также как ты придумываешь сроки "пара дней", "пару месяцев".
Не могу сказать что ООП в полной мере овладел(мало практики в реальном проекте еще), но то что такое self это базовое знание.
> Ты собрался синтаксис чтобы свичнуться 1.5 месяца учить лел
И где я такое говорил? Ты это буквально сам придумал.
> Не могу сказать что ООП в полной мере овладел(мало практики в реальном проекте еще)
Так ты и условиями не овладел, лол.
> но то что такое self это базовое знание.
Да? И что это?
Пиздец, твое решение это просто ебаный позор. Еще и из гугла нагло спизженное. Я так могу и вообще без условий обойтись
>И где я такое говорил? Ты это буквально сам придумал.
>>90658 >>91004
>Так ты и условиями не овладел, лол.
ога
>Пиздец, твое решение это просто ебаный позор.
Ты бы границы сначала поставил(очевидно что я знаю и о min/max, и о map), потом бы возникал, ты написал в 2 ифа, из 3 чисел, я написал как ты запросил, написал бы без ифов, решил бы без ифов. Решение не пиздил все задачи решаю сам.
Так что спок анальник, сначала изъясняйся понятнее, есть четкое условие, тем более если погуглить твое решение тоже есть, если бы гуглил спококойно бы взял его.
> >И где я такое говорил? Ты это буквально сам придумал.
Ну так и где я там это написал?
> Ты бы границы сначала поставил
Если для тебя такие вещи не понятны, то соболезную.
> очевидно что я знаю и о min/max, и о map
И именно поэтому максимальное число ищешь не встроенной функцией? Расскажешь, ага
> потом бы возникал, ты написал в 2 ифа, из 3 чисел, я написал как ты запросил, написал бы без ифов, решил бы без ифов. Решение не пиздил все задачи решаю сам.
Конечно сам, твердо и четко. Так же, как ты про max знаешь. Только почему-то не используешь))))
> Так что спок анальник, сначала изъясняйся понятнее, есть четкое условие, тем более если погуглить твое решение тоже есть, если бы гуглил спококойно бы взял его.
"Мое решение" это рофл по поводу "написал с двумя ифами". Ладно, чет твои попытки сманяврировать меня уже утомили
>Ну так и где я там это написал?
например
>А, ты имел ввиду свитчеров из другого языка? Ну я вот по работе сейчас частично свитчуюсь с питона на пхп, чтобы дописать кусок кода в сервисе. Думаю, как раз за месяц-полтора управлюсь.
>Если для тебя такие вещи не понятны, то соболезную.
Понятны, но когда задача такого плана я привык к четкому условию, за месяц 10 дней я прорешал овер 200 задач взятых отовсюду, так что привычка осталась.
>Конечно сам, твердо и четко. Так же, как ты про max знаешь. Только почему-то не используешь))))
Не бывает людей которые пишут на питоне хотя бы день и не знают о ней, ты сам прекрасно это знаешь. Если ты только и можешь копировать чужой код, а простая математика для тебя обязательно спизженное решение, то мне тебя жаль, скорее всего ты сам то от вкатыша далеко не ушел.
>Ладно, чет твои попытки сманяврировать меня уже утомили
Утверждаешь что я не знаю встроенные функции потому что я их не использую, а маняврирую я?
Это копия, сохраненная 21 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.