Вы видите копию треда, сохраненную 6 июня 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>1989943 (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
В голову приходит только взять исходный код на жаве, и добавить в конце assertы на заполненность и все такое, но я не могу же таким образом проверить использования цикла, например.
Для проверки на тест-кейсах есть простейший баш-скрипт, а как именно проверять код, я не могу понять. Мб кто-то сталкивался или шарит, как это можно удобно организовать?
Я не хочу переписывать весь свой код два раза для if os == 'winda': и elif os == 'linux'.
Обрабатывать такие штуки надо в ситуациях типа
with open('templates/folder/file.txt', 'r') as file
Пиши везде никсовые слеши, он сам разберется.
with open('templates/folder/file.txt'.replace('/', os.sep).replace('\', os.sep), 'r') as file
Должно сработать
for thread in threads:
....thread.start()
for thread in threads:
....thread.join()
Ну вообще говоря, код на линуксе с его реплейсами у меня заработал, в винду пока лень бутаться. А чому он наркоман?
Потому что для этого есть os.path.join
Репостну из предыдущего.
Понял.
А вне Gunicorn'а это приблизительно так же выглядит? Или какие-то другие механизмы?
Посоветуйте онлайн консольку, чтоб в дороге с андроида обучацо, пожалста.
http://pythontutor.com/visualize.html#mode=edit
Если зайти на pythontutor.ru, то там базовый курс питона с использованием этого визуализатора
Но нужно понимать, что на телефоне невозможно программировать нормально, это сложнее и в разы дольше, чем на компе
Спасибо, но сайт какой-то странный, при любом нажатии увеличивает масштаб на 300%, пользоваться невозможно с телефона. Или это из-за оперы.
Не для кодинга конечно, чисто проверить что-то небольшое, в целях обучения.
Спасиб, попробую. Но обычно у приложух сильные ограничения функционала, модули там не поддерживаются какие-то, еще что-то. Надеюсь для моих задач хватит. Спасибо.
Если хочешь почти как комп, то можно скачать Termux.
Андроид построен на основе линукса, поэтому можно сюда поставить питон и ставить нужные модули туда
Степан любит много смеяться. Смех-это последовательность букв " a " и "h", которые
чередуются. Так например, «ahahaha», «hah» и «a» являются смехом, а «abacaba» и «hh» -
Нет.
Степан разговаривает очень быстро, поэтому все его слова сливаются в одно
большое. Для исследования вам нужно выяснить, как долго он может смеяться. В
вас есть строка-запись разговора Степана. Определите наибольшую длину смеха в этой
разговоре.
Входные данные:
Первая строка входного файла содержит одно натуральное число N (1 ≤ N ≤ 105
) -
длина строки с разговором Степана. Во второй строке содержится строка из
маленьких латинских букв длиной N-запись разговора Степана.
Исходные данные:
В исходный файл выведите одно число-наибольшую длину смеха в разговоре
Степана.
Кто-то вообще понимает, что это за пиздец? Пробовал второй пик, меня послало нахуй.
Спасибо, попробую.
Какие же хохлы дегенераты...
Приятнее всего воспользоваться re.findall и взять max len от полученного списка.
Ну или цикл по строке с двумя переменными, где одна переменная это длина текущего хи-хи, а вторая это максимальная длина хи-хи, код писать я разумеется не буду.
Да я вроде посчитал эти хихи-хаха через цикл, но был послан нахуй. Может я туплю и здесь нет правильного овтета, ибо я не выкупаю, откуда там берутся такие цифры
Ой, чел, там ещё и чередование букв надо учитывать, aaaa и hhhh не считаются смехом. Ну тогда вариант с изящной регуляркой отпадает и остаётся только цикл со сложными условиями. Крепись, чел.
ответ должен быть 5 в твоем примере
По-русски не понимаешь? Написано же, чередуются. Поэтому если две одинаковых буквы подряд, то смехуечек обрывается.
Проблема их формулировки в том, что по ней "аа" можно трактовать как чередование "а" и "а". В этом задании не мешало бы эксплицитно исключить "аа" так, как это было сделано с "hh".
https://ideone.com/NkHpeo
Ты не забывай про ограничение на время и N до 100k - лупы в пайтоне не самые быстрые. Через регексы наверняка быстрее было бы.
Пикрелейтед, если c исключением "aa"/"hh".
Да я думаю пофиг. Просто в универе после того, как сдал большой проект дают мелкую задачку на алгоритм. Проверка довольно формальная
[code]
class SquaresGovna:
def __init__(self, start, stop):
self.data = [value 2 for value in range(start, stop+1)]
def __getitem__(self, i):
return self.data
for i in SquaresGovna(1, 5):
print(i, end=' ')
[/code]
Ну, да, кстати, надо было проверить сначала, что возвращают. Оба варианта на длинной стринге некорректно работают.
Скинь assert'ы текстом не в крысу, лень перепечатывать.
Слово условный нахуй не нужно бтв не знаю зачем его высрал не обращайте на него внимания плз
быстрофикс
Потому что в интерактивном режиме ты вводишь по одной конструкции. В твоем случае верхний if x это начало, и всё остальное вводится уже внутри, так что принт на том же уровне и дает ошибку
В обычном шелле это обозначается ..., у тебя что-то не видно.
Если следовать твоей логике, то джанга только если есть бд, а если взять фласк, то нельзя использовать бд.
Ни тебе здрасьте, ни до свидания. Нам за тебя тестовое задание сделать, черт?
Пользуюсь Atom
VScode попробуй поставить, мне очень зашла после атома.
Там твои подсказки из коробки работать будут.
В Атоме плагинов под питон особо нет, подсказуи рандомизируются.
Ну сделайти. Я выбрал джангу, пофиг. Остался вопрос с тем, как запилить интерфейс табличный с фильтрацией и редактированием.
Ищи os.path.join вроде то что тебе нужно
['2: string2', '1: string ', '3: string3']
там хранятся строчки, но каждая из них начинается с числа, по которому и нужно сделать сортировку.
Интересно - оказалось, пайтоновские лупы уделываются даже вот такой нестед елдой, как на пикрелейтед: две лябмды, re, sorted, filter. При этом по памяти приблизительно одинаково.
Хотя, int() можно убрать тут.
Почему старт от 1? Эта хуйня разве не пропустит одиночные a h?
Что значат ?!< в начале круглых скобок? В обоих случаях, там разные комбинации.
Поиск в ре сишный, он высирает готовые результаты, а фильтры уже только по ним.
Хотя это питонья реализация какая-то унылая.
Скинь-ка это всё текстом, я потыкаю.
Охуеть, от души! А как оно работает? Вообще не понимаю.
> Почему старт от 1?
> Что значат ?!<
Можешь здесь это всё почитать: regex101.com
А там регекс забагованный, пришлось вилкой чистить. То решение через лупы тоже забагованное, поэтому этот код не смотри особо.
Пытаюсь тут обновить одну таблицу в postgres (а точнее поле json), но при попытках обновиться эта падла мне часто ругается на знак "%" - это, якобы это "unsopported format character" - втф? С хера ли % не может быть внутри полей бля?
до кучи добавлю, что я вытаскиваю уже готовое поле где присутствует % (!) но когда обновляю его через sqlalchemy то postgres усирается
Пробовать избегать этот символ? Мб он считает его частью структуры LIKE %%.
Попробуй экранизировать его через _%
Что код-то? Ничего он не покажет, дело как и сказали аноны в конченной интерпретации символа % (который уже есть в json, я на это повлиять не могу, нельзя просто "избегать символа %")
Вопрос в том как его верно экранировать? Перед проведением UPDATE проверить всю строку json и напихать туда _ или \ ?
хз
Банально - парсишь лупом поля жсона и в случае, если там есть %, то заменяешь значение этого value на _%. Не подойдет?
>Ничего он не покажет
Скорее всего покажет, что ты манипулируешь с базой через три пизды вместо того, чтобы сделать апдейт.
Попробуй заменить все % на chr() от ascii кода %
import re
def ahaha(txt):
ah = re.findall(r'((ah)\2a?)', txt)
ha = re.findall(r'((ha)\2h?)', txt)
return max([len(i[0]) for i in ah + ha])
Пиздос.
Или json to string -> string.replace() -> string to json
update_query_start = f'''UPDATE chatvisitor as cv SET json = v.js FROM (VALUES '''
update_query_end = ''') AS v(id, js) WHERE v.id = cv.visitorid'''
to_update_values = [] # some values here
vals_query = ','.join(to_update_values)
whole_query = ''.join([update_query_start, vals_query, update_query_end])
Сильно помогло? Это небольшой кусок непосредственно при добавлении в БД, если закину весь код там будет куча оверхеда, явно ненужного здесь
Вкратце: обновляю базу с 2.5 млн записей, заранее беру все записи через SELECT а потом начинаю делать UPDATE, обработав json-поле нужным образом. Почем вот так вот объединяю строки? Потому что это butch-update, тут разом 100к значений будет, потому что если обновлять их поштучно то можно усраться как долго он это будет делать
Так если ты руками крафтишь запросы, то и эскейпить значения нужно руками, а как же.
Можешь прогнать эти значения через prepared statement и глянуть, что он с ними делает. Ну и в целом в либе должны быть функции для обработки, читай доки.
Кстати интересное наблюдение: предварительно пробовал конкурентно гонять скрипт на тестовой базе. При асинхронном варианте через asyncio.gather обосрался на 50% по производительности по сравнению с поштучным синхронным, при мультитрединговом варианте через ThreadPoolExecutor обосрался на 40% (потому что сам постгрес лочит таблицу при таких обновлениях и конкурентно ничего не исполняется)
Почему тебе стыдно на анонимной борде? А как ты на настоящей работе будешь работать?
Вроде всё честно запрогано.
(В устройстве функции разбираться не нужно, гляньте только на передачу аргументов)
Заранее спасибо.
если что в аргументы передаётся точно словарь, в этом ошибки быть не может
Стыдно потому что эта двач нахуй. /pr/ один из самых токсичных бордов здесь. Даже /po/ и /re/ менее токсичный. Тут сразу "ооо ряяя вкатыш, ты ненужный член общества хуе-мое да. иди за уроки ряяя". Дефолтный ответ на просьбу о совете print('Пошел нахуй')
Сразу все желание пропадает сидеть тут.
Конечно, если люди-исключения. Пару раз общался с адекватными здесь, которые подсказали и помогли. Однако в основном реакция как выше.
>>05129
Это да
>>05130
Спасибо. Я работаю сейчас в корпорации, продаем говно скажем. Я еком специалист и мне часто приходит задача: Переименуй фото на каждое SKU так то так то. Это делается чтобы на маркетплейсы их выложить. Так вот, хочу это автоматизировать а заодно прокачаться в программировании. Сейчас я на стадии: есть одна папка в ней лежит 100 папок в каждой из 100 папок лежит еще 5-10 папок и уже в каждой из этих папок лежат фотки которые я буду соответственно переименовывать. Следовательно мне надо избавится от ненужного звена, а именно удалить вот эти папки (пикрил 1). То что я написал уже ошибка и я не понимаю почему он не показывает мне лист вложимости подпапок(пикрил 2 и 3) Очень буду благодарен если подскажите!
Я понимаю что буду копировать фотки в лист, потом выносить этот лист в основную папку, а папки вложения буду удалять, но питон не хочет видеть что у меня в подпапках, собака такая. В консоли видно что он мне перебирает и не видит вложимость, но если я вызываю функции вручную и по одной то он мне все это делает.
Загнулся он уже, маленькая относительная посещаемость. Моя команда больше концентрируется на вб и озоне сейчас
Это рекурсивная задача и решается она рекурсивно, а не твоей хуйней. Но ещё это частая задача, поэтому она уже реализована в стандартной библиотеке - смотри os.walk
Вон в документации второй пример прям тебе канает, только вместо os.remove делаешь rename.
https://docs.python.org/3/library/os.html#os.walk
>Ты сначала задачу свою опиши
Нужно сделать 30 отдельных реквестов и чтобы это не занимало 10-15 секунд нужно чтобы было быстро. Это для dashbord поэтому больше 5 секунд будет уже плохо.
Есть API, который я опрашиваю в бесконечном цикле раз в час, передавая случайное число от 0 до N.
N может изменяться и я хочу его чекать раз в 2 недели и, если он изменится, менять.
Как это реализовать в Python? Где хранить старое N? Как в запущенном процессе проверять N?
Разница в области действия твоего кода же, если ты во вьюхе сделаешь, то в другой вьюхе save останется прежним, если в сериализаторе, то только при использовании этого сериализатора, если в модели - во всех случаях. Вот и решай когда тебе это надо.
>>05104
Со строкой 'a' сработает?
>>05199
Вот тебе пример с покемонами: https://www.twilio.com/blog/asynchronous-http-requests-in-python-with-aiohttp
Если тебе нужны результаты всех 30 запросов вместе, то используй await asyncio.gather(), он подождет пока все запросы исполнятся и выдаст тебе результаты пачкой. Если надо отдать на клиента результат отдельного запроса не дожидаясь остальных, то создавай задачи отдельно с помощью asyncio.create_task()
Что тебе помешает перекатиться с джанги на другой популярный фреймворк? Это же не другая технология, и даже не другой ЯП. Просто либа к нему, для менеджмента реквестов и респонсов.
Думаю Джанга сможет адаптироваться под современные реалии, за счёт большого опен-сорс копьюнити. Та же поддержка асинхронности и ASGI тому пример.
А не расскажите ли вы мне часом, почему в питоне нет нормальной функции вывода???
Ваш пидорский print() на самом деле является println(), он тупо ставит \n в конце любой строки. В любом другом нормальном языке есть функция вывода в строку, без переноса
>я к вам пришел из другого, более элитного треда
Откуда тебя погнали ссаными тряпками?
Есть специальный аргумент end="\n", можешь каким угодно конец строки делать, по-умолчанию "\n".
Тебе не место среди пайтон господ, уходи отсюда.
А еще функцию чтобы выводить через табуляцию, а еще функцию чтобы через строку, а еще функцию чтобы разделитель был не пробел а таб
Если это для тебя самая важная функция языка, то стоить поискать другой, тут плохо зделано тупо.
Да вообще долбоебы
Надо было не 2 сделать а 4: одна выводит в строку, другая через строку, третья через запятую а четвертая меняет регистр при выводе
Вот тогда было б заебись
Что на явах? На благородной джаве все просто
System.out.print() для вывода в строку
System.out.println() ставит \н после вывода
Также в джаве ты можешь ставить \n прямо в сообщении и будет все выводиться как тебе надо
Например "ху\nй" выведет:
ху
й
Пиздец ты клован...
в прочем что еще можно ожидать от человека не осилившего мануал для базой функции print
>>05543
Нахуй вы это высрали то?
Вы как раз таки и указали на проблему питона. Там по стандарту стоит енд="/n" хотя по стандарту не должно ничего стоять
А если хочешь вывести на новую строку то как раз таки и использовать этот доп аргумент
А пример на джеве я сделал потому что там анон сам это попросил
>Кста, анон, попробуй так в своих явах
>А пример на джеве я сделал потому что там анон сам это попросил
Анон тебя просил сделать partial применение
Зелёный, принт обычно используют для дебагга каких-то переменных для себя. Мне проще написать print(a), и увидеть в терминале вывод в отдельной строке, чем каждый раз писать print(a, end="\n").
Называешь меня зеленым и при этом дебажишь принтом?
Нихуя себе
Подойди к синьору, спроси как они дебажат
И почему же в си нет ни print, ни println, как так получилось?
>Вы как раз таки и указали на проблему питона.
Какая ещё проблема питона? Как раз в большинстве случаев нужно, чтобы print переводил строку, чтобы не писать "\n" каждый раз. Это реально очень неудобно каждый раз писать руками, как в C/PHP, например.
Если тебе нужно печатать на экран без перевода строки, то скорее всего ты что-то делаешь не так, что дурной стиль и чревато проблемами. При этом у тебя есть такая возможность, указав end="". Но я не помню, когда последний раз так делал.
В норме ты должен сначала сформировать строку, а потом уже делать её вывод.
Тоже не по стандарту? Лучше же включать дебаггер и перезапускать весь проект, чем законсолить нужный объект в классе и глянуть че в него упало. Зато по какону и профессионально
Я же говорю, что он реализует протокол, т.е. iter и next, поэтому его можно использовать там же, где и итераторы. Но не только.
>Со строкой 'a' сработает?
Нет, а разве это является смехуечком по условию?
БТВ моя хуйня еще валится если смехуечков не найдено, так что надо было добавить в начале return 0, если в строке не найдено смехуечков ah ha.
При этом знаю точно, что списки туда запихнуть можно.
Сам сделал, но костыльно. Пришлось делать список из этих списков, чтоб длина соответствовала длине датафрейма. И уже это список списков пихать как целую колонку.
Что-то типа
list=[[1,2,3], [2,3], [1,2]]
df['column_name']=list
По работе написал программу, которая залезает на хост БД, с помощью Pyinquirer и выбирает нужную базу данных и опять же по выбору лезет в нужную таблицу, забирает оттуда данные, форматирует их в нужный вид и подставляет в текстовый файл с кучей предыдущей инфы из этих таблиц. Попутно ещё разучил регулярки в SQL. Короче по сути вышел такой дифф.
Скрипт получился большой, на 2500 строчек. Буду думать, как оптимизировать, а так прям пиздец охуенно, срезал этой штукой часа два работы каждую неделю и постоянные обосрамсы на продакшене.
Ещё буду прикручивать версионирование через гит, чтобы обновлять эту программу.
Есть 1 код через который пытаюсь приконектиться к БД, но все время выдает ошибку, что класс com.ibm.as400.access.AS400JDBCDriver не найден. Очень больно, тыщу страниц в гугле прошел, но ничего не находится.
import jaydebeapi
connect = jaydebeapi.connect(
'com.ibm.as400.access.AS400JDBCDriver',
'jdbc:as400://url;',['login','pass'],
'Driver/jt400.jar')
Я скоро повешусь от этой проблемы.
Пытался также через ibm_db
ibm_db.connect(
"DATABASE=name;"
"HOSTNAME=name;"
"PORT=;"
"PROTOCOL=TCPIP;"
"UID=name;"
"PWD=pass;",
"", "")
Все без результатов. Умоляю, двач, помоги. Вовек не забуду.
Анон, ты сделал? Мне было бы тоже интересно как решается такая задача
Сходное где навыки системного мышления пригодятся, но без мозгоёбства мелочными багами - инженеры, математика, музыка, архитектура.
Серьезно, чел? Ты прописываешь драйвер для подключения, драйвер не найден. Получается, что нужно нагуглить, как установить этот драйвер или какой правильный драйвер туда прописывать. Разве нет? Сколько IQ? Какая зарплата?
Первое, IQ нормально уровень сообразительности показывает, ну а зарплата уже чисто справочная инфа.
2к строк это прям очень много, я недавно целый проект написал за месяц примерно на 4к строк, полностью рабочий, а тут одна функция, уверен что все нормально сделал или накостылял так сильно? Или может это нормально, на питоне просто редко вижу такие файлы огромные
app 1
app 2 value1 value2 value3
Вера в iq ничем не отличает от веры в гороскоп и гадания.
Ты типичная тупенькая внушаемая пидораха.
https://www.youtube.com/playlist?list=PLvb7ivodu7oQw9aaMbjdIxpSj_f3jJIaK
Скажем так: если твой IQ 70 ты это однозначно пруфает что ты дурачок (если конечно ты зачем-то специально не завалил тест или не писал его будучи больным/бухим); а есди твой IQ 130 то это не пруфает вообще ничего
Маньки очень любят выпячивать свой маня-IQ, просто потому что это одна из очень немногих сфер где они хоть чего-то достигли
Интересно но слишком растянуто, эт надо было с класса пятого. А если быстро, если надо уже работать. Не, оч долго. И нудно.
Дать видосам информативные названия автор не догадался.
А ты типичная тупенькая антиинтеллектуальная пидораха.
IQ - это, буквально, уровень сообразительности, осознанности, способности грамотно принимать решения и следовать дисциплине. Американцы во время вьетнамской войны понабрали лоу-IQ дебилов из низших слоёв населения в армию однажды, потому что high-IQ население не хотело воевать - результаты были о ху еть.
>A man assigned to t-shirt printing shop was unable to understand alphabetization and had to pick out each letter for printing by scanning through the box one by one; a sergeant trained two men to drive military trucks somewhat successfully but they were too dangerous drivers to be used and were transferred out; another simply forgot to get back on the helicopters after a village search forcing a second retrieval mission; another was lucky enough to be sheltered by his sergeant in mess hall duties (until a mortar hit it, killing him); one played a prank on his squad mates, tossing a defused grenade at them two times, but on the third throw forgot to disable it; another wandered away from an ambush and wandering back, was killed by his squad; while yet another almost shot his commander with a LAW rocket when startled; another did kill his commander while on guard duty when he forgot to ask for the password before shooting; another forgot to put his rifle safety on (shooting a squad mate in the foot, who died); another tripped a booby-trap while not paying attention; another was captured by the NVA and went insane, screaming endlessly and defecating on himself while being beaten… It is unsurprising that many of them would be made to ‘walk point’, or ejected somehow, in addition to the constant insults and abuse—a new recruit was told the NVA would kill them all in a few hours, went insane from fear, climbed up a flag pole, and jumped off it; and another was beaten to death in Marine basic training.
Это ревью книги, полностью здесь https://www.gwern.net/Book-reviews#mcnamaras-folly-gregory-2015
IQ это просто биологический факт, на который влияет окружение во время взросления, наследственность от родителей, уровень дохода семьи, образованность, etc.
>>06944
>есди твой IQ 130 то это не пруфает вообще ничего
Пруфает как минимум способность кодить. А на самом деле, пруфает вообще всё.
А ты типичная тупенькая антиинтеллектуальная пидораха.
IQ - это, буквально, уровень сообразительности, осознанности, способности грамотно принимать решения и следовать дисциплине. Американцы во время вьетнамской войны понабрали лоу-IQ дебилов из низших слоёв населения в армию однажды, потому что high-IQ население не хотело воевать - результаты были о ху еть.
>A man assigned to t-shirt printing shop was unable to understand alphabetization and had to pick out each letter for printing by scanning through the box one by one; a sergeant trained two men to drive military trucks somewhat successfully but they were too dangerous drivers to be used and were transferred out; another simply forgot to get back on the helicopters after a village search forcing a second retrieval mission; another was lucky enough to be sheltered by his sergeant in mess hall duties (until a mortar hit it, killing him); one played a prank on his squad mates, tossing a defused grenade at them two times, but on the third throw forgot to disable it; another wandered away from an ambush and wandering back, was killed by his squad; while yet another almost shot his commander with a LAW rocket when startled; another did kill his commander while on guard duty when he forgot to ask for the password before shooting; another forgot to put his rifle safety on (shooting a squad mate in the foot, who died); another tripped a booby-trap while not paying attention; another was captured by the NVA and went insane, screaming endlessly and defecating on himself while being beaten… It is unsurprising that many of them would be made to ‘walk point’, or ejected somehow, in addition to the constant insults and abuse—a new recruit was told the NVA would kill them all in a few hours, went insane from fear, climbed up a flag pole, and jumped off it; and another was beaten to death in Marine basic training.
Это ревью книги, полностью здесь https://www.gwern.net/Book-reviews#mcnamaras-folly-gregory-2015
IQ это просто биологический факт, на который влияет окружение во время взросления, наследственность от родителей, уровень дохода семьи, образованность, etc.
>>06944
>есди твой IQ 130 то это не пруфает вообще ничего
Пруфает как минимум способность кодить. А на самом деле, пруфает вообще всё.
>Пруфает как минимум способность кодить.
Тащемта, коденгу на питоне научить можно любую мартышку, причём мартышку, не осилившую даже жс/пхп, о каком там айсикью ты размечтался, маня?
>Втупую пересылаешь все на клиента, а на клиенте используешь одну из миллиона DataTable.js
Если готов помочь в личку, готов заплатить, если проконсультируешь, как это делать.
По-моему си намного проще чем питон. В питоне всякие компрехеншены, функциональщина.
Это разные проще, которые многие путают.
Си проще, но на нем сложнее решать сложные задачи.
Питон сложнее, но на нем проще решать сложные задачи.
Я конечно лучше стал обращаться со старыми знаниями, но новые от заданий приходят очень мало. Лучше пойду книжки читать.
Там процветает писькомерство на тему краткости, но пользы от этого немного. Я просматриваю все популярные варианты и иногда бывает малаца, хорошо зделали, но не очень часто.
А, внезапно, там есть diff_bytes.
>Не совсем понял тебя, передаешь хедеры при создании сессии и все, они будут отправляться с каждым запросом: aiohttp.ClientSession(headers=headers)
Допустим у меня есть ещё и другие реквесты. Чтобы постоянно в юнит тесте не писать хедерс=хедерс может их можно как-то сделать глобальными и доступными сразу при запуске любого теста для которого нужны хедерс.
У этих долбоебов вообще порой фетиш сделать как можно больше в 1 строку, даже когда это говно абсолютно нечитаемо
За такой код на проде будешь точно выебан
>Тащемта, коденгу на питоне научить можно любую мартышку
Увы, нет вот совсем. Проблема в том, что мартышки не любят и не умеют думать, вот совсем. Без этого кодинг не работает, потому что в кодинге необходимо думать над тем, что делает твой код.
Питону проще обучить неусидчивых, потому что меньше надо ботать всякой инженерной хрени, чтобы получить рабочий код.
>не любят и не умеют думать, вот совсем
Бля, поди подмойся, маня
Ты больно дохуя на себя берешь
На работе встречаю таких затупков что пиздец. Ахуеваю, как они вообще мышки взять в руки могут. Но тем не менее кодят и зарабатывают бабки
Умерь свое эго
Знаешь, как на гитхабе подсвечиваются красным и зеленым изменения в файлах? Вот эту хуйню я называю дифф. У меня нечто похожее, только программа не отображает дифф, а записывает его в файл.
>>06778
Там нужно лезть в 40 разных таблиц с забористым SQL с регулярками и очень по-разному форматировать каждый полученный массив данных. Но да, если бы пришел профессиональный питонист, он бы эту хуйню раза в два точно смог сократить, я-то и не программист даже. Просто манагер, решивший автоматизировать работку.
def parseFile(filename):
.....
class myplugin_t(qwe):
def run(self, arg):
matches = parseFile(filename)
....
ошибка: NameError: global name 'filename' is not defined
как определить 'filename'? нужно на Python 2.7.
По отдельности этих потомков я могу находить через такую штуку - doc.xpath("//div[contains(concat(' ',normalize-space(@class),' '),'class_name)]"). Проблема в том, что так невозможно отследить наследственные связи.
уже не актуально, ползу дальше)
ругается на строку:
regs = re.findall(regs_pattern, match['last_line'])
ошибкой: "tuple indices must be integer, not str"
regs=() - не помогает. Что нужно, чтобы tuple стал integer?
Не tuple должен стать integer, а индекс для tuple.
У тебя, видимо, match - список (а не словарь), а ты ему в качестве индекса подаешь строку 'last_line'. Если нужен последний элемент списка, то делай match[-1]. Если last_line - целочисленная переменная, то делай match[last_line], без кавычек.
Это нормально. Продолжай чередовать практическое решение задач с изучением стандарной библиотеки и типичных приемов, и будет прогресс.
как исправить-то?
https://disk.yandex.ru/d/9XSeJzunyZ6bZg
ругается на строку №32 :"tuple indices must be integer, not str"
В строке 29 надо for match in ret.
match в строке 23 это действительно tuple, который потом там распаковывается и пакуется обратно в словарь. match в строке 32 это уже такой словарь и есть. Так что, match['last_line'] - обращение по ключу к такому словарю.
Странный код, честно говоря. Кто-то надергал и склеил куски из чего-то вроде https://github.com/rmadair/windbg2ida/blob/master/windbg2ida.py
Допустим, нужно создать колоду карт из двух листов - в одном ранг, в другом - масть:
value = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
suit = ["Hearts", "Diamonds", "Clubs", "Spades"]
Так вот вопрос: как максимально простым и лаконичным образом создать словарь, где каждому значению из листа value будет перекрестно присвоено каждое значение листа suit?
Например:
{'A': 'Hearts',
'A': 'Diamonds',
'A': 'Clubs',
'A': 'Spades',
'2'': 'Hearts ... и т.д. 52 раза}
Пробовал через dict.fromkeys(value, suit), но этот метод не распаковывает лист suit, а выдает:
A ['Hearts', 'Diamonds', 'Clubs', 'Spades']
2 ['Hearts', 'Diamonds', 'Clubs', 'Spades']
спасибо, ошибка пропала, но не работает как должно - трасса в ИДА не подсвечивается)
Это тот (вернее, похожий - у меня есть более древняя версия, которая уже недоступна) код с гитхаба и есть (тот тоже не работает - не та версия IDA или python. На разных версиях заставить работать не удалось), просто все методы засунул в класс регистрации плагина.
что делает: с помощью windbg снимается трасса выполнения с исполняемого файла и затем в ИДА подсвечивается ход исполнения. Должно в итоге быть так: см. рисунок.
Состав метода fillInGraph одинаковый у меня и на гитхабе, т.е. ошибка где-то в логике манипуляции с данными снятой трассы..
п.с. если поможешь завести - зашлю пару сотен на телефон)
Никак. Для каждого ключа в словаре будет одно значение. То есть, у тебя в одном словаре может быть, например, 'A':'Hearts' или 'A':'Diamonds', но не одновременно.
Если нужен список всех пар, то cards = [(v, s) for v in value for s in suits]
отличие моего кода от гитхаба (если там рабочий) здесь:
у меня открытие файла трассы:
filepath = idaapi.askfile_c(False, ".", "Pin log file");
f = open(filepath,"rb" )
text = f.read()
matches = re.findall(pattern, text)
на гитхабе:
text = open(filename).read()
matches = re.findall(pattern, text)
может, состав переменной "text" отличается, т.е. код не эквивалентный? Код с гитхаба по открытию не работает, видимо, другой состав функция СДК питона. У меня при запуске плагина появляется окно выбора файла трассы и его открытие. код до сообщения "idaapi.msg("fillInGraph\n")" работает, сообщение появляется, т.е. парсинг файла проходит..
Спасибо! Не знал, что List Comprehension можно использовать таким образом для двух списков, и что он будет работать именно так. И да, со словарем ступил, он и вправду был бы невозможен.
>т.е. код не эквивалентный?
Эквивалентный так-то.
Я не работал с windbg, но так понял, что форматы генерируемых log-файлов могут быть разными: https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/trace-message-format-file
Так что, может быть, у тебя и код правильный, но то, что ты получаешь от windbg приходит немного не в том виде, что нужен.
Скинь пример лог-файла, который ты хочешь обработать.
Спасибо.
Если каких-то особо специфичный требований нет, то, конечно, такое делается на уровне ОС, обычно, там есть системы, которые запускают программы по расписанию. Что конкретно надо делать, зависит от ОС. Если у тебя там разновидность линукса, почитай про cron и systemd timers, в винде такая штука называется планировщик заданий (Task Scheduler)
вот файл и его трейс:
https://disk.yandex.ru/d/ub_3do4q1Z8NqQ
Отркрывать в ИДА_6.8 (теоретически, должна подойти любая версия 6.х). Нужно установить на диск С питон_2.7 и закинуть плагин в соответствующую папку ИДЫ.
вот плагин:
https://disk.yandex.ru/d/9XSeJzunyZ6bZg
п.с. трейс снимается с помощью "Debugging Tools for Windows" под W7, он стандартный. Под W10 wdbg стал поддерживать js, новый плагин windbgida на гитхабе.. не проверял.
вот что ответили на одном форуме:
Может, версия питоне не подходит? Странно.. ИДА6.х работает с питоном 2.7, название файла об этом говорит..должно как-то работать!
Нет, дело не в этом, хотя я тебе поначалу то же самое написал про кортежи и индексы. Просто в том коде на гитхабе переменная с именем match используется в двух разных функциях в двух разных смыслах. В parseFile - это кортеж, а в fillGraph - это уже словарь. Когда ты эти функции запихал в одну, произошла накладка, которую фикс с for match in ret решает.
спасибо, будe пытаться распихать обратно! Изначально переделываю "старый" плагин:
https://disk.yandex.ru/d/k5RiDSvaHCaxvA
была ошибка вызова метода из класса:
>>07945
Попробуй заменить строку pattern = ... в гитхабовском коде или своем на вот это: https://pastebin.com/T0R8j2ry
У меня нет сейчас IDA под рукой. Не могу проверить.
ебаные регулярки, бесят
гитхабовский файл не совместим с ИДА6.8 - другая структура плагина, требуется def PLUGIN_ENTRY():
Если и изменять (максимально почти рабочий), то этот "оригинальный" файл:
https://disk.yandex.ru/d/k5RiDSvaHCaxvA
который тоже вызывает ошибки
Я всегда завидовал способности настоящих инженеров разобраться на ходу с такой хуйней. Их научили архитектуре базовых процессоров вроде 8080 или з80, их научили базовой цифровой схемотехнике, их научили си, как связывающим всё это, дальше лишь дело желания.
Но с другой стороны, на виду истории всяких кулхацкеров-кардеров, в 95% полнейших селюков и дилетантов, хуй проссышь, короче.
Да я любитель-самоучка, ни разу не программист (немного на pb пописываю и asm читаю, могу в студии исходник собрать). Ни образование, ни работа никак не связаны с "хобби", на которое ещё и времени не хватает..
Попробуй так: https://pastebin.com/Kdpcenmk
В принципе, твой пример лог-файла парсится. Как оно там раскрашивается или нет - не знаю, так как на моей бесплатной версии IDA нет питона.
Для одной работает
df.groupby(pd.Grouper(key="dates", freq="D"))['column1'].apply(list).reset_index()
Но если взять две
df.groupby(pd.Grouper(key="dates", freq="D"))[['column1', 'column2']].apply(list).reset_index()
то получается в каждой строчке список из названий колонок вместо данных вот так
['column1', 'column2']
['column1', 'column2']
['column1', 'column2']
Как быть?
df.groupby(pd.Grouper(key="dates", freq="D"))[['column1', 'column2']].agg(list).reset_index()
Спасибо няша. Натыкался на функцию .agg, но так использовать не догадался бы.
ида лежит на торрентах:
https://yandex.ru/search/?text=ida 6.8 torrent&lr=110907&src=suggest_T
ошибок запуска плагина нет, но дерево не закрашивается. Подозреваю из-за того, что отпарсенное значение "matches" не доходит из процедуры "parseFile" в "fillInGraph". Процедура "parseFile" ничего не возвращает, в результате в "fillInGraph" значение "matches" пустое - новая локальная переменная (кортеж/список или чем он там является)..
Что означает когда говорят дженкинс в контейнере в дженкинсе? Это какая-то новая мода?
да, типа смузи в коворкинге
Подозреваю, что дело в буфферинге.
Можешь добавить принудительный file.flush(), а потом пиздуй читать документацию, как там всё устроено.
Да вряд ли такое должно происходить. Я же этот файл до этого не трогал. Да и если впихнуть flush, не особо помогает.
Может дважды вызывать врайт это не плохая идея?
Замечательно помогает.
Запускаем такой код https://ideone.com/n94Fjf
Сразу при запуске пишется test и висит, потом жмем ctrl+c, валится эксепшн, буфер сбрасывается и видим test2.
Через контекстный менеджер попробуй и с режимом работы поиграйся.
Зачем ты переоткрываешь файл каждый раз? Закрывать файл тоже надо.
У тебя проблема в том, что ты открываешь его как "w+", из-за этого указатель каждый раз на начало ставится и твой TEST перезаписывается.
Тебе надо открывать файл как "a", то есть append. Тогда указатель будет на конец файла указывать.
Но на самом деле тебе надо куда сильнее переписывать всё это дело.
>>09668
И дополню
Проверка в строке 51 на самом деле лишняя, так как домены без точки не пройдут проверку на строке 53
Строки как в 53 лучше записывать как
site_name not in ["bloomberg.com", "nytimes.com"]
имя файла лучше получать используя os.path.join
file_name = os.path.join(dict_name, site_name.split('.')[0])
С файлом работать через контекстный менеджер
with open(file_name, 'a') as file:
____file.write("TEST")
тогда автоматом файл будет закрываться
Даже с "a" не работает. Только если делаю
write
flush
write
Но так оно и с w+ работало.
За ошибки в принципе пофиг, это один из этапов проектов, что-то на будущее сделано, что-то я скоро удалю. Хотя за джоин почитать стоит.
Такие боты генерируют дохуища логов, особенно в пропаленных диапазонах айпи. Что по хттп, что по ссх.
Можешь поставить себе какой-то fail2ban для спокойствия.
кажется, разобрался:
1. имхо, автор плагина усложнил без необходимости плагин, который пишется из трёх строчек, так как:
-вывод лога wdbg можно сильно упростить командой "par 0xdeadbeef" или другой, отключающей вывод регистров
- нам от лога нужно только знать выполняется ли jmp/jne/jxx (то есть трейсить, проверять опкод функцией "GetMnem" на "jmp/jne/jxx") и подсвечивать функцией "idc.SetColor(0x41705B, CIC_ITEM, 0xBFBFE4)", где первый аргумент - адрес опкода
2. независимо от того, работает ли парсинг.. скрипту нечего подсвечивать, потому что в логе wdbg отсутствуют подходящие адреса! - все адреса в вызываемых модулях! Возможно, в новых версиях поменялся вывод wdbg.
Спасибо огромное за помощь!
Есть два скрипта в одной папке. Из одного импортирую в другой как на скрине. Все работает, но VS Code дает предупреждение. Что не так?
Блять, я прочитал "Import "product" could not be resolved". Спрашиваю, потому что все работает. Интересно, это типичное поведение для VS Code или нужно заморочиться и исправить?
UPD: Нашел логическую ошибку, все поправил.
Слушай, давно хотел узнать, есть какой-то список классических приложений для сайта, которые вот как fail2ban, банят при ддосе, ограничивают читая логи, качают много медиа, допускают только проверенные юзерагенты и т.д, наверное еще много чего есть полезного, подскажи
Сап двач. Начал учить питон буквально 4 дня назад. Пока тренируюсь, пишу всякие кодики в рамках моих знаний, а их очень мало пока.
Вот пикрелейтед код. Он должен симулировать парадокс Монти Холла. В данном случае я попытался написать случай, когда после вопроса ведущего дверь меняют. Тоесть должно быть около 67% выигрышных ситуаций. Но прогоны выдают около 33%. Значит где то в кусках if, elif семантическая ошибка.
Если кому не лень, посмотрите может подскажите где там я ошибся.
Я нашел модели голосов
https://github.com/snakers4/silero-models#text-to-speech
но не знаю как их прикрутить. Нашел вот такой пример
https://colab.research.google.com/github/snakers4/silero-models/blob/master/examples_tts.ipynb#scrollTo=indirect-berry
но тут используется display и, как я понял, обрабатывается долго из-за того, что это удаленный серв. Можно ли как-то вшить его себе в винду или просто запускать стационарно, если скачаю файл этого TTS?
Условия неправильны. Получается choiz == ('A' or 'B')
надо x == 'A' or x == 'B' или как вариант x in 'AB'
Мужики, что надо знать по джанге чтоб устроится джуном?
Есть два подхода для реализации идей ООП, один подход всё делать через интерфейсы, второй подход через "протоколы", он же duck typing.
Когда язык компилируемый, то там чисто технически проще через интерфейсы всё. Ты передаёшь в функцию указатель на интерфейс, то есть указатель на таблицу адресов функций, которые что-то делают. Эту таблицу надо формировать, вот это и есть интерфейс.
Когда язык динамический, ты можешь получать эти функции по имени. Тебе не нужно формировать интерфейс, тебе достаточно, чтобы был нужный набор методов у объекта, это и называется протоколы.
У каждого подхода свои плюсы. Протоколы значительно проще, более гибкие. Но менее строгие, и самая большая проблема это конфликт имён. Два разных протокола могут хотеть работать с одинаково названным методом, но который работает по-разному.
В принципе, общая логика такая, что чем больше проект, тем актуальнее, чтобы там была строгость, хоть из-за неё и большой перерасход кода.
То, что хорошо для небольших проектов, там на десятки тысяч строк максимум, может приводить к коллапсу на мегапроектах в сотни тысяч и миллионы строк.
На питоне всё-таки мегапроектов нет.
Ну так-то в питоне тоже есть и полиморфизм и интерфейсы (например, через декоратор abstractmethod из abc). Так что, трудно назвать его урезанным в плане ооп. Парадигму "всё есть объект" он вполне реализует. Чего нет - так это строгой инкапсуляции (нет настоящих private свойств или методов), что Гвидо сделал намеренно ( "we're all consenting adults here").
1 как установить чтобы аргумент -h вызывался при запуске скрипта без аргументов?
например python app.py выдает тоже что и python app.py -h
2 почему функции устанавливаемые в set_defaults(func=) требуют аргумент?
код: https://pastebin.com/gUHNWmjV
Я кстати понял, что был лучшего мнения о джаве, чем вот она заслуживает. На джаве сильно сложнее fizzbuzz не писал, на плюсах ООП писал, но давно и забыл уже.
Посмотрел, проблема с конфликтом имён актуальна и для джавы. То есть если в двух интерфейсах есть метод с одинаковым именем, но разный по сути, то будет большая проблема.
А раз так, то весь смысл интерфейсов теряется, никакого профита. Просто технология, как это реализовать в статическом языке, не актуальная для динамического языка как питон.
Хотя ХЗ, возможно я чего-то не знаю. Наверное есть решения для этих проблем на джаве, должны быть.
Тот самый долбоёб, который решил себя попробовать в роли питухон-разраба
Ты ебанутый, и что пользователю делать с твоим выпадающим списком? Делой текст инпут с автокомплитом.
Сам изучаю чисто по фану без особой цели устроиться, но вот интересно, этим в рахе можно заработать(питон, скьюэл, визуализация, может панда с нимфи и прочее туда же) ?
После "а" должна быть h иначе
Да, это называется Business Intelligence (BI), погугли вакашки, голодным не останешься.
Ха, прикольно, все есть кроме интрументов, хотя там буквально написано в их описании "Позволяет заниматься БИ без вмешательства айти департмента" кек, ну и джаваскрипта тоже нет, ну и нахуй его.
>и что пользователю делать с твоим выпадающим списком?
Я ебу что ли, так в тз написано. Значит попробую сделоть инпут с автокомплитом, а потом уволюсь. Спасибо, за идею.
Сказали, что питоновских знаний хватает, а джангу и веб смогу изучить за месяц для решения нужных им задач. Но вот неделю уже пытаюсь решать, и с джангой более-менее понятно, но веб темный лес.
Так вот. Господа!
Заинтриговало меня существование этого вашего Питона.
Дайте краткое заключение о практической целесообразности применения и смысле существования Питона.
Для человека, почти ничего не понимающего в программировании.
Буду признателен. Мой интерес искренний, если что.
Предпосылки:
- у меня на Питоне подмастерье пишет, отзывается о Питоне, как о годноте;
- я сам не занимаюсь промышленным программированием (в том смысле, в котором программа является отчуждённым промышленным продуктом, а не промышленным инструментом, связанным с технологическим процессом);
- сильное влияние на меня как инженера оказал Си,
- ощущается мной избыточная детализация программы на Си — хочется решать задачу ближе к задаче, а не к адресной арифметике.
Волновался. Даже картинку забыл. Извините!
Пацаны, там чувак с канала диджитализируй выложил свой курс по веб-технологиям, он вроде сам хорошо рассказывает
https://www.youtube.com/watch?v=Cug9a8Aw2W0
https://stepik.org/course/96018/promo
Я даже бабло отложил под его курс(10к) но его цена(20к) че-то сильно на жабу давит
Вопрос: как думаете, как скоро появится на сливах и трекерах?
Согласен, я пошуршал по торрентам, как-то редко со степика сливают, я так понял только официальные курсы от хозяев степика в основном слиты
Интересно, хотя бы в течение месяца появится ли на торрентах
Замечательный прикладной язык, очень приятный в изучении. Не знаю, насколько тебе это надо и какие задачи ты собираешься решать, но можно попробовать, если интерес есть.
>Дайте краткое заключение о практической целесообразности применения и смысле существования Питона.
>Для человека, почти ничего не понимающего в программировании.
Ну ок:
Питон это пиздец как круто
Это строго и свободно одновременно, стройно и красиво
Это зрело и вполне молодёжно
Это дофига возможностей, чтобы писать хорошо и быстро
Это лучшее комьюнити, хорошая документация
Думаю, этого достаточно.
Это тот чел, который в своем видении необходимого для джуниора вывалил список аля фулстак?
Он для бэкэнда на питоне составлял список, про фронт там было сказано что будет плюсом знать html/css/js по верхам. линукс базово и тд
Че нет то в современных реалиях? С голым питоном наврядли куда джуном возьмут
>чувак с канала
Интересно, он сам жестикулировать учился, вот все эти жесты учил и тренировал, или может есть какие-то специальные курсы для влогеров? Сколько стоят такие?
Мелкая автоматизация. Там, где клей между готовыми утилитам (вроде bash) становится громоздким и неудобным, т. к. нужно дописывать много. Числодробление, матрицы, линейные пространства, оптимизационные задачи. Там, где matlab предоставляет слишком сложные абстракции.
>>11408
>Это лучшее комьюнити, хорошая документация
На старте хотя бы мне будут доступны русскоязычные источники?
Когда вы успокоитесь со своими поисками ИДЕАЛЬНЫХ курсов?
Берешь любой популярный курс или книгу и хуяришь. Там одна и та же базовая хуйня, дальше надо лезть вглубь самостоятельно.
Если ты занимаешься чем-то, что хоть отдалённо имеет отношение к интернету, но не знать html/css хоть на базовом уровне это просто полное дно. JS тоже как-то знать надо. Вопрос в глубине этого как-то.
Ну в любом случае представление о вёрстке необходимо, как и понимание, как JS работает с браузером и бэкендом.
>Числодробление, матрицы, линейные пространства, оптимизационные задачи. Там, где matlab предоставляет слишком сложные абстракции.
Там тебе придётся учить numpy и другие пакеты, с ними бошку сломать придётся и это не совсем питон, строго говоря. Но правда на других платформах не проще.
ХЗ, что в матлабе, подозреваю что примерно тоже самое.
>На старте хотя бы мне будут доступны русскоязычные источники?
Что-то есть и на русском.
Тащемта все эти пандасы и нампаи это и есть прикрученный к питону матлаб, р и прочая околонаучная тряхомудия.
Ждем курсы по правильному дрочению жопы для вебкама.
Я в том то и дело что базовую хуйню уже знаю
Хочется более глубоко про устройство интернета, протоколы, безопасность
Там целая глава про питон, за нее особенно платить впадлу, потому что за то время, пока он целый год этот курс высирал, я уже 100 курсов посмотрел и напрактиковался
Ну по содержанию там очень слабенько всё. Пара крепких книг даст тебе в сто раз больше знаний.
Например.
https://www.amazon.com/gp/product/1718500408
https://www.amazon.com/dp/1118026470/
Последнюю особенно рекомендую, вся суть вебдева, но с обратной стороны, лол.
Моё мнение, курсы могут быть полезными только как обзорные, о чём-то рассказать в простой форме, показать, как какой-то инфраструктурой или инструментами пользоваться. Чтобы уже дальше было понятно, куда копать.
Если нужно глубже, то надо или смотреть университетские лекции, или читать книги.
Про более глубокое устройство интернета лучше поискать университетские курсы в открытом доступе. Хотя хз, не могу ничего конкретного порекомендовать. Но совершенно точно не обычные коммерческие курсы.
Это довольно широкая тема.
Это какая-то русская проблема. Может из-за того что у нас принято 90% быдла ломиться в вышку где учиться то и не особо сложно. Поэтому все люди автоматом подразумевают что тебя будут учить корифеи, деды, опытные ветеренары своего дела. В США, например, либо плати 100к в год, либо будь гением, либо учись сам, самое дорогое что там есть - буткамп, а так все курсы(скорее интерактивные сайты) это всякие кодакадеми, джет брейнс, удасити - стоят 200 баксов в год. Такой хуйни чтобы американец платил условные адаптированные под него 200к рублей и учил какую-то дичь год от ОПЫТНЫХ ПРЕПОДАВАТЕЛЕЙ(которые не гуглятся, и конторы в которых они работают якобы вообще не существуют) это просто нонсенс.
По факту человеку для обучения адекватному достаточно лишь списка технологий и библиотек которые надо осилить. Голого питона как бы и не существует, что там иф, ваил, класс, деф, фор, лист/дикт/сет/тупл и что я там забыл? Все остальное - библиотеки, sql, джсон, хтмл+цсс+жс, гит.
Курсы на которых тебе как работает гит рассказывают месяц или учат делать первый сайт с пиццами взятыми из стока гугла 6 месяцев, ну не смешите
>Голого питона как бы и не существует, что там иф, ваил, класс, деф, фор, лист/дикт/сет/тупл и что я там забыл? Все остальное - библиотеки, sql, джсон, хтмл+цсс+жс, гит.
Голый питон это ещё импорты, классы и объектная модель, метаклассы, стандартная библиотека и связанные с этим подходы вроде логгинга, тайпинг, itertooks, разные докстринги, конкурентность, тестирование. Куча своих паттернов проектирования.
То есть как бы освоить язык и уметь писать на нём это на самом деле не "пара недель" даже для опытного программиста. Иначе ты будешь писать на питоне как на Си или ЖС.
>По факту человеку для обучения адекватному достаточно лишь списка технологий и библиотек которые надо осилить.
Нужна программа обучения, как все эти технологии осваивать. Вот как освоить технологию "параллельного программирования"? Или даже ООП? Это всё длительный и многоэтапный процесс.
Правда курсы в этом мало помогут. Надо делать поправку, что курсы для тех, кто хочет чуть заплатить и пассивно поучиться. Просто таких большинство. А нормальное образование это совсем другие ресурсы, другие затраты и другая подготовка.
>Голый питон это
Нет, ты молодец конечно, но вот только на курсах типа скиллбокса голвый питон это как раз то что я написал, а все что ты пишешь там дается просто как упоминание.
>Нужна программа обучения, как все эти технологии осваивать.
Не нужна, такого не существует, и программа обучения именно как педагогический/методический термин из образования к тыканью в библиотеку не применим вообще. Если человек хочет учить программирование по учебной программе - добро пожаловать в вуз, где разваливающийся дед тебе будет 2 года задвигать базовую физику и математику, потом 2 года будет рассказывать про транзисторы и параллельно будешь делать какую-то хуйню на си или плюсах, в итоге на 4м курсе когда ты напишешь охуенную приложуху распихивающую студентов по категориям в датабазу и увидишь этот же самый проект в джетбрейнс под тегом МЕДИУМ ДИФФИКУЛТИ станет немного понятнее почему это не самый эффективный способ осилить именно язык, а не набор хуйни в виде глубокой информатики, сигналов, кодирования и прочей шелупони абсолютно не нужной 99% времени.
>>11522
В сша для американца без американской вышки или ты про русского без русской вышки который хочет в гугл?
В гугл не нужна американская вышка, берут так же по опыту, стажу, технологиям и собесу.
В сша менее 8% людей идет в вузы, выкинуть половину вузов которые не обучают информационным технологиями, выкинуть 80% факультетов которые не являются пригодными для ФАНГ, останется дай боже сотка специалистов с вышкой в год, как все фейсбуки, гуглы, амазоны, цитадели, плюс государство наберет себе программистов если их нихуя не выпускают вузы, а?
>как все фейсбуки, гуглы, амазоны, цитадели, плюс государство наберет себе программистов если их нихуя не выпускают вузы, а?
Раскрываю секрет века: русские, индусы, украинцы
По тому, что ты говоришь, видно, что тебе никогда не доверяли более или менее серьезную задачу.
Способности ответственно выполнять задание можно научиться только, если тебя раньше ебали за плохой некачественный результат. Поэтому преподы и менторы имеют свою копейку
>В гугл не нужна американская вышка, берут так же по опыту, стажу, технологиям и собесу.
Нет, можно попасть в ФААНГ без вышки, но, там примерно 90% работает с вышкой.
>В сша менее 8% людей идет в вузы
Сам придумал? В США свыше трети населения возраста 25+ имеют степень бакалавра. 13% это магистры и старше.
>разваливающийся дед тебе будет 2 года задвигать базовую физику и математику
Иди в нормальное место и параллельно учись сам.
Образование системно. Нельзя полноценно осваивать базы данный, не умея в алгоритмы, например. То есть только на уровне маками можно, которая не понимает, что такое сложность, сложность выборки, почему какие-то операции дорогие, а другие нет, что такое нормализация, когда она нужна, а когда не нужна.
И куча всего ещё.
Да, если чел не хочет учиться, то в ВУЗе его ничему не научат, это факт. То есть сдаст экзамены и зачёты, но применять знания не сможет. Если хочет учиться, то помимо того, чтобы дополнительные курсы брать по выбору, ещё и самому доучиваться придётся, это тоже так.
Есть файл А, АВ и В.
А — csv файл, нужно привести в нормальный вид
В — xls файл, нужно перевести в csv формат
АВ — соответственно нормализовать и перевести в csv
Как это грамотнее сделать?
Меня просто смущает момент АВ, потому что я сначала записываю csv файл, ранее бывший xls, а потом планирую его же перезаписывать writerow'ом.
Нет такой проблемы в жаве, хз откуда ты это взял. Имплементишь в объекте два интерфейса с одинаковыми именами методов - обязан предоставить два метода. Главное, чтобы аргументами методы отличались.
А если у тебя два интерфейса и с одинаковыми методами, и аргументами внутри, при этом по смыслу работы не являющиеся альтернативными реализациями одного интерфейса, то это очевидный признак плохого дизайна системы.
> можно за один заход
Хау? Не записывать содержимое xls в файл и просто в оперативе его крутить?
Короче как выглядит задача:
У меня есть инпут папка. В ней А, В или АВ, либо все вместе. Мне нужен класс с минимальным повторением кода, который бы мог на выходе дать в папку аутпут нормализованный файл с тем же названием.
Процесс нормализации, вкратце, перевод файла из вида
+,C1,C2,C3,C4
R1,VVVV
R2,VVVV
R3,VVVV
В вид
R1,V,C1
R2,V,C1
R3,V,C1
R1,V,C2
R2,V,C2
...
Ну так в любом случае надо вычитать весь файл, чтобы переформатировать так, не? Так зачем дважды ходить?
А с названиям в принципе легко. Читаем file.csv, пишем file.csv~, потом в конце rename и он заменяется.
>Где ты их находишь?
лол в /b
ну я там сидел 4 года, два месяца назад перестал туда заходить, а на прошлой неделе начал учить погромирование и пришел сюда.
но в /b больше не хожу, потому что я старый уже и мне нельзя прокрастинировать
У меня было еще решение элегантнее, если файл xls и ему нужно нормализация, то сохранять его csv с постфиксом. После нормализации сохранять файл с правильным названием общий метод для изначально csv и 'бывших' xls файлов и os.unlink по файлу с постфиксом, если такой существует.
Но один хуй я сейчас все переписал, теперь у меня все методы возвращают лист листов, а записывается файл лишь в конце мейн метода.
С чего вдруг?
Одинарные ближе перловикам, пехопистам и может кому ещё, потому что там они не интерполируются. Ну и без шифта пишутся, тоже заебись.
Двойные кавычки гавно. Ну представь тебе надо в логи дампнуть `foo = "bar"`. С двойными заебешься внутри слэши прописывать
Хочется, конечно, чтобы штука была относительно популярная и с большим комьюнити, легкая для вката, изящная в реализации, сильная в возможностях. Но чем-то можно и пожертвовать.
Вроде как PyQt самое популярное, как оно? Или еще что-нибудь?
В PEP8 указано, что рекомендаций по выбору нет.
Я для себя придерживаюсь принципа, что для отдельных слов, символов, констант и т.п. одинарные кавычки, а когда какие-то фразы или предложения, то двойные.
Так довольно удобно.
>На чем делают графические приложения на Python?
Почему именно на питоне? Питон - топовый язык для датасаенса и еще некоторых областей, но графику на нем лучше не делать. Это долго, сложно и бесполезно с точки зрения приобретенных навыков.
Понимаю прекрасно, мне для души. Поэтому и хочется минимум усилий потратить, сделать свою хуйню и успокоиться.
Потому что в питоне нет блочных каментов?
которая парсит некоторый формат данных и возвращает питонячий объект. Объект может быть словарем/списком/байтовой строкой/целым.
Так же есть еще один метод read_data(self) -> dict: return loads(self._raw_data), который парсит данные функцией loads, точно зная что вернется словарь, а не что-то другое. Но на "-> dict" mypy ругается:
error: Incompatible return value type (got "Union[Dict[Any, Any], List[Any], bytes, int]", expected "Dict[Any, Any]")
Если у метода read_data поменять возвращаймый тип на Union[dict, list, bytes, int], то ошибки посыпятся уже в другом месте. Например при обращении к методу __getitem__, т.к у интов его очевидно нет.
Как в таких случаях раставлять анотации типов? М.б можно как-то явно указать mypy что конкретно в этом месте вернется словарь?
Есть json списочек
Кодю json[1] - получаю информацию, все заебись
В этом json списке сто элементов, у 20 из них одинаковое поле Id
Как мне получить все элементы у которых одинаковое поле id из целого json списка?
Хороший вопрос, самому стало интересно
Наверное это хуевая функция если она умеет возвращать столько разных типов,
Если не ошибаюсь, в компилируемых языках можно указать один возвращаемый тип или интерфейс, и в каком нибудь c# нужно было бы написать разные конструкторы для разного типа данных, и вернуть разных наследников класса с функцией read_data.
Наверное тебе нужен класс-фабрика который возвращает объект с уэе распарсенными данными
Ты можешь например отсортировать списочек
sorted(json, key=lambda x: x['id'])
а потом groupby из модуля itertools сгрупировать с таким же ключом
и там уже можно итерироваться по групам
Попробуй как-то так поиграться:
from typing import cast
from typing import Match
.
.
.
def read_data(self):
return cast(Match[dict], loads(self._raw_data))
Я могу этот список засунуть как значение в словарь, например:
dict1['1'] = A ?
Подозреваю, что тут что-то не то, поскольку у меня у значение добавляется в виде пустого списка.
{"1": []}
Что за херня?
Ах, лень тебе рассказывать ссылочную модель...
Ты добавляешь в словарь ссылку на список. Потом ты этот список очищаешь в цикле, угадал? Получаешь, что значение словаря ссылается на пустой список.
>Потом ты этот список очищаешь в цикле, угадал
Ванга, залогинься.
В общем, где я прорукожопил инб4 при рождении и как всё-таки этот список добавить в словарь?
И, как я понимаю, Data Science это и аналитика данных и машинное обучение? или нет?
Это в первую очередь математика: линейная алгебра, мат. анализ, мат. статистика
Если с этим у тебя заебись, то изи
[
Product(product_name='n1', product_price='14.88'),
Product(product_name='n2', product_price='19.08',
Product(product_name='n3', product_price='9.11')
]
Не могу понять, как достучаться до свойства product_price.
Однохуйственно абсолютно, что твой вариант что через лямбду
Только ты во float все таки оберни, если у тебя цена в строке, а то проебешься
from collections import defaultdict
d = defaultdict(list)
for entry in myjsonlist:
d[entry["id"]].append(entry)
Для уника нужно веб-сервис написать, а у меня есть опыт с цмсками на пхп. Но когда сказал, что буду писать на пхп мне пальцем у виска покрутили и отправили писать на c# либо пайтоне. На c# у меня опыта 0, а базу пайтона знаю плюс есть опыт работы с фласком не зашло от слова со всем. Вооот, хочу джанго подрочить, узнал что есть CMS и теперь хочу CMS.
Есть вопрос. Вот я любой образ а докера могу взять, записав его в докерФайл и собрать это в дженкинс?
Задача, сделать контейнер в котором настроить env для юнит тестов питона, собирать его нужно каждый раз через пайплайн или его нужно хостить где-то?
Не понимаю, как сделать все начиная с 2 пункта. Я так понял, там должна быть рекурсия и if else? нихуя не понятно, есть вообще примеры на питоне подобного? если кто сможет сделать, могу скинуть 2 сотки на карту.
Пикрил, как сейчас стоят диски и шпиндели, лол
Существует 8 шпинделей, пронумерованых от 8 до 1 слева направо. На каждом шпинделе надеты диски, в количестве, равном соответствующей цифре из ID студента. Все диски имеют разные диаметры. Диаметр диска равен M * 10 + N, где М – номер шпинделя, на котором надет диск, а N – это номер диска на шпинделе, считая сверху вниз.
1.Необходимо визуально изобразить предложенную задачу. Диски на шпинделях сделать случайных цветов. На каждом диске отображать цифру, равную его диаметру. Диаметр диска также показывать его фактическим размером в пикселях.
2.Необходимо вычислить, за какое минимальное количество итераций переместятся все диски на шпиндель номер 1 по следующим правилам:
а) За одну итерацию можно переместить не более одного диска
б) Диски можно класть только с большего на меньший
в) Со шпинделя номер 8 можно перекладывать диски только на шпиндели 7 и 6
г) Со шпинделя номер 1 можно перекладывать диски только на шпиндели номер 2 и 3
д) Со шпинделей от 2 по 7 можно перекладывать диски только на два соседних шпинделя.
Похоже на задачу о ханойских башнях. Погугли примеры ее решения, должно помочь.
гуглил, но чет везде c++, ничего по питону. это и есть она, но везде 3 столбика, а тут по задаче 8, ебануться
Пиздец, это же одна из самых попсовых задачек наравне с сортировками. Сто миллионов статей с любыми языками и вариантами решений.
Заходишь на гх, вбиваешь в поиск и фильтр по языку
Можешь насоветовать чего-нибудь для быстрого вката в sqlalchemy? На работе используют, я до этого только djangoORM использовал, а сейчас надо бы по быстрому вкатиться.
Может есть какой-нибудь блитц который позволит делать запросы средней сложности, но без глубокого погружения в детали? Т.к. с деталями можно и оф доку читнуть.
Можно на англ, но если на ру будет, то вообще пушка. Спасибо, двач.
препод назвал это "модифицированной ханойской башней"
Пасаны, а как работать Selenium-ом с SPA?
Когда пытаюсь найти любой элемент на странице он мне постоянно выдает "no such element", сколько бы времени я ни ждал через time.sleep()
wtf? че делать?
Там можно ждать появления конкретного элемента.
Но может ты не все настроил и получил заглушку "пошел нахуй, ботяра".
Но в 90% лучшим решением является не дрочить селениум, а смотреть реквесты и повторять у себя, получая сразу готовые данные от бэка.
Мне нужно взаимодействовать с формой, вбивая туда нужные данные, тут только селениум
Ну ты можешь сам спрофилировать.
Имеет реальный смысл, когда у тебя в большом цикле обрабатывается много регулярок. Например, ты сканируешь файл построчно и каждую строку проверяешь каким-то сложным регулярным выражением. Выигрыш можешь быть кратным, при условии, что именно на регулярки основной расход времени идёт.
Но не забывай, что преждевременная оптимизация считается антипаттерном.
Ну ты лалка, я же говорю, в любом случае всё сводится к реквесту на бек, смотришь его и повторяешь. Берешь любую дебажную прокси и гоняешь свою форму, там всё будет.
>>14475
re.py обвзяка доступна в pure-python виде. Там видим, что используется искаробочный же lru_cache с настройкой 512. Вообще нет смысла заморачиваться, если у тебя там пару штук регулярок.
(под ботом я имею ввиду любую программу, которая будет эмитировать действия обычного юзера)
>>14509
> Но не забывай, что преждевременная оптимизация считается антипаттерном.
> Вообще нет смысла заморачиваться, если у тебя там пару штук регулярок.
Ну, вот, у меня по профайлингу выходит, что прекомпиляция даёт пусть и маленький с точки зрения задачи скрипта, но всё же прирост в скорости. Антипаттерн, не антипаттерн, но как-то глупо было бы отказываться от этого, нет? И если уж прекомпилировать, то куда это всё по-православному складывать: вверху, там, где константы, или выносить в отдельный класс/модуль?
>>14142
Я щас именно этим занимаюсь
Тупо смотрю видосы на ютубе, смотрю как они делают
сначала там создается движок через create_engine, в него передаем урл к базе данных
потом с этим движком получаем объекты MetaData(в нем накапливаются объекты таблиц) и sessionmaker(он рожает session, грубо говоря это executor у которого есть метод commit)
Модели таблиц создаются через Table, в аргументы ему передаются Column, а ему в аргументы передаются Integer(), Text() или primary_key=True например.
Создать все таблицы физичесуи в бд metadata.create_all()
Можно создать объект запроса например query = table.insert((1, 'dddd')) и передать его в session.execute(), ну а вообще там одно и то же разными способами можно делать
Вот вообщем-то и все
А если есть еще и вотсап? Отдельную херь и для него? Просто взаимодействовать с произвольными приложениями-мессенджерами не выйдет?
Селениум*
Сап двач. Я тот анон, что неделю назад начал учить погромирование с нуля.
Услышал что среди тренировок питонистов есть задача на написание симулякра передачи Монти-Холла. Зацените как у меня получилось, норм или нет https://pastebin.com/VUsWEF3r
Теперь надо придумать как автоматизировать основной код и прогнать его пару тысяч раз, если будет 67% значит все верно. А если нет, то зря старался, пять часов его писал. И это моя третья попытка уже.
1. связываешь
2. биндишь
задвай более конкретные вопросы, хуесосина, нихуя непонятно в чем именно у тебя в мозгах затык
бля. не люблю когда негатив мешают с порнухой
Есть результаты тестирования, насколько этот вкат быстрее остальных?
Хуню спизданул
Ести ты про потоки и async/await то похуй, надо смотреть что в данном случае удобнее, они и вместе используется, а в asyncio есть функция которая запускает данную функцию в отдеоьном потоке
Users_schema
Нет, не правильно.
Скорее всего ты вообще плохо понимаешь что такое параллельное и что такое асинхронное.
Параллельное программирование нужно вычислительных задач и высокопроизводительной работы.
Многопоточное и асинхронное программирование нужно для приложений, чтобы было несколько логических потоков исполнения, не было блокировки и т.п.
То есть параллельность это про вычисление, а треды и асинхронность это про приложения и сервера.
circlevis в цикле отрисовывает кружочек и рандомит ему радиус, а (pyttsx3) speck_engine.runAndwait озвучивает текст через встроенного в винду синтезатор речи. Как сделать так, чтобы circlevis работал во время синтеза речи?
первую надо засунуть в отдельный поток
from threading import Thread
Thread(target=func).start()
на пике ты? там минихуй или натуральный питон? чет квадратик маловат
у r есть метод json()
while True:
r = requests.get...
data = r.json()
prefixes = data["data"].get("prefixes")
if prefixes is not None:
break
я его только 2й день учу
Где искать мужа типа пикрил?
Я грудастая спортивная 1С-программистка, вкусно готовлю, хобби - бдсм.
Скинула в личку.
ап вопросу.
Чел, загугли pytest. Твоя стена когда превратится в три строчки с параметрами с пайтестом.
Только одну?
эээ... пайтест это тестирование, а мне обработка ошибки нужна.
Обожаю снг за бесконечный форс антинаучной лабуды.
Просто перечислю вещи о которых ты даже не в курсе:
- понятия интеллекта не имеет под собой биологически объективных обоснований, это что-то уровня души и прочих эфемерных сущностей, в мозги вообще НЕТУ никаких носителей интеллекта
- выводить ум на основе школьных тестов уровня выберите треугольники/линии/кружочки это простейшая манипуляция уровня предсказаний по гороскопам, поэтому я их и сравнил, никакой объективной основы у айкью нету, его результат просто показывает что человек успешно решает тесты на кружочки, а не то как успешно он решает косплексные задачи в жизни
Учитывая что важность айкью я постоянно слышу от каких-то токсичных лузерков с комплексами до неба, не надо быть гением чтобы понять почему им так отчаянно хочется хоть в чём-то чувствовать свою значимость. Хоть в какой-то сферической циферке изи набиваемой практикой тестов.
И да, на досуге подумай почему люди со средним айкью имеют миллиарды, а ты работаешь обычной макакой у бизнес кабанчика.
>- выводить ум на основе школьных тестов уровня выберите треугольники/линии/кружочки это простейшая манипуляция уровня предсказаний по гороскопам, поэтому я их и сравнил, никакой объективной основы у айкью нету, его результат просто показывает что человек успешно решает тесты на кружочки, а не то как успешно он решает косплексные задачи в жизни
Корреляция очень большая. Есть правда проблема, общая со всеми тестами - тесты работают хорошо, пока к ним целенаправленно не готовятся. Если же ты целенаправленно начинаешь задрачиваться на задачки по выборке треугольников по признакам, выучиванию сложных слов и т.п., ты себе добавишь в 10-20 баллов IQ легко, но сильно умнее от этого не станешь. Да, немного прокачаешь свои возможности, но не на 10-20 баллов.
Смысл в том, что если у тебя мозги заточены на абстрактное мышление, ты способен решать сложные задачи, ты много читаешь и думаешь, то решать простые задачки тебе будет легко, у тебя будет большой словарный запас, ты будешь легко строить ассоциации, выделять общие признаки т.п. А если ты скуп на мышление, то с этим будет всё хуже.
Это действительно так. Но, проблема в том, что как только появляется мотив, так сразу можно задрачиваться на тестирование и оно перестаёт адекватно показывать результат.
Сейчас, когда говорят про IQ, всё-таки больше говорят в отрыве от теста. Просто о мыслительных способностях.
>И да, на досуге подумай почему люди со средним айкью имеют миллиарды, а ты работаешь обычной макакой у бизнес кабанчика.
Если в Раше, то потому, что тут миллиарды у тех, кто в юности вместе с Пыней пиздил по подворотням ботанов всяких. Понятно, что это с интеллектом скорее обратную корреляцию имеет.
Но если ты просто пиздил чмошников, но с Пыней знаком не был, ты миллиардером не стал бы.
Кстати, если посмотришь на миллиардеров первой формации, то вылез сам наверх в бурные времена, а не по дружке с П, то там в основном все хорошо образованные. Березовский был вообще дфмн и профессором-математиком, даже членкорром РАН, но это вероятно уже прикупил, как деньги появились, Ходорковский, Дмитрий Зимин. Павел Дуров вот олимпиадником был.
В США тоже коррелят сильный. Интеллект выше среднего, но и происхождение и умение строить связи важны, конечно. То есть супер интеллектом в плане решения задач ты другие способности за заменишь. Хотя умение выстраивать отношения это тоже интеллект, просто он тестом не изменяется.
Например, есть переменная:
>word = 'hello'
С ней можно сделать, например, подсчет символов:
>len(word)
Или заставить писаться с большой буквы:
>word.upper()
Уже три недели вникаю в ООП, понимаю, что в Питоне word автоматически становится объектом, который усваивает методы класса Str, но все же - кто скажет, кому пришла в голову идея делать так запутанно вместо единого формата, например:
>len(word)
>upper(word)
или
>word.len()
word.upper()
Это какая-то знаменитая пайтоновская логика, упрощающая кодинг? Насколько знаю, в других языках такой путаницы нет (могу ошибаться).
>Месяц на Питоне
Скорее всего и месяц в программировании вообще.
Рано тебе ещё лезть в ООП и архитектуру, ты просто не готов пока. Нарабатывай кодерские скиллы. Не лезь пока в ООП, это тебе пока не нужно и ты не готов.
Через год приходи с такими вопросами, если останутся.
>Это какая-то знаменитая пайтоновская логика, упрощающая кодинг? Насколько знаю, в других языках такой путаницы нет (могу ошибаться).
Везде есть та или иная путаница.
Вообще, так сложилось.
len() это базовый оператор языка. upper() это специфичный метод. upper(word) однозначно не вариант по понятным причинам, чтобы глобальное пространство имён не портить.
len() так метод вполне себе вариант и даже если копнуть глубже, именно так и есть, для этого есть метод __len__(self), который и возвращает длину объекта, для своего объекта ты можешь его определять.
Но, есть семантическая разница, как и зачем len() используется, есть разные подводные камни с наследованием и т.п.
Я правильно понимаю (если упрощенно), что функции (типа len(x), round(x), print(x)) - это как-бы методы некого класса классов, этакий GLOBAL_PYTHON.len(word), написание которого отбрасывается, ибо он автоматически имеет власть над всеми типами данным (которые для него - объекты, его наследующие)?
if
Не очень понял.
Скорее это просто встроенные функции, которые под капотом для нестандартных объектов реализованы так, что они дёргают специальный метод, который должен быть определён. При этом для встроенных типов интерпретатор может работать более оптимально, не дёргая реально эти методы.
Отчасти тут историческое наследие. Плюс это в плане семантики выделение некоторых особых функций в особый статус.
Например ты можешь делать так:
len("world" + "hello")
round(1.1 + 10.6)
- вычислить что-то без получения промежуточного результата. Если бы у тебя было всё через методы сделано, пришлось бы писать
("world" + "hello").len()
(1.1 + 10.6).len()
что как-то не очень стройно.
Суть вопроса анона была в том, почему сделано
len(obj)
а не
obj.len()
Второй вариант тоже вполне допустим был бы. Но так сложилось и так просто в целом удобнее и нагляднее.
умник а upper от листа или от инта что будет делать?
len это общий метод для последовательностей
Да вопрос был в целом о закулисном различии между функциями и методом, бросающимся в глаза новичку разницей в синтаксисе:
do(somethig) и something.do()
Энивей, последний актуальный вопрос: если методы - это функции классов, то глобальные фукнции к чему привязаны? Вот как анон говорит >>16611, something.upper() возможен только для объектов класса Str, тогда как len(something) для объектов разных классов. Что позволяет глобальным функциям вытворять такое? Что они вообще такое, по отношению ко внутренним классам (Str, Int, Dict и т.д.?
>если методы - это функции классов, то глобальные фукнции к чему привязаны?
Условно, метод - это просто функция, определённая в области видимости класса и принимающая первым параметром указатель на класс
Ты можешь сделать так
def func(self):
____print('func', self)
class Aaa:
____pass
a = Aaa()
Aaa.func = func
a.func()
и это будет работать так, как если бы ты корректно определил метод для класса
Смысл методов в ООП в том, чтобы очистить пространсво имён в первую очередь.
У классов Aaa и Bbb могут быть методы func, но принципиально разные
поэтому ты не можешь делать
func(a) и func(b), так как функция разная.
а вот a.func() и b.func() очень естественно и понятно.
Впрочем ты можешь определить func как
def func(self):
____self.func()
и потом вызывать func(a) и func(b), и всё будет работать. Можешь аргументы поддержать без проблем, в питоне это просто.
Но, нехорошо, ты портишь глобальное пространство имён.
Глобальные функции не привязаны ни к чему.
>если методы - это функции классов, то глобальные фукнции к чему привязаны?
Условно, метод - это просто функция, определённая в области видимости класса и принимающая первым параметром указатель на класс
Ты можешь сделать так
def func(self):
____print('func', self)
class Aaa:
____pass
a = Aaa()
Aaa.func = func
a.func()
и это будет работать так, как если бы ты корректно определил метод для класса
Смысл методов в ООП в том, чтобы очистить пространсво имён в первую очередь.
У классов Aaa и Bbb могут быть методы func, но принципиально разные
поэтому ты не можешь делать
func(a) и func(b), так как функция разная.
а вот a.func() и b.func() очень естественно и понятно.
Впрочем ты можешь определить func как
def func(self):
____self.func()
и потом вызывать func(a) и func(b), и всё будет работать. Можешь аргументы поддержать без проблем, в питоне это просто.
Но, нехорошо, ты портишь глобальное пространство имён.
Глобальные функции не привязаны ни к чему.
>умник а upper от листа или от инта что будет делать?
len(5)
тоже выбросит исключение. Не говоря уже о таких специфичных штуках, как round()
Просто len() довольно общая вещь, поэтому определили как стандартную функцию. Чистая условность.
а в твоей логике длина от целого числа что должна вернуть?
глобальные методы лежат в builtins
import builtins
Глобальные функции просто обращаются ко внутренним методам класса, например len() от целого числа возвращает ошибку object of type 'int' has no len() , то бишь он просто не находит определенный внутри класса int метод __len__(self)
Эти функции подаются как преимущество языка, потому что если у тебя есть пользовательский класс, имеющий природу последовательности, тебе не надо думать как программист выдумал определить длину obj.length() или obj.size(), есть просто общий метод len
В пятницу перед тем как бросить код в ревью назвал там переменные small_dic и big_dic. Как думаете, ревьюверы оценят или назовут меня пидором? Компа под рукой нет, вплоть до вторника менять что-то не выйдет
Пруф или не было.
ну не dick же.
Очевидное сокращение от dictionary - dict. А у него залупа петросянская.
Код - это самое последнее место для твоего петросянства, не говоря уж про то, что сама идея назвать две переменные по непонятному "размеру", а не по функциональному назначению, уже и так почти наверняка является хуевой практикой именования с твоей стороны.
Ну вон есть условные коннект к бд, не клиртекстом же.
В первом приближении просто в конфиге открытым текстом. Как и некоторые другие параметры подключения.
Дальше вопрос всей твоей инфраструктуры, где и каким образом конфиг хранить.
пароль к бд? в коде пароль нужно получать из переменных окружения
os.environ()
а хранить у себя в keepass
В БД имеется таблица, в которой нет ключевого поля, но есть поле, которое задано внешним ключом по ключевому полю другой таблицы.
По итогу при попытке в models.py прописать что-то вроде
field = models.ForeignKey(Table, to_field="fieldid", db_column="fieldId", default=None, on_delete=models.CASCADE)
при попытке сделать миграции django выдает предупреждение о том, что пытаюсь добавить non-nullable id без дефолтного значения, хотя оно прописано. Где я накосячил?
Пробовал взять em с классом "translation" но оно суп не парсит. Может можно просто этот текст спарсить?
Обосрался с кодом на leetcode, мне он выдал вот такое
Что там может использоваться что действительно проверяет обозначенные типы и возбуждает соответствующие исключения из-за этого?
разобрался. надо было просто get_text() делать
TypeError же але
они изначально ориентировались везде на Жабу вот такое и пишет, не надо обращать внимание на эту хуйню
Вопрос: как эту команду выполнить? Через os.system что-то не завелось. Причём схема такая: выполняется команда, ожидается завершение, запускается команда для следующего видео.
Причём генерируемый строковый объект состоит из двух строчек: сначала идёт chcp 1251, чтобы кирилица работала, а затем уже строчка для ffmpeg.
Код не кину, ибо не дома.
Хотя все открывается в sql клиенте на том же порте. В чем может быть дело?
Зашёл в контейнер проверить че там в кофеине - все принимается стоит *.
Попробую, спасибо.
Правильно ли я понимаю, что твоё приложение крутится в докер-контейнере?
Проблема в том, что внутри твоего докер-контейнера локалхост это именно сеть внутри контейнера, а не на хост-машине. Ты не можешь так достучаться наружу.
В чем боль? 3 джанга вроде чисто условно получила эту версию, изменений для мажорной версии там нет
У меня есть словарь вида:
{some_group1: [{a: 1, b:4, c: 5}, {a:9, b:0, c:4}, ...], ..., some_groupN : [{a: 3, b:7, c: 0}, {a:8, b:2, c:6}, ...]}
Мне надо получить такой датафрейм как на пикрилейтеде.
Как это сделать? Пробовал через pd.concat({k: pd.DataFrame.from_dict(v) for k, v in df.items()}, axis=0), но выгляит как-то не так. Some_group общей должно быть колонкой, а не индексом.
Есть простая цель: скачать пдф по ссылки, отправить этот пдф в гугл клауд на извлечение текста, повторить это много много раз.
Проблема в том, что гугл клауд не хочет распознавать больше, чем 10 страниц. Ладно бы он сам брал первые 10 страниц, и возвращал хотя бы их, хуй там, возвращает ошибку.
Похуй, стал искать библиотеки, которым можно обрезать количество страниц в ПДФ. И с какого то хуя каждая блядь библиотека ожидает, что я буду передавать ПДФ как путь к файлу, а у меня уже ёбанный ПДФ загружен в память, я его блядь скачал.
Окей, нашёл PyMuPDF, он принимает на вход пдфку из памяти. Но ккогда я удаляю эти лишние страницы, а после этого хочу обратно выгрузить ПДФ в память для некоторых ПДФ я получаю ёбанные ошибки, типо:
RuntimeError: only Gray, RGB, and CMYK colorspaces supported
или
pdf device does not support substitute fonts
Вот хули ему надо бля? Его дело просто убрать лишние страницы и вернуть всё остальное. ХУли он выёбывается то?
Пробовал метод document.scrub(redact_images=2), который должен удалять чувствительные данные, в том числе ебучие изображения, но нихуя. Он как ругался на недопустимое цветовое пространство, так и ругается.
Собственно, вопрос: можно ли как то PyMuPDF жрать все пдфки?
Если нет, есть ли какая то библиотека, которая гарантированно жрёт любое пдф, при чём загружать в неё пдф можно из памяти, а не из диска?
такое разве вообще можно делать в pd?
Создавай отдельную колонку, в которой будет записано значение группы для каждой строки
Просто сгруппировать по значению одной из колонок? Без всякий count(), sum(), mean(), apply() и прочих вещей?
io.BytesIO
Так извлекай текст прямо в PyMuPDF, хуле ты мозга ебешь?
Или тебе надо текст из встроенного в PDF изображения распознавать?
Текст это просто набор ASCII ну или там UTF8 кодов, как его можно извлекать лучше?
Пдф это очень ебливый формат в плане извлечения информации, оно там не чистым текстом и не особо структурировано.
480x384, 0:27
Ну ладно тогда.
Разобрался. ДБ пишет в консоли один порт а на деле докер присватает другой.
Нужно чтобы питон сам подставлял нужные значения и печатал в PDF
Как это можно реализовать?
(Желательно чтобы состыковать с Qt)
Upd: догадался делать в QTextEdit, вроде отчет делается, но как добавить там свой текст?
Либо как править html код из питона?
>Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
Аноны, есть ли это в пдф?
Типо сначала union по первым трём. Потом лефтджоиним по этим трём сначала с df1 -> получаем таблицу из 4-х колонок добавлением color. Лефтджоиним с df2 опять же по первым трём полям-> получаем искомое. правда там Null'ы будут, и хотелось бы без них тоже, но ето не критично
ModuleNotFoundError: No module named 'rss_reader.parser'; 'rss_reader' is not a package
Пробовал импортировать разными способами,но у меня ничего не получилось
Да, всё установленно. Импортировать нужно в rss_reader.py и видимо возникает какой-то конфликт из-за того что имя модуля и имя пакета совпадает
Проблема в том что нельзя переименовывать, иначе не проходит чек в пулл реквесте.
Еще прикол в том что если в setup.py добавить консольный скрипт, то через него еррор на импорт rss_reader. не выскакивает, а при дефолтном вызове да. Тоже самое только наоборот если просто импортировать parser и feed (без rss_reader.)
Вот, скажем, ввожу в командной строке следующее:
python module_name 2^2
Получаю (через вывод parse_args()):
Namespace(argument='22').
Как пофиксить?
Да, есть
Во втором случае там проблема именнно с импортом parser, так как в дефолтной библиотеке есть такой модуль. Можно как-то заставить питона юзать мой parser, а не из дефолтной библы? Или тут проще его как-то по другому назвать и не ебаться?
Зачем вообще придумывать костыли, если есть возможность переименовать?
Собрал докер образ через Дженкинс то есть элементарный пайтон система с пакетами. Собралась спустя 5 минут.
Вопрос. Могу ли я использовать эту Джобу каким-то образом сейчас чтобы запустить на ней Питон скрипт?
Или нужно этот Билд где-то хостить типа докерхаба?
Докерхаб нужен для хранения образов, а не для их запуска.
Собранный контейнер можно запустить локально, если у тебя установлен докер. Впрочем если бы не был установлен, то ты бы не смог собрать контейнер.
через команду вроде
docker run -it my_python_image
Запустить скрипт внутри контейнера сложнее, потому что сначала надо его расшарить внутри контейнера
docker run -it --rm -v $(pwd)/my_app:/app python:3.9 python3 /app/app.py
пример команды, если у тебя приложение лежит в папке my_app, а называется app.py
Это в линуксе, в винде вместо $(pwd)/my_app
надо будет полный путь к папке указать.
На самом деле не понятно, зачем тебе докер для этого, в чём то проще его установить в систему и пользоваться virtualenvs, если тебе надо опыты ставить с разными пакетами. В винде питон работает довольно хорошо.
Потому что иначе сначала надо более-менее нормально с докером разобраться, а на это время надо.
Спасибо.
Мне нужно чтоюы все в команде могли запускать мои тесты. Для этого я собираю Дженкинсон образ/билд через Пайплайн.
Сейчас он показывает что все собралось успешно на дженкинсе.
Вопрос, могу ли я как-то сейчас использовать этот билд для питон скриптов которые тоже находятся в репо уже?
Я понимаю что если бы у меня был докерхаб я бы туда положил собранный образ/Билд и потом тесты бы просто запускал используя агент Докер.
Но можно ли как то это сделать без Хаба а чисто в дженкинсе? Может модно как-то тригирнуть тесты чтобы они бегали по этому образу который уже был собран в дженкинсе?
>>> x = [1,2,3,4,5]
>>> a = [9,8,7,6,5]
>>> a[:] = [x[:2], x[2]]
>>> a
[[1, 2], 3]
как в одну строку сделать так, чтобы выходило [1,2,3]?
ну так и надо, учитывая что я вопрос не совсем верно задал
я вообще со строками работал где это плюсование не делает дел
дошло очевидное, нужно убрать [:] из a[:] = x[:2] + x[2:]
эта [:] штука позволяет не делать новые копии списка в памяти (в питоне переменные отсылают к значениям), потому я ей теперь пользуюсь
a = x[:2] + [x[2]]
[:] позволяет перезаписать объект, а не создавать новый.
Разница принципиальна, когда у тебя несколько ссылок на объект, например у тебя твой список в каком-нибудь классе хранится или в другом объекте. Либо когда ты передаёшь его в качестве аргумента в функцию.
def foo(arr):
____arr = [1,2,3]
и
def foo(arr):
____arr[:] = [1,2,3]
могут работать принципиально по-разному. В общем тут это главное, а что там память выделяется или не выделяется это ерунда полная и не надо об этом думать. Скорее всего у тебя в любом случае какой-то промежуточный список создаётся и под него выделяется память.
Переименовать свой пакет
Переименовать скачанный пакет в site-packages
Перетащить нужный код к себе проект в пакет с другим именем
Поменять приоритет путей в sys.path чтоб сначала искал в сторонних либах
Так же можешь попробовать покопаться в родной либе importlib, наверняка там можно соорудить импорт из конкретной папки
https://onlinegdb.com/HkHPrZlud
На этапе когда парсил одну страницу было некоторое понимание что делаю, но в какой-то момент мозг просто остановился.
А зачем ты нахуевертил это ооп и логи? Там в десяток строчек всё делается. Начни с простого, потом наращивай мяско.
Стандартный подход примерно такой
next = url
while True:
page = get(next)
#парсим
next = ищем ссылку на следующую страницу. Если её нет, то само останавливается.
Спасибо, сейчас буду так делать.
Рано я праздновал победу, почему-то парсит только две первые страницы.
https://www.onlinegdb.com/S12TamlOu
С двойными работает, а с одинарными нет.
Спасибо большое.
Есть предложения, в чем причина в двух словах?
Нет, все нормально работает, я просто сверхразум.
^ это один специальных символов регулярочек, нужно либо экранировать \^ либо явно указывать что это текст с помощью кавычек
короче насмастырил костыли, но в итоге шаблон заполняется
осталось только сделать вывод на печать....
Во-первых можно прям напрямую sys.argv менять, а еще в arg_parse можно тупо list передать заместо sys.argv
Уже пытался передавать список, но ничего не получалось. Только сейчас понял что забыл удалить пакет.
Ну у меня модуль парсера в пакете, который установлен. Я менял код в функции main и в в модуле парсера и получал ошибку parse_args() takes 1 positional argument but 2 were given потому что в версии пакета которая установленна parse_args() принимает один аргумент.
Bump
Ответ с того света
Как отсортировать список по координате Y? И чтобы не в кашу
Чуть больше месяца учу питон. Дошел до главы про API. Думал смогу написать скрипт для выкачивания музыки со страницы ВК. Загуглил скрипты, оказалось нет, для меня слишком рано. Но из за любопытства скачал один скрипт с гитхаба. Так вот очевидно скрипт просит авторизацию на страничку (без авторизации пользователя ведь нельзя обращаться к данным в ВК, верно?)
Вообщем авторизировался, скачал музло скриптом. Через несколько минут пришло письмо, что кто то авторизировался на страницу через Firefox, хотя у меня Chrome.
Я еще нуб в этом деле и не догоняю до конца, может быть это просто ВК распознал мою авторизацию через скрипт как авторизацию через Firefox, или скрипт все таки отправил мой логин и пароль тому автору?
Может кто шарит зачекать данный код и сказать есть ли там подстава? https://github.com/dvjdjvu/vkMusicDownloader/blob/master/src/main.py
Вы видите копию треда, сохраненную 6 июня 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.