Это копия, сохраненная 1 октября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ЧАВО: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat актуальность примерно 2015 года
Книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Очень много книжек: https://drive.google.com/drive/folders/13YaFijvuH4dtv-PjUKVWLQ7ZIqXIfCLK
Анон, вместо того, чтобы без разметки постить код, лучше шарь код через специальные ресурсы:
https://ideone.com/
https://pastebin.com/
https://pyfiddle.io/
https://www.codepile.net/
#######################################
Вопросы-ответы:
А стоит ли читать Лутца, том номер N? - Мнения в треде разделены. Кто-то за(очень неплохая база даётся), кто-то против(слишком много воды и объём книг убивает всё рвение). В общем - решать тебе, книга вредна не будет, то ты можешь её просто не дочитать и забросить.
А стоит ли читать %книга_нейм%, если там питон версии 2.х? - Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
А что ещё можно читать? - Питон сам по себе очень хорошо задокументирован, и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
А как учить джангу? Нахожу только книги по джанге 1.х - У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой, из официальной документации.
В следующий раз сними штаны перед тем, как посрать.
как мне regex вырезать всё что между + и @ и сам плюс тоже вырезать, чтобы оставались адреса
(?<=\+)(.*)(?=@)
re.sub(r'\+', '', s2)
Это полный пиздец, я конечно понимаю что питон это динамический язык и перегрузку функций в питоне сделать нельзя, но дрочево с __init__ и __new__ это пиздец.
В чем дрочево? Дай пример, где сделано хорошо?
https://github.com/criminalscum/psimplepathfind
А что не так с __init__ и __new__?
В большинстве случаев тебе достаточно __init__, чем он отличается от конструкторов в других языках?
С помощью __new__ ты можешь какие-то дополнительные возможности реализовать, обычно не нужные.
С сайта ты скачиваешь просто питон. Анаконда это целая платформа, которая содержит в себе питон, то есть, устанавливая анаконду, ты получаешь не просто интерпретатор питона и стандартную библиотеку питона, но и еще 100500 пакетов, плюс свой пакетный менеджер conda, а не только стандартный питонвский pip, плюс gui для управления всем этим anaconda-navigator, хотя, конечно все можно делать только с помощью conda через консоль, даже виртуальные окружения создавать, да conda еще и виртуальные окружения создает, да и вообще широкого профиля штука, работает не только с питоновским кодом, для любой программы можно создать conda пакет. А сам пайтон он и есть пайтон, ничем не отличается
> Винда или линуха - вопрос века
Абсолютно похуй, используй то, что тебе удобно, хоть макось. Весь софт, которым ты будешь пользоваться - более-менее кроссплатформенный. Всю жизнь кодил на винде, брат жив, зависимость есть, но в линуксы/под линуксы тоже могу.
Я, к примеру, бэкэндер, мне винда не всралась.
Хотя недавно звали на проект, которому лет так 20, там всё на винде и пистоне 2.
Если я правильно понял, то это пиратская мак ось (поправь если не прав). Вопрос остаётся тот же: зачем менять привычную среду, + на хакинтоше могут появиться проблемы с драйверами, а конкретно - с их отсутствием
Понятно, что всё в основном зависит от проекта, но по сути питон и там и там одинаковый. В плане процесса разработки какие ты видешь плюсы относительно винды, или ты сразу с линухи начинал?
Так и делаю, но ведь если многие топят за линуху может там действительно есть что-то, тем более спрашивал не отбитых кодерков
Начинал с винды, но затем пересел на линупс. Т.к. не всегда и есть нужные программы под винду, а если есть, то не всегда корректно и без пердолинга работают.
Так же, когда пишешь ПО которое затем будет запускаться на линупсах, то тут как бы логично писать сразу на них.
В 2019 хакинтош делается легко и просто.
Будет несколько дороже, чем рандомный пк.
Читай http://www.osx86project.org/
Если возьмёшь правильное железо - проблем с драйверами не будет.
>Винда или линуха - вопрос века
>зачем менять привычную среду
А зачем ты тогда задаёшь тут такие вопросы?
Работай в привычной среде, не еби мозг ни себе, ни людям.
> не всегда и есть нужные программы под винду
Тут можешь поподробней?
> когда пишешь ПО которое затем будет запускаться на линупсах
Я на вэб дэве, сервера крутятся на различных осях.
> Тут можешь поподробней?
> Я на вэб дэве
Очень скоро столкнёшься, значит.
Просто иногда читаешь доки и обращаешь внимание на сноски уровня "протестировано на линупсе/не совместимо с виндой/под винду билдите сами" и т.п.
> сервера крутятся на различных осях.
Большинство на линупсе. На винде довольно специфические области сидят.
> Очень скоро столкнёшься, значит.
Опять пошли абстрактные ответы
> Просто иногда читаешь доки и обращаешь внимание на сноски уровня "протестировано на линупсе/не совместимо с виндой/под винду билдите сами" и т.п.
Никто не отменяет тесты на других системах, тут я опять же вижу плюс использования мной винды, т.к. в тиме всегда есть чувак, а то и несколько, с линуксом.
> Опять пошли абстрактные ответы
Ок. Я тебе приведу в качестве примера gunicorn, дальше что?
> Никто не отменяет тесты на других системах
Что? Ты понимаешь, что ты несёшь?
1. Если в ТЗ есть пункт про кросс-платформенность то на твоей винде никто ничего тестить не будет, для этого есть тестовые стенды.
2. Я ни разу не видел что бы при написании серверного ПО был пункт про совместимость сразу с виндой и линупсом.
Ты можешь видеть и фантазировать себе всё что угодно, реальная практика и задачи всё расставят по местам.
>>59693
> Это не аргументы.
Что именно?
> Для серверов есть виртуальные машины.
Причём тут это?
> Разработка - это инструментарий - иде и прочее.
Кроме IDE есть ещё ОС, от которой так же много зависит.
Мне похуй на чём автор поста будет сидеть/писать, и лишь говорю очевидные вещи, что под винду пишут на винде, под линуксы на линуксе, и такая формула работает в 90% случаев, остальные 10 это исключения и узконаправленная специфика.
Ля, сделайте вы уже номер треду чего выебываетесь . Хоть с 1 считать начните, уже что-то
А почему же тогда все, кто может себе позволить, сидят на маках?
И крутят линуксы в докере или на вм, когдаа нужно?
Не задумывался над этим?
Да, для системного программирования - такой подход вполне оправдан.
Но, опять же - есть виртуализация и докер.
И опять приходим к тому же - делай, как удобно.
> gunicorn
Ты еще скажи, что wsgi для винды не существует.
> очевидные вещи, что под винду пишут на винде
А под андроид на андроиде, да. На самом деле абсолютно похуй, под какой ОС запущен текстовый редактор, где ты нажимаешь кнопочки. Похуй, на какой ОС ты запустишь HTTP/wsgi. До тех пор, пока ты не начнешь парсить какой-нибудь procfs, скрипту будет абсолютно похуй, откуда ты его запустил.
>А почему же тогда все, кто может себе позволить, сидят на маках?
>И крутят линуксы в докере или на вм, когдаа нужно?
>Не задумывался над этим?
Статистику сюда
> Я ни разу не видел что бы при написании серверного ПО был пункт про совместимость сразу с виндой и линупсом.
Про джаву слышал когда-нибудь?
Да и питон тоже вполне себе кроссплатформенный, хотя и не в такой степени, конечно.
Джанга и прочее - работает на всех трёх платформах.
>Иномарки популярнее жигулей, хотя и дороже.
>Статистику сюда.
>Выгляни в окно, лол.
>Значит, статистики нет. Ясно.
На линуксе питон и куча полезных штук стоят из коробки. На линуксе есть культура использования пакетных менеджеров, что радует.
Докер как следует только под линуксами и работает, потому что основан на фичах ядра линукс
Это касается только быстродействия.
Т.к. на винде и на маке добавляется (тонкий) слой виртуализации.
>>59709
Тут надо понимать ещё одну вещь.
Когда человек в состоянии воспользоваться преимуществами линукса (или юникса - мака) в качестве девелоперской машины, он обычно не задаёт таких вопросов, как >>59662
> Ты еще скажи, что wsgi для винды не существует.
Сравни процесс пердолинга по установке wsgi на винде и установку его на линупсе.
> А почему же тогда все, кто может себе позволить, сидят на маках?
Тот же линупс. Да и кто все то? Я видел очень мало бэкэндеров на маках, зато куча их на линупсах.
> А под андроид на андроиде
Маняврировать не надо.
>>59701
> Про джаву слышал когда-нибудь?
> питонотред
Уёбывай.
Понтуются
Типа яблоко надо в кавычки взять, он его как команду воспринимает?
Удачи с докером на винде, кста. Помимо оверхеда, нужно будет ещё прилично поебаться с его установкой и настройкой.
Кроме того, одно из основных преимуществ линукса - это его терминал и bash-lang.
Да и вообще 99% серваков, на которые ты будешь деплоить свой сайт будут работать именно из под линукса, поэтому нужно уметь с ним работать
Удобно тебе говорят
А зачем инпут приводить к строке явно, там же по дефолту строка получается.
Только в твоих манямечтах.
О бля, всё нахоой, убрал галку 'execute via sudo' и всё заработало. Чёто суда мешала как то
В сраном вузике сраный питон будет.
А я писал только немного на Scheme в школе.
Подскажите книжки по функциональному программированию на питоне, я знаю, что там есть лямбды и замыкания, не хочу задравчиать ООП по методичке.
Сижу на шинде, в консоли wsl, полет нормальный
С линуксом вечный пердолинг, просто извечный пердолинг, потому если хочешь просто прогать - винда. На ней всё работает почти сразу, а если что-то и требует допилов - всё просто и понятно.
А с линуксом - вот я с малинкой ебусь последнюю неделю - мне всего-то надо было говорилку запилить. Виндовых tts там естественно нет, есть свои - еспик например, который в распбиане отвалился после обновления ядра - в итоге я день ебался чтобы частично поднять его функционал, и он оказался говном. RHVoice - готовых дистрибутивов нет - надо собирать из исходников - ещё пол дня с этим ебался, получил половину функционала, потмоу что для полного функционирования под расбиан не хватает готовых дистрибутивов, которые тоже надо бы собрать из исходников. Линукс - это всегда ебля через ебля, и если нет конкретной задачи запустить что-то на линуксе - нахуй, не связывайся, базарю
>>59665
С этим говном тоже не связывайся нахуй. Я конечно макось полноценную непользовал, но пообщался с мобильной на айпхоне - так там костыль через костыль костылём погоняет, я того маму рот ебал. Спасибо бил гейтс за твой мастдай, очень рад что приходится с опенсорс и прочей проприетарной парашей связываться крайне редко.
Если ты разрабатываешь какие-то сервисы, сетевой софт и т.п., то тут линукс без вариантов лучше. Он лучше как ОС, там на больше инструментов, возможностей по настройке, мониторингу и т.п. Весь такой софт делается под никсы, что-то криво переносится под винду. Под виндой всегда будет ограничено и через жопу.
Если делать медийку, что-то, что работает с видео, звуком и т.п., то тут уже винда впереди, под линукс всё ограничено и через жопу.
Маки вроде как совмещают плюсы никсов и винды. Внутри это кодновые никсы, вроде БСД, но графику делали люди, которые в этом что-то понимают и это любят, много софта. Хотя я сам на маках не работал, но их любят.
Я работаю на линуксах, но постоянно плююсь от убогости интерфейсов линуксового софта, работающего с графикой и видео. Нихрена не потрировано, портируют на винду и мак, даже то, что бесплатное. Линуксовое обычно всё вырви глаз. С библиотеками тоже засада.
Годный план или я где-то проебался при его составлении?
>Если ты разрабатываешь какие-то сервисы, сетевой софт и т.п., то тут линукс без вариантов лучше. Он лучше как ОС, там на больше инструментов, возможностей по настройке, мониторингу и т.п. Весь такой софт делается под никсы, что-то криво переносится под винду. Под виндой всегда будет ограничено и через жопу.
WSL
Не, серьезно сам придумал. Подумал, что так лучше всего закреплю теорию программирования в вакууме, а дальше уже на продакшен усы точить буду.
c = []
for i in {'a', 'b'}:
____for j in {'1', '2'}:
________c.extend([[i,j],[j,i]])
Но более изящно
Врёшь, жопой чую. Ну пройдись по пайтону, порешай задачки, а потом лучше сразу в хтмл/css и жангу. А потом уже и алгоритмами можно шлейфануть, т.к. после пайтона алгоритмы ничего толком не дают - непонятно как и где применять, а без применения всё забывается. Ну моё ИМХО такое
Какое тут враньё, лол? Подобная последовательность каждому второму начинающему питонисту наверняка в голову приходит.
мимо
import itertools
itertools.product({'a', 'b'}, {'1', '2'})
или в этом случае тоже самое
itertools.product('ab', '12')
это чтобы получить комбинации вида a1, a2, b1, b2
чтобы ещё и 1a, 2a и т.п.
вот совсем красиво слёту не предложу, надо думать. Как вариант, две такие строчки, но вторая product('12', 'ab')
Надо подумать, можно можно в одну записать.
Я никогда не писал на яваскрипте. Максимум в универе на плюсах, и то лабы. Просто показалось необычным и стильным, поэтому решил таким образом задавать имена.
>>60464
Спасибо, но можно конкретней. В моей пикче говорят про обязательный общепринятый стандарт определения функций, или просто рекомендация.
>>60497
А как не убивают?
Спасибо за ответы, друзья, но пока не разобрался.
Может быть мне не суждено?
Ага, это на бумаге все красиво, а потом мы идем смотреть на либы вроде BeautifulSoup, и оказывается, что на практике всем похуй, какие у тебя там буковки. У некоторых вон даже оба стиля сразу.
Это просто стандарт оформления для питона, но ты не обязан ему следовать и не все следуют.
В PEP8 много анахронизма, этому стантарту 20 лет.
Переучиться с одного на другой не проблема, к этому быстро привыкаешь. В целом вариант с подчёркиваниями более читаем, может быть он разумнее, чем альтернативные варианты.
Эх, печально, конечно. Имхо, питон более зрелый, чем другие интерпретируемые языки
Ок я вроде корутины и ассинхронщину понял.
Или - нет. Но как их приделать к джанге в контексте нескольких пользователей я все еще не представляю.
Вот у меня логика для одного пользователя дохуя затратная по времени. Я сэкономлю время для одного пользователя, того которым сейчас занят веб-сервер, допустим с помощью ассинхронщины или даже потоков, но он же все-равно блочит сервер? Это моя изначальная проблема и криво поставленный вопрос.
Мне маня-сервер с уберхайлоадом представляется в следующем виде: на каждого клиента свой поток/ассинхронное выполнение. Тут да, тонкости: потоки ОСь выпилить может, их нужно разумное количество и т.д.
Попробую сформулировать новый вопрос. Правильно ли я понял, что мне в качестве профессиональной бекэнд-макаки нужно оптимизировать код на параллельное выполнение для одного пользователя (типа тут await для бд, тут для другого сервера и т.д.), а число коннектов это - к Apache или на чем там сервер?
Держи
http://onreader.mdl.ru/UsingAsyncioPython3/content/index.html#ToC
После прочтения можешь глянуть доку aiohttp и заставить лида яндекса сосать твой болт как писатель Лимонов
>>59370 (OP)
В ПРОШЛОМ ТРЕДЕ ВСЕ РАСПИСАЛ, ЕБАНЫЕ ПЕРЕКАТЕРЫ, ДОБАВЛЯЙТЕ FAQ ИЗ ПРОШЛЫХ ТРЕДОВ В ШАПКУ, МЫ ДЛЯ КОГО СУКА ПИШЕМ?
Тут адаптация SICP под Python на ангельском, если чуть-чуть запаришься, то найдешь все, что тебе нужно http://composingprograms.com/
ОП-пидарас
Английским владею.
это понимание приходит с практикой. листы - универсальный инструмент, в них что-то накапливать, изменяя количество. тупли - легковесный контейнер с данными, этакий мини-дата-класс, сеты содержат только уникальные элменты, легко узнавать содержится ли всё что есть в сете А в сете Б и наоборот, убирать дубликаты (или автоматически их обрабатывать), находить пересечения. есть ещё дикты. дикты в сочетании с листами это мощный инструмент организации и хранения данных, см json
читать можно тупо доки, причем читать их ты будешь тысячи раз
https://docs.python.org/3/tutorial/datastructures.html
https://docs.python.org/3/library/stdtypes.html#typesseq
мимо говнокодер
Списки, по смыслу, это массивы в других языках. Задача в том, чтобы хранить данные, иметь возможность адресации по индексу, плюс куча операций по обработке таких массивов. Сам термин "список"/list немного вводит в заблуждение, а теории алгоритмов за другими структурами это понятие обычно используется.
Кортежи (tuple) фактически те же списки, то только immutable. Ты один раз его создаёшь и уже потом не можешь изменить значения элементов. В целом больше сахар, чем что-то, что реально необходимо и полезно, наверное везде при желании можно списки использовать вместо кортежей. Но кортежи при этом очень активно используются.
множества, set. Принципиально другая структура, смысл которой в том, чтобы хранить уникальные значения. Нужны, например, тогда, когда тебе нужно хранить список элементов где-то встречающихся и быстро делать проверки. Плюс возможность строить пересечение, сумму, разницу, что реально может быть полезным.
Советую в первую очередь разобраться со списками, слайсами (срезами) списков
m2 = m1[2:5]
m2 = m1[::-1]
вот с такими вот штуками
Потом со словарями. Это самые базовые структуры, всегда нужные.
Потом уже с кортеражами и словарями.
Литературу не подскажу, на самом деле в доках всё расписано прилично.
>>60887
Спасибо за пояснения, анончики. Я, видимо, какой-то специальный в том плане, что теорию я понимаю, а вот с тем, как применить ее на практике - беда, еще с универа так. Учусь по лекциям Хосе Портилла на юдеми (до этого закончил Automate the boring stuff там же). После лекций у него обычно бывают контроши. Не знаю, рассчитывает ли он, что я должен решить все сам, или можно погуглить, но некоторые решения я нахожу только с гуглом, некоторые - вообще приходится смотреть ответы. Аналогично с задачками на codingbat.com - warm-up 1 и все первые части я более-менее делаю при помощи гугла, а вот со вторыми частями каждого топика - просто караул.
Я понимаю, как работает срез в стрингах или списках, для чего нужна len(), но руки моментально заворачиваются в жопу, как только я пытаюсь применить это знание на практике.
Итерации над списками - совсем пиздец. Порой не понимаю, как подступиться к заданию. Когда надо использовать for i in list, for i in range, for i in range(0,pen(list)-1) - я не понимаю различия этих действий. Вот что мне с этим делать?
При этом дальше там в курсе пошло ООП. Я понимаю, что там самые азы, но зашло оно гораздо проще, чем вся вот эта функциональщина.
Я тупой, или просто нужно больше практики?
Если можно, порекомендуйте какие-нибудь ресурсы, где как в школе - прошёл урок с подробным изучением топика, потом делаешь домашку.
> Но кортежи при этом очень активно используются.
Тоже использовал, пока не посмотрел байткод. Накладные расходы на namedtuple съедают все преимущества tuple, без namedtuple пердолиться в индексы неудобно, а во всяких там for i in [3, 15, 10] вообще разницы нет. Фактически там, где tuple по-настоящему нужны, они и так используются всегда и неявно.
Когда надо использовать for i in list, for i in range, for i in range(0,pen(list)-1) - я не понимаю различия этих действий.
Посмотри видио на ютубе по генераторам списков. Или просто по циклам и как они работают.
Я вообще хуй знает нахуя идти учить питон, если до него ты не имел дело с более низкоуровневыми языками
Краем уха слышал про генераторы в питоне - это они и есть?
Насчет спойлера - ну хз, я общался с разработчиками на работе, в принципе они говорят, что идти сверху вниз проще, чем снизу вверх. Чем выше уровень абстракции, тем проще.
В общем это просто циклы, и использовать их можно как угодно, например как генераторы последовательностей.
[x for x in range(10)] - вот тебе и сгенерированный список
>Чем выше уровень абстракции, тем проще.
Согласен. Но имел ввиду не сложность, а про само понимание процессов. Например Си и плюсы дали мне большой буст в начале.
>[x for x]
Хм, в моем курсе это было, называлось list comprehensions.
А насчет буста - какая, по большому счету, разница, где я изучаю логику и алгоритмизацию действий? На этом уровне, по сути, различается только синтаксис ведь?
Так то для изучения логики и алгоритмизации можно вообще не использовать ЯП. Я говорил про то, что например Си, научит пониманию и управлению памятью, указателей и тд. Тем более ты должен понимать разницу между низким уровнем и высоким, понимать как работает питон и чем он отличается от компилируемых языков.
Кортеж это обычный tuple, так переводят.
tuple несколько быстрее, чем списки, и чуть меньше ресурсов жрут.
Основная область применения для упаковки небольших данных, когда две-три-пять переменных надо в одно передаваемое или возвращаемое значение упаковать. С этим начинающему надо сразу разобраться, используется постоянно.
(x, y) = get_position()
print(x)
print(y)
Для больших данных смысла, наверное, не имеют, разве что если использовать их как константный список, то есть когда надо гарантировать, что список не будет испорчен. Но как-то я не очень видел, чтобы ими так пользовались.
У питона сильно выше уровень и ты как раз можешь думать о логике и алгоритмах, не отвлекаясь на технические детали.
Я сам начинал с C и это было очень-очень давно. Слишком много магии, совершенно непонятной, пока ты толком не умеешь программировать. Мне кажется, и без C можно понимания достичь, как всё работает на низком уровне, скорее надо читать что-то про устройство компьютеров, операционных систем, ассемблер и т.п.
https://www.codepile.net/pile/j0K9Xa6L
и до этого со временем дойдет, не переживай, анон. на одних тестиках я дальше таких простецких программ не уеду
>>1461003
Пришел к вам из бэ, надеюсь на вашу помощь, 300кк/нсек боги
Я пытаюсь создать уведомление в Windows, используя библиотеку Plyer. Все отлично работает, когда запущен скрипт Python (.py). Но когда я пытаюсь создать исполняемый файл с помощью pyinstallerpyinstaller -F -i C:\<путь>\ico.ico C:\<путь>\name.py и запускаю исполняемый файл, я получаю эту ошибку: https://pastebin.com/taJaZVey
фрагмент кода: https://pastebin.com/zvMGughh
Буду рад любой помощи, в том числе как решение этого можно нагуглить, сам искал, нашел пару схожих вопросов, но без решения
>>1461003
>Модуль не найден, спрашивай в Питухонском треде где должны раз ещаться
Спрашиваю
вопрос вообще не о том, я еблан
настоятельно рекомендуется, но на него многие забивают
sublime хороший, в универе скорее всего будет пучарм, никаких технических проблем в теории[/быть не должно, единственное, мне например, было бы сложно днем работать в одной иде, вечером в другой
Сублиме текст заебись, но с ним попердолиться надо - ставь пучарм или IDLE в у нивере будет IDLE, скринь
Он просил легкую ИДЕ, сублиме можно напердолить так, чтоб он стал ИДЕ
Здесь в основном вкатывальщики разного уровня уёбищности сидят.
Попробуй переустановить винамп использовать гугл.
прикол с винапмом понял, спасибо
>pyinstallerpyinstaller
https://stackoverflow.com/questions/48875894/pipenv-and-pyinstaller-not-packaging-dependencies
Конечно немного не то, но что-то мне кажется что зависимости не видит при упаковке, возможно ты юзаешь virtualenv?
https://stackoverflow.com/questions/48757977/how-to-include-dependencies-from-venv-directory-when-running-pyinstaller-for-pro
Собсно последний ответ должен помочь
Хорошая ИДЕ, но для тебя ее функционал будет излишним. (скорее всего)
А нет, могу
Ну обычно хорошая практика в пайтоне для каждого "проекта" создать своё виртуальное окружение и все зависимости ставить в него
не делал так, почитаю позже
File "site-packages\plyer\utils.py", line 96, in _ensure_obj
ModuleNotFoundError: No module named 'plyer.platforms.win'
No usable implementation found! =)
Кинь кусок с plyer.platforms
недавно в питоне
по моей логике import plyer должен импортить всю библитеку, со всеми вложенными, в том числе platforms>win>.., разве нет?
Всегда импортируй только тот модуль, который тебе нужен. Меньше ошибок + легче читать код.
Да, уже сам для себя подметил это, спасибо
Юзай любой из вариантов, это не принципиально. Если в строке есть ' юзаешь " " (" ' "), если " соответственно юзаешь ' ' (' " '). В остальных случаях юзай что хочешь.
Спасибо большое!
Ок. Спасибо. Начинаю делать. Надеюсь всё получиться
Проверка на деление на ноль при mod и div есть, а самих mod и div нет
>В целом больше сахар, чем что-то, что реально необходимо и полезно, наверное везде при желании можно списки использовать вместо кортежей. Но кортежи при этом очень активно используются.
Кортежи обрабатываются эффектней списков.
Если нужно последовательности поместить в множество или сделать ключом словаря, то нужно чтобы последовательность была неизменяемой, чтобы у нее был один и тот же хэш. Тут помогают кортежи.
Кроме того бывает, что хочется, чтобы последовательность была неизменяемая, хотя бы для логической выразительности, например, бывают последовательности-константы.
А еще надо учитывать разные подводные камни питона, например, если в качестве инициализатора для параметра по умолчанию указать конструктор объекта, это приведёт к созданию статического объекта, ссылка на который и будет передаваться по умолчанию в каждый вызов. Это может повлечь трудно уловимые ошибки, поэтому лучше для значений аргумента по умолчанию использовать неизменяемые типы.
Вообще полезная штука.
emacs
inf['author'] = Foo()
А то мне не вставляет смотреть 20 часов видео от хирьяноваЕБАЛ В РОТ ВИДЕВА БЛЯ
>optional[Any]
В кратце, это значит что это может быть любой тип или None.
Dict[str, Optional[Any]] значит, что это словарь, с ключом типа строка и значением любого типа, при этом допускается, что значение будет просто None.
Аннотация типов - это указание типа для переменных и функций. Это относительно недавняя и совершенно не обязательная для работоспособности фишка питона, более того, интерпретатор не следит, что там действительно именно те типы, что ты написал, но это могут делать специальные программы и среды разработки, это помогает находить ошибки делать программы более качественными и читаемыми для людей. В целом, полезно, рекомендую использовать.
https://docs.python.org/3/library/typing.html#typing.Optional
https://www.python.org/dev/peps/pep-0483/
https://www.python.org/dev/peps/pep-0484/
https://www.python.org/dev/peps/pep-0526/
> Если нужно последовательности поместить в множество
> Тут помогают кортежи.
from collections import namedtuple
s = set()
Eek = namedtuple('Eek', '')
Ook = namedtuple('Ook', '')
s.add(Eek())
s.add(Ook())
# счастливой отладки
А зачем мне namedtuple, когда мне нужны кортежи? Просто
In [17]: s = {(1,2), (3,4)}
In [18]: s
Out[18]: {(1, 2), (3, 4)}
И нет проблем
Если надо засовывать туплы во множество, наверно, ожидается что у них будет разное содержимое, если хочется разные классы с одинаковыми полями засовывать в сет, так чтобы они там оба остались, надо просто создать нормальные классы и определить для них методы __hash__ и __eq__
В данный момент более православно определять namedtuple примерно так:
from typing import NamedTuple
class Employee(NamedTuple):
name: str
id: int
Вообще, можно побаловаться
In [46]: class Eek(NamedTuple):
...: def __hash__(self): return hash("Eek")
...:
...: class Ook(NamedTuple):
...: def __hash__(self): return hash("Ook")
...:
...: {Eek(), Ook(), "Eek", "Ook"}
Out[46]: {'Eek', Eek(), 'Ook', Ook()}
Честно? Не нравится немного. Слишком громоздко, попытка превратить лаконочный питон в энтерпрайз джаву или в плюсы, причём с тяжёлым синтаксисом и при этом плохой производительностью и надёжностью в плане реальной защиты от ошибок.
Ну, смотри, бывает, видишь в новой незнакомой библиотеке функцию с кучей аргументов, и, даже после ознакомления с доками, не всегда сразу удается сообразить, а чем эти аргументы могут быть, а чем не могут, и какой должен быть результат выполнения функции, а аннотации реально ускоряет освоение нового материала, кроме того IDE может оперативно подсказать, если, вдруг, начинаешь случайно творить хуйню, это всплывает сразу и без падений при запуске и без отладки с дебегером. Уверен, со временем и интерпретатор научиться использовать эту информацию для генерации более оптимизированного кода, как и проекты вроде Nuitka, Cython, Numba, PyOxidizer и прочих, которые позволяют генерировать из питона исполняемые файлы, для ускорения и возможности удобного распространения
> функцию с кучей аргументов
Лучше бы документацию писали нормально.
> аннотации реально ускоряет освоение нового материала
Ни разу не пригодилось.
> IDE может оперативно подсказать
Тормозящее говно не нужно.
> В некоторых областях (например, обработке строк с использованием регулярных выражений) у Python существуют эффективные реализации, не уступающие по скорости любым программам C, а то и превосходящие их.
Почему так (как это работает? регулярки вынесены в отдельный модуль и работают нативно на С или еще как?) и в каких еще областях?
Ты ебанутый сука, давай что-то полегче.
Cпасибо.
Ну там же нужно делать специальные вьюхи, которые будут возвращать json. И уже ajax с этим работает. Или как там ? Я так и не понял. Просто я делаю сайт магазин, и меня жутко бесит, что нужно каждый раз обновлять страницу чтобы например добавить предмет в корзину.
Вообще это первый мой проект и я в notepad++ делал отступы через tab, а оно похоже на это жалуется? Что с этим делать?
import json
# some JSON:
x = '{ "name":"John", "age":30, "city":"New York"}'
# parse x:
y = json.loads(x)
# the result is a Python dictionary:
print(y["age"])
Но проблема в том, что у меня жсон несколько сложнее и выглядит вот так:
https://pastebin.com/e9TKhRq0
Мне нужно запулить переводчик, чтобы odno_naimenovanie, odin tip: 1 парсилось в "наименование такое-то, тип такой-то, кол-во 1".
Как это сделать?
Код отформатировать тебе же предлагает
на лампочку жми - там будет предложение исправить.
Или есть какая-то комбинация, если не ошибаюсь - ctrl+alt+L - жмёшь - и она тебе весь код к ПЕП8 подтянет.
Огромное спасибо, Антон
>Вот если с полного нуля начать сейчас учить питон, через сколько время я смогу куда-нибудь джуниором устроиться
Зависит от тебя, кто-то за пол года вкатывается, кто-то за несколько лет осовить не может
>ну либо первые заказы на фрилансе брать
Когда настакаешь 2-3 года опыта
> Зависит от тебя, кто-то за пол года вкатывается, кто-то за несколько лет осовить не может
Хорошо, спасибо. Мотивация, в принципе, есть. Голодным сидеть не хочется. Да и живу в миллионнике, может и повезёт.
> Когда настакаешь 2-3 года опыта
Нихера себе. Да ну нахуй, лучше джуниором куда-нибудь, чем жопу себе за каждого заказчика рвать.
query = User.select('user', 'id', 'password').order('id').limit(100)
Там со вложенными where и всей красотой.
Надо как-бы научить цепочку методов понимать, что за ней ничего дальше нет, но она-то выполняется слева-направо. Че посоветуете, кроме как сделать бочку?
Ты не поверишь, но, это называется "билдер".
И в конце должен быть специальный метод, типа .build() или .end() или .exec() и т.п., в зависимости от того, что именно ты делаешь.
Внутри вызовы накапливаются, и заключительный метод их все вызывает так, как нужно.
В твоём случае, это может выглядеть так:
query = Query(User).select('user', 'id', 'password').order('id').limit(100).end()
Query - это билдер.
Можно и прямо в User встроить билдер, это зависит от того, что там у тебя внутри.
Блин, а правда тупо билдер-паттерн. Я о финальном методе тоже думал, но хотел без него обойтись.
Спасибо
Например вместо
str0=l[0].strip()
l0=str0.split(' ')
писать что-нибудь вроде
str0=l[0].strip().split(' ')
Это не "несколько методов к одной переменной", это цепочка преобразований значения.
Вот так, в цепочку и пиши, если можно, для данных методов.
И погугли композицию функций.
Ты каждый последующий метод применяешь к разным переменным.
Зато на собеседованиях в пятерочку можешь говорить что ты программист!
Потому что в каком порядке ты положил в list или tuple в том оно и будет храниться, set же хранит со своей расстановкой и т.д.
> данные автоматически упорядочиваются
>>> set(['a', 'c', 'b'])
{'b', 'a', 'c'}
И каким же образом они упорядочиваются?
А теперь повтори с {3, 2, 10}. А еще оно вообще может при каждом запуске в новом порядке хранить (раньше точно могло, деталей не помню).
Пушто ты по индексу не можешь к ним обращаться. Пушто порядок их хранения в этом типе вообще не важен. Важен факт принадлежности к конкретному множеству
Есть у такого способа какие-то подводные камни?
https://repl.it/repls/DualMustySpreadsheet
Да, разобрался со вложенностью, спасибо!
А как мне теперь это перевести в удобоваримый формат, т.е. назвать человеческим именем?
Грубо говоря, жсон отдает
{
"instrument": {
"drel": "10"
}
}
А мне нужно, чтобы питон это распаршивал как "Инструмент дрель: 10".
Я так понимаю, надо воспользоваться словарем? Ключ - закодированное имя в жсоне, значение - декодированное имя на человеческом языке. Но как это изложить в виде кода - вообще хуй знает.
Не программист, не унижайте
Хотя даже нет, тут сложнее выходит. Дело в том, что в приведенном ниже примере 'drel' может быть вложена в разные "ключи", и от этого парсинг будет отличаться. Грубо говоря:
"instrument": {
"drel": "10"
} ---- инструмент дрель: 10
"parts": {
"drel": "12"
} ---- запчасти: 12
>drel
Ну ёбаный стыд же.
Эта задача не столько про питон, сколько про данные.
Решение зависит от твоей конкретной модели данных.
Нужно переводить с учётом иерархии (контекста).
Строй пути через точку - "instrument.drel", и используй, как ключи.
Как-то так.
Но, для данного примера было бы естественнее так:
Инструменты:
-- Дрель: 10
-- Лобзик: 50
Т.е. для каждого уровня иерархии - свой словарь.
В чём твоё ускорение заключается? Я пока не очень понимаю логику написанного, но фактически суть в том, что в одном случае ты выполняешь цикл вида
for i in range(20):
await asyncio.sleep(0.1)
await asyncio.sleep(0.1)
Во втором случае ты одну из этих операций оформляешь в задачу, то есть фактически запускаешь параллельно внутри тела цикла
Соответственно, в одном случае у тебя 4 секунды ((0.1+0.1)20), в другом 2 секунды(max(0.1, 0.1)20)
Но мне скорее не понятно что ты делаешь и зачем.
Почему у tkinter на убунте так хреново отображается кириллица, причем шрифт мало влияет на это? Можно ли что-то с этим сделать, может шрифты какие специальные установить или что? У меня Ubuntu 18.04, python 3, у Tcl в tkinter версия 8.6
Дефолтный async for начинает запрашивать следующие значение только после завершения блока кода в теле цикла, если в цикле происходит другой await, то по идее можно начать запрашивать следующее значение заранее, если оформить его в виде таска.
Прямо пахнуло 90-ми, лол.
Тут недавно было про выбор ос для разработки (>>59662 etc)
Эта картинка - отличный аргумент в пользу винды/мака.
По теме:
https://python-scripts.com/question/16952
Вообще, думаю, дело в том, что эта часть в tcl как раз с 90-х и не менялась.
Это очень разумное поведение. Ты сначала обрабатываешь один запрос, потом следующий. Вот представь, что ты читаешь что-то из сокета и туда же ответ высылаешь.
Ты опираешься на какие-то допущения, что можно смело считать следующую итерацию цикла, не окончив предыдущую.
Мне вообще не понятно, зачем тебе асинхронные циклы. Всё как-то тяжеловесно. Используй, например, очереди задач. Ты можешь сделать очередь из 1-2-много элементов. Эту очередь заполнять одной асинхронной задачей по мере того, как она освобождается.
Смотри asyncio.Queue
в другой задаче ты вытягиваешь элементы из этой очереди и их обрабатываешь.
Это совершенно типовой подход, он намного более гибкий и понятный.
>>62206
Ещё дополню.
Цикл по своей природе синхронная конструкция, их вообще дурной тон использовать. Но иногда надо, когда надо именно последовательно в один поток что-то обрабатывать.
Сейчас общий тренд использовать очереди сообщений. И в асинхронных программах, и в многопоточных, и при для связи нескольких приложений используют специальные очереди сообщений.
У тебя так реально больше возможностей. Например, ты можешь легко целым пулом задач обрабатывать свою очередь.
Цикл это частный случай очереди упрощённого вида:
for x in my_gen():
queue.put(x)
z = queue.get(x)
process(z)
Анон, спасибо большое за идею. Все получилось сделать через итерацию через for, вложенный в for.
Я разделил сплитом каждую строку на два куска, разделителем служит ' - '
Значит у меня должно получиться два элемента списка - 0 и 1.
Вывожу 0 и 1, оба элемента выводятся, но вываливается ошибка.
>Это не "несколько методов к одной переменной", это цепочка преобразований значения.
Вообще-то strip и split это именно методы.
"Цепочка преобразований значения" - неведомая хуйня, которую ты только что выдумал, такого термина в python нет.
Засплить и запиши в отдельную переменную, а потом уже используй обращение к массиву по индексу. Мозга не еби уж.
Написано же, что list out of range. Ты пытаешься вызвать элемент, находящийся вне словаря.
Для отладки сделай или печать строки перед этим, или в tray-catch посмотри.
Мне кажется, что у тебя или пустая строка попадает в обработчик, или строка вне этого шаблона. Вот на этой строке у тебя программа и валится, поскольку после split там список только из одного элемента.
Запилить анонам отчёт небольшой?
Да, на питоне уже есть легаси, даже не на джанге/odoo. Со слов собеседующего, прожекту 20лет, сейчас только планируют переезжать на пистон3. Проект занимается обработкой и вытягиванием данных из всяких документов(чеки и т.п.).
Пили. Всегда интересно, как у всех проходят собеседования, потому что у меня одно и то же и всегда нахуй.
> всегда нахуй.
Зачастую так же.
Раньше перед собесами повторял что-то, сейчас же иду как есть и похуй.
Много уже куда ходил? Я вот всего-ничего, но видя как мои знакомые, которые со мной на одном уровне знания находятся, проходят с первого раза, совсем теряю мотивацию чо-т.
В общем, пили прохладную потом. Если что, порадуюсь вместе с тобой; а нет, так поддержу.
Че знаешь? Че умеешь?
Да я уже третий год работаю, за это время много куда походил, много собесов прошёл, пару тестовых на хуйю повертел.
В прошлых тредах от меня был большой пост со списком вопросов с ласт успешного собеса.
Зарегился на codewars, но там тоже через чур все задания абстрактные. Вроде несложно, но подумать приходится.
Почта
Для закрепления хотелось бы задачи с ответами
>>62655
проект эйлера, ответы в интернетах.
>Подскажите, почему string является неизменяемым типом данных, но при этом допускает метод .replace?
Потому что тебе возвращается новый объект строки
> Подскажите, почему string является неизменяемым типом данных, но при этом допускает метод .replace?
ответы в интернетах.
Ну что ж, собес всьо.
Т.к. прожект написан на чистом питоне, соответственно и вопросы были по чистому питону:
Генераторы и примеры юзания. Контекстный менеджер и примеры + как в классе/функции. Инкапсуляция в питоне, как работает _ и __. Property. Мета-классы(соснул хуйца без вариантов, никогда не читал даже про них, идиот). Множественное наследование в питоне2/3.
Как вызвать метод конкретного родителя. Как идёт поиск метода в родителях. Super. Init/new/call. Slots/dict. Правила импорта, что делает __all__=[]. Как запилить синглтон(не знал что это, а тут узнал и охуел). Вроде по питону всё.
Вопросы по докеру были, но банально "как юзал, почему, какие проблемы были". И по линупсу, так же "юзал или нет", но они на винде сидят.
Собес был коротким, минут 40 по факту, именно технической части, ещё 15 беседы до и после с hr.
Возможно ещё что-то вспомню.
Может есть какая-нибудь хуета в стиле codewars где я бы такой смарел на код и в ответ мне надо было бы определить всю эту О(1) хуйню, а если бы я ошибся меня разобрали по частям так сказать.
Напиши мне скрепт, который на вход принимает ник твитч-стримера и ищёт трансляцию, на которой данный стример присутствует в чате. Ну то есть на выходе тоже должен быть ник стримера, либо сообщение, о том что в данный момент стример не смотрит никакой трансляции
Мне например недавно чле который написал и поддерживает софт на с# в госшаражке сказал что ему больше нравится виндовс потому что она более гибкая. там в кроне 8 параметров заместо 6 в линюхе.
потому что ты сделал какую-то неведомую хуиту. Зачем цикл на один оборот? Зачем цикл в цикле? Что тебе надо, я не понел?
Сделай просто принт с пробелом:
print('a'+' '+'b')
Смотри доки по функции print
https://docs.python.org/3/library/functions.html#print
посмотри на параметры sep и end
по-умолчанию end это перевод строки
Вообще надо это несколько иначе реализовывать.
В каждой твоей строке написано тупое говно тупого говна
дополню
можно писать так:
print(a, b, c, d, sep='\t', end='\n'), хотя end тогда не нужен
если у тебя переменные в массиве
m = [a, b, c, d],
то можно
print(*m, sep='\t')
Две недели назад, психанул и уволился, как говорят, в никуда, с должности дата онолитека в геймдеве. Уволился отчасти потому-что рутина задавила, все вопросы которые решаются "на характере", я тупо игнорил. Да и менеджерить у меня никогда не получалось, а обязанности всё больше уходили в сторону от технических. По-этому решил отдохнуть и перейти куда-то в более техническое направление. Друг посоветовал вакансию того-же аналитика но по описанию и требованиям всё больше походило на какого-то инженера (знание и умение пайтон, API, SOAP, архитектура БД немного, сетевые протоколы немного, процедуры и пользовательские функции в БД), от аналитики только требовали АБ тесты. Обязанности - пилить аутсорс аналитическую\CRM платформу и в дальнейшем ее же обслуживать иногда внедряя фантазии клиента. Ну я прям загорелся, даже сделал тестовое на питоне (реализация сортировочной функции). Тестовое по аналитике сделал - не заметил (подключения в табло, настройка дешборда и пара скриптов запросов в БД, немного расчётов). Когда была встреча с технарём и аналитиками - меня тупо размазали как суку. Нихуя не знал я о PEP8, о наследовании, о __init__. Кароч завалился по полной по части теории Пайтона. После встречи сидел дома и учил то что вспомнил из вопросов, но это уже лирика.
Кароч, у кого был опыт вкатывания перекатывания в похожую область и как искать похожие вакансии конторы, т.к. должность и не аналитик полноценный и не дев и не инженер.Только, блять, не спрашивайте почему я в ебучий МЛ за 300к\сек. не укатился
он же написал
>подключения в табло, настройка дешборда и пара скриптов запросов в БД, немного расчётов
ну я так понимаю это то что раньше называли программист эксель лол
>>62900
Любят родину и радуются солнцу. В зависимости от проекта.
Лично я и похожие мне искали проебы гейм девов в создании фич(аб тесты) оценивали их в далларах, с умным лицом сидел на встречах присекая попытки запилить что-то, что в теории может вытянуть проект из жопына самом деле - нет, вспоминая оторванные от реальности показатели прошлых реализаций таких фантазий. Ну и конечно рисовал забавные графики с натянутыми эстимейтами.
Зоебал, не манагер, но похуй. 1.5k у моих-же коллег - 2.5 из-за того что манагеры они. Где надо там попиздят, где не надо - на меня скинут. По тех. части они были 0, ели могли запустить запустить выгрузку с БД или рассчитать что либо не в экселе. Опыт 1.5 года в гейдеве, 2 года в айти маркетинге (гейм траффик) ну и куча мелких подработок ранее. Со всем стаком скиллов синьора. Умею немного в администрирование БД.
> Зоебал
Извени
> 1.5k
Да ну ебана в рот блять. Я хуею.
Может тоже в аналитики пойти, всё равно на встречах с заказчиками сижу и поясняю за техническую часть. Недавно суперсет освоил для своих целей.
Ладно, хуй с тобой, блять.
Как по мне - ебош через линкедин, там хрюши пасутся, найдётся и для тебя вакансия. Пиши что аналитик, что опыт есть, сеть расширяй и найдёшь себе лакомый кусочек.
>1.5к
>Да ну ебана в рот блять. Я хуею.
>Может тоже в аналитики пойти,
Ты совсем э-бо-бо или тролишь тупостью?
>ебош через линкедин, там хрюши пасутся,
Спасибо, Кеп. Я уже депресуху ловлю от того что не попал куда хотел. А отступать назад в гейдейв - унизительно. Получается я сорвался в никуда, походил поунижался по собеседованиям и вернулся туда-же.
Не нароешь список? А то я чо-т не видел нигде, но и сижу там буквально 5-6 тредов только.
Держи
https://pastebin.com/sTeKcWU1
>>62932
Я шучу конечно, работа звучит адско, но 1,5к по меркам неДС - охуенно, не так ли?
Я получаю сейчас 1,4к, а ебут на собесах не слабо, да и во время работы иногда пригорает.
> Спасибо, Кеп
Зря ты так, для многих это новость, даже +/- опытных, что линкедин решает.
> не попал куда хотел
Всякое бывает, не ссы.
> Получается я сорвался в никуда
This. Хуйово, надо иметь запасной план всегда.
Тогда я не понял кем конкретно ты хочешь быть.
Как искать - я тебе КЭПанул, а что искать - думаю сам для себя знаешь.
Литература для изучения есть в шапке.
Задавай конкретные вопросы и анон поможет.
Есть задача запускать на 40 linux клиентах параллельно одно и то же приложение suricata.
Нужно следить и за статусом этой хрени онлайн и централизованно собирать логи и объединять их.
Не понятно как лучше сделать, с сервера лазить по SSH из Python скрипта или с клиентов лезть на сервер статус сообщать и логи выгружать по мере накопления.
Не могу понять на чем и как это лучше реализовать. Пока смотрю в сторону Netmiko\Paramiko\TextFSM или Ansimble.
>но 1,5к по меркам неДС - охуенно, не так ли?
Если сравнивать с зарплатой кассира супермаркета - то охуенно. Но есть реалии, где эта сумма, если отбросить софт скиллы и няшность - немного маловата. Даже не в ДСах.
>Задавай конкретные вопросы и анон поможет.
И так, снова вопрос: как называется та должность на которую я пробовал устроится? Потому-что у нее был заголовок - Дата аналитик, но это, как вы поняли по описанию - нихуя не он. Какой-то недоинженер-прогер. Стак скиллов который требовался и задачи - очень понравились и я даже бы хотел целенаправленно развиваться так.
> Если сравнивать с зарплатой кассира супермаркета - то охуенно. Но есть реалии, где эта сумма, если отбросить софт скиллы и няшность - немного маловата. Даже не в ДСах.
Страшно далек ты от народа.
Ну да ладно.
> И так, снова вопрос
Возможно, это всё тот же дата аналитик, с бэком питона. Соответственно это их локальные заморочки и ничего схожего ты не найдёшь. Ради интереса можно ещё раз попытаться на ту же вакансию, хуле нет?
P.s. Если ничего тут не подскажут дельного - сходи в "мы вам перезвоним" тред и там поинтересуйся, всё-таки круг там пошире будет.
>Страшно далек ты от народа.
Страшно далёк ты от жизни.
> Ради интереса можно ещё раз попытаться на ту же вакансию, хуле нет?
Никогда в жизни этого не делай, как и никогда не отправляй резюме без вакансии в контору где хочешь работать, типа чтобы тебе перезвонили. На прошлом месте ходил на кофе иногда с рекрутёршей которая меня захантила. Она рассказывала что среди непорядочных ейчаров есть практика пробивать по своим о кандидате. И если ты или придёшь на собес во второй раз не раньше полугода или отправишь своё сиви с просьбой "Рассмотреть" - автозашквар.
> "мы вам перезвоним"
Даже забыл о нём, уношу туда.
Бля, мнение какой-то овчарки воспринимать как экспертное. Большинство носится с своими каким-то шизофреническими методиками, у каждой своя. Единственное что их объединяет - чувство собственной невъебенности, правоты и глубокого понимания вот этих вот забитых кодеров.
Штурм конкретной конторы надо начинать с чашки кофе с работающим там сотрудником. С опросом на предмет состава отдела кадров, ебанутости и численности HR, кадровой политики и возможности прямого контакта с лидами, дирекцией и менеджерами.
И до рассылки левых предложений офисной мебели и попытки разместить там проект от лица левого заказчика с целью зондирования финансового состояния и кадрового голода на те или иные вакансии по отделам.
ИБ иногда совмещающий с PM мимопробегал
Чувак, если ты привык работать рядовым гребцом, то тебе оно в принципе не надо.
А в целом, чел все правильно говорит. Если ты идёшь в контору хотя бы лидом, то все надо пробить.
Семён не семёнь. Таким говном занимаются или секретарши или президенты корпораций. А другие когда такое проворачивают - со стороны как шизоиды.
Это абсолютно нормально.
Компании пробивают специалиста, специалист пробивает компанию.
Особенно когда у тебя есть выбор куда идти
Ну вот, потому что среднему кодеру неловко быть шизоидом и поболтать за чашкой кофе лишний раз, на таких даже сраные овчарки с интеллектом и подготовкой как у табуретки ездят.
Все сходится.
И вот это >>63149 не я написал. Хотя удивлен, что в этом треде явных джунов и студентов кто-то одобрит.
тот же ИБ мимопробегал
Контур.Фокус вам в руки например. А то некоторые любят устроиться в контору которой история мойки-помойки и дебиторка в внешний долг США. А потом ебушки-воробушки, зряплату не платят 2 месяца, чтож это такое творится.
Видать ты вообще не понимаешь ничего в рынке и продуктовой разработке. Ты когда видишь вакансию от компании и читаешь ее название - у тебя должен выстраиваться ассоциативный ряд о продукте, сегменте, последних новостях. И тебе не нужно ходить где-то подлизывать чтобы узнать очевидные вещи. Ты же не пойдешь в трезвом уме устраиваться например ПМ в крипто контору, понимая что на тебя все висяки лягут.
Никто никого не пробивает, сука, такое чувство будто ты какой-то сбшник или менеджер по логистике нахуй.
>>63167
Я уже пригораю от тебя, как могут овчарки на ком-то ездить кроме самих же овчарок. Она тебя заставит ее сраный ексель заполнять или коробки офисным говном таскать. Как показывает опыт, если у тебя нет скиллов и мозгов, то ты пробуешь устроится через знакомых и подлизывая ейчарам. Таких сразу нахуй обычно посылают.
Прошёл базовый курс в яндекс.практикум, но всё равно не очень понимаю реальные задачи, которые могут встретиться
Понимаю, что всё сильно зависит от сферы деятельности компании и от проекта, но тем не менее, наверняка у начинающих задачи плюс-минус схожие
>должен выстраиваться ассоциативный ряд о продукте, сегменте, последних новостях
Мил человек, ты дурак или тебя маркетолог покусал? Ты еще предложи на пресс-релиз для клиентов с тонной говна и лапши ориентироваться. Или мы уже о покупке акций фирмы на волне хайпа обсуждаем?
Для вменяемого человека больше о реальном финсостоянии фирмы скажет, куда с любовницей нач отдела летал последний раз. Но ты ведь у нас наверняка самый-умный-у-мамки-погромист и ЧСВ с отсутствием соц навыков тебе не позволит это узнать.
Троллинг_тупостью.жпг
Сап, двощ, вообще не могу въехать в концепцию итерируемый объект-итератор-генератор.
Прохожу курс на степике, и вообще не понимаю тамошнюю задачку.
Может подскажешь чего про это почитать-порешать
Ну ты такой подходишь к объекту и говоришь, ща тебя итерировать будем, маня, готовь итератор и вызываешь у него __iter__, который возвращает тебе итерируемый объект.
Гришь ему, показывай, что в карманах, сука, вызывая __next__, смотришь чо там у него лежит. Делаешь так пока все не заберешь, а когда завизжит StopIteration, можешь не ссать, он не наебывает и правда все отдал.
Ну ты уточни сначала, ты про генераторы списков или генераторы объектов и прочие yield?
На 100 рублей потоки, процессы, архитектурные особенности Redis с намеком на HighLoad, паттерны. Хорошо еще лучшие практики рефакторинга не спрашивают. Они у вас там совсем охуели в край?
> джун
> собственное API
> многопоточность
> асинхронная обработка
Хуюн. Еще одна ебанутая жертва совкового стиля собеседования.
Ну вот так.
Да и нужен им был человек-оркестр, они его получили.
>>63244
> И это ты получается писал, что у тебя 3 года опыта?
Да, ну у меня только месяц как третий год начался. Когда устраивался к ним, было ещё 2,5.
> А сколько до первой работы учил язык?
Пол года примерно, но не очень активно, т.к. работал на днище-работе параллельно.
Я там вроде писал что не ответил, всё остальное ответил, хоть как-то.
>Пол года примерно, но не очень активно, т.к. работал на днище-работе параллельно.
Я просто планирую полгода активно учить пайтон + английский дотянуть до B2, сейчас у меня +-B1 и потом поехать куда-нибудь работать, например в Минск, Мск, или даже Питер. В общем без разницы особо, главное что бы норм джуном взяли и развиваться дальше.
Получается у меня может получиться? А то в гугле прочитал, что устроиться без опыта работы на самую первую довольно сложно
Это паста от того самого легендарного армянина, которую от по 90 долларов всем продаёт?
Там слишком много всего понамешано, от простых вещей до сложных технологий, которые серьёзного опыта и понимания требуют, чтобы с ними нормально работать.
Джун vs сеньёр больше про опыт работы, понимание, как решать реальные проблемы, опыт решения больших задач и т.п.
> Я просто планирую полгода активно учить пайтон + английский
Норм план. В Минске роаботы для ждунов не очень много(ищут ждунов с опытом, дегенераты блять). В ДСах думаю Ок всё будет.
> устроиться без опыта работы на самую первую довольно сложно
Таки да, я же не сказал что моя первая работа была в офисе. Я начал с фрилунса(мне повезло), затем вертел жопой и активно двигвал тазом в поисках других работ(начиная с групп в вк и продолжая телегой). Хаполнял гит, читал статьи.
В результате, после увольнения с дно-работы 4 месяца искал новую и взяли в рога и копыта. Но не похуй ли? Ведь появился "реальный" опыт работы. Вот и всё.
>>63251
> Это паста от того самого легендарного армянина, которую от по 90 долларов всем продаёт?
Чтоблять?
> от простых вещей до сложных технологий
Всё так. Но никто не говорит тебе идеально знать принцип работы и подкапотность Redisa, к примеру, достаточно работать с ним немного и знать что и как в нём сделать.
>В ДСах думаю Ок всё будет.
>искал новую и взяли в рога и копыта
А ты в каком городе это делал? Если в дс, то сколько платили на первой работе?
Просто даже если джуном устроиться там < чем за 50к, то просто по деньгам сложно выжить будет, если конечно не жить в хостеле или комнате
> А ты в каком городе это делал?
Минск жи, но я сам отсюда, так что с жильём проблем не было.
Первая зп была - 400$, но я ещё фрилансил.
Были коллеги из других городов, они снимали или квартиру со знакомыми, или комнату.
Я про ДС-цены мало что знаю так что ничего не смогу подсказать.
А до того, как устроился работать, как выживал? Почему ты думаешь, что вот столько времени жил, ничего толком не зарабатывая, а потом бац, и сразу средний класс?
И ещё, на многих невайти работах 50к не начальная ставка, а уже для тех, кто много и прилично работает. Но живут же люди.
Всё-таки нельзя сразу рассчитывать на крутой уровень. Только при торговле своими отверстиями малый опыт в плюс. Объективно, ты просто ещё мало чего можешь и умеешь.
Это\ что за стиль такой?
>бац, и сразу средний класс?
>И ещё, на многих невайти работах 50к не начальная ставка, а уже для тех, кто много и прилично работает. Но живут же люди.
Да я понимаю, это такой провал конечно, даже в центре такой страны такие настолько маленькие зп.
Просто например:
30к снять квартиру, далеко от центра, 5к на проезды и мелочи, 10к хотя бы на еду. Остается 5к всего от 50.
>>63293
>Всё-таки нельзя сразу рассчитывать на крутой уровень.
Я это прекрасно понимаю, просто нужны деньги что бы хотя бы выживать первый год, ладно забить на то, что бы откладывать на что-то, путешествовать, но хотя бы жить где-то и есть надо
Ты относишься так, что или всё, или ничего. То есть ты живёшь или за чужой счёт, или сразу снимаешь отдельную квартиру, откладываешь и путешествуешь.
Для многих зарплата в 50 это то, к чему надо долго стремиться. И они при этом тоже как-то живут. С тем же жильём, есть опции съёма комнаты, съёма квартиры на пару и т.п., помимо жития у родных/родственников.
Я как бы понимаю, что ты хочешь сказать. Но не всё так просто в жизни. Да и в Москве всё-таки больше 50 платят даже джунам.
Это сейчас ещё хорошо, сейчас тот же съём куда доступнее, чем 10 лет назад.
Совершенно нормальный набор знаний для выпускника. Конечно, без реального коммерческого опыта, но всё-таки с пониманием, как это работает и с опытом "немного потрогать".
self.assertRaises(AttributeError, self.model(not_existing_field=True))
if field not in cls._FIELDS:
raise AttributeError
В трейсбеке теста вылетает AttributeError. Собственно он и должен вылетать.
Мне его перехватит надо или что?
>Эта картинка - отличный аргумент в пользу винды/мака.
>
Так-то в убунте все хорошо с кириллицей, это у tkl какие-то трудности.
>По теме:
Но там только вопрос с такой же проблемой, а решений нет. Это шутка юмора такая?
Обьясни пожалуйста в двух словах, зачем оно нужно? Я прохожу на курсере курс про питон и математику в нём, там всё делается в айпайтон. До этого я всё делал просто в файле и запускал в ide, пока не могу понять, зачем айпайтон вообще понадобился, это типо просто попытка сделать консоль удобнее?
checkio.org
Дай угадаю, ты дурачок-аспирант, который тоже дрочит на собесах джунов такой кашей?
У выпускника нет таких знаний, в принципе. Две лабы по потокам и процессам, это не знания, а говно. Я уж молчу про декораторы и прочие шаблонизаторы и паттерны.
Потому что применить это вдумчиво, не то что построить нормально архитектуру вокруг этого, он сможет самостоятельно не через год или два даже.
А заявки на знание внутренней архитектуры NoSQL баз вообще наглость в том плане, что опытный соискатель подумает что от него в процессе работы захотят все, сразу и подешевле. И будут ебать за двоих и за мелкий прайс. Я бы по опыту бы подумал.
В целом дрочить соискателя всем что знаешь сам и с чем немного сталкивался он или ты, вместо проверки соответствия позиции и потребностям фирмы под выделенный бюджет - колхоз и дебилизм, а часто еще и наглость.
37 лвл PM
>это типо просто попытка сделать консоль удобнее?
Не просто попытка, они этого уже добились. Понимаешь, иногда практически всегда хочется поиграться с кодом в интерактивном режиме, а в Ipython это намного удобнее, чем в стандартном консольном интерфейсе питона, потому что там есть качественное автодополнение, есть подсветка синтаксиса, есть мэйджики, это такие специальные команды, с помощью которых можно делать много полезных вещей, например, измерить время выполнения кода или открыть исходный код функции, вообще много удобных мелочей, можно просто вопрос ставить в конце строки, чтобы получить справку по объекту, вместо "help(object)" просто "object?", история ввода сохраняется между сессиями и по ней удобно искать. Не обязательно использовать Ipython через консоль, многие IDE могут с ним взаимодействовать. Хорошая в общем штука.
Удобно, что можно команды выполнять поблочно. В дата саенсе это гигантский плюс, т.к. приходиться работать с достаточно большим количеством данных, и если ты каждый раз будешь писать код в файле, а потом запускать в IDE, то при каждом запуске будут выполняться чтение и предобработка данных, а эти процессы занимают достаточно времени. В IPython или Jupyter ты можешь в одном блоке считать данные (один раз), и дальше уже работать с ними в других блоках, плюс в Jupyer можно помимо кода выводить различные медиаданные.
Да и в обычной разработке IPython тоже часто пригождается: для отладки (выполнение построчно) и для пробы новых инструментов и фич языка. Так как код выполняется поблочно, то ты в любой момент можешь посмотреть состояние всех переменных, заглянуть внутрь объекта (благо Python позволяет).
Нет, ты не угадал. У выпускника есть знания, у него или должны были быть какие-то курсы, и/или он сам должен быть как-то разбираться с технологиями.
Я уже очень давно закончил. Но курсы по алгоритмам, по параллельному программированию (треды, процессы, кеши, конвееры, MPI), по базам данным (SQL), и ещё разная хрень, в основном это по выбору курсы.
Это НОРМА. Реально это знания "на потрогать". Если ты интересуешься технологиями, то тоже с чем-нибудь будешь играться.
>>63385
>он сможет самостоятельно не через год или два даже
А кто-то говорил, что вот с нуля можно стать программистом за год-два? Это серьёзная работа, предполагает хорошее понимание.
>>63385
>А заявки на знание внутренней архитектуры NoSQL баз вообще наглость в том плане
Вряд ли можно знать всё обо всём. Знание внутренней архитектуры свидетельствует, что ты серьёзно погружаешься в предмет, с которым хочешь работать. Это хороший плюс. У тебя реально может даже опыта работы не быть, но устройство ты понимаешь.
Если ты разобрался с какими-то одними технологиями, то скорее всего разберёшься и с другими. Если ни с чем не разобрался, то велик шанс, что ты просто макака, которой это и не интересно.
Все таки чувствую в тебе я тон заносчивый вчерашнего выпускника задрота с опытом года в 3-4, юный падаван.
Вот эти вот должен-должен-должен. Ты явно даже близко до лида не доработал, когда становится уже поебать на то кому кто и что должен и просто сдаешь очередной проект.
Начало и середина джунские, конец мидловский, будь я ждуном я бы охуел, будь я мидлом, то обиделся бы из-за первых вопросов, хуйня вообщем
Джун vs серьёр не о наборе слов, а о реально опыте.
Можно пилить какие-нибудь сложные проекты на питоне, но никогда не иметь дела с потоками и асинхронностью, с брокерами сообщений и т.п. Твоя компетенция будет в другом.
А можно довольно примитивные вещи делать с тем же Redis, более-менее уметь процессы и асинхронность, вот просто самому всё это освоить не имея опыта коммерческого, но от этого ты мидлом не становишься.
Паста просто о специфичном направлении, по разработке сервисов и работе с сетями.
Но полноценная работа с MQ, (No)SQL обычно уже предусматривает коммерческий опыт в области, где требования выше среднего, всё-таки не совсем джун это.
И ты будешь у не совсем джуна спрашивать про создание собственного итератора, list comprehension, декораторы и т.д.? Он бы подумал, что его за дурака держат или собеседующий не понимает на какую вакансию ты пришел.
На первых шагах в Байте питона, обосрался на этапе запуска в терминале.
Всё делаю по инструкции, может быть проблема в том, что всё расписано только по XP, висте и 7, а у меня 10?
ну так прямой запуск py файла работает же? А так забей хуй - накати сразу pycharm, там пилишь проект, в папке проекта создаёшь py файл, и потом ctrl+shift+f10 первый запуск файла с которым работаешь,shift+f10 последующие
Привыкай читать ошибки. No such file or directory, говорит о том, что файла 111.py нет в директории c:\py. Значит у тебя есть следующие варианты решения этой проблемы:
1. переместиться в директорию с файлом 111.py и запустить его оттуда
2. прописать полный путь до файла (например: python c:\<путь>\11.py
3. скопировать файл в папку c:\py (наимеенее предпочтитеьный, т.к. не следует замусоривать папку интерпретатора)
https://docs.djangoproject.com/en/2.2/topics/http/file-uploads/
Подозреваю что у тебя:
А) пропущен аргумент request.FILES при создании экземпляра формы
Б) отсутствует атрибут enctype (<form method="POST" enctype="multipart/form-data">)
Стоит ли перед тем как приступать к изучению фреймворков говнячкать свои сайтики, это хоть как то поможет в изучеии погромирования, или такой путь ялвляется пустой тратой времени?
Темы, цветовые схемы. Тысячи их. Выбирай
x = int(x)
operands=[]
for i in range(1,x+1):
operands.append(i)
result = 1
for z in operands:
result = result * z
return result
2. Что за хуйня с наследованием?
>прописать полный путь до файла
Так это и есть полный путь, я специально создал пустую папку /py на диске С, там всего один файл 111.py, всё по учебнику.
Сам Питон у меня в другой папке.
https://pep8.ru/doc/dive-into-python-3/3.html
Здесь в разделе "путь поиска оператора import" все доступно объясняют, но если кратко, то есть специальные каталоги в которых питон ищет имена (например, django.db в твоем случае - это каталог db в каталоге django, в самом каталоге db ты запрашиваешь каталог models в котором есть файл __init__.py в котором прописанно что тебе нужно передать, чтобы ты мог наклепать свою ебанную очередную говноформу на джанге)
Про наследование по аналогии, в файле который тебе подключит пистон, есть класс, который ты в итоге и наследуешь
А то я думаю что от моего кода у любого питониста кровь из глаз потечет.
У меня то глаза уже давно вытекли, а вот как ты с тремя цветами: белым, серым и говнооранжевым сидишь, я не понимаю.
Я уже загрустил, пока всё переписывал/переустанавливал. не работает.
Интересная штука этот питон, но такой тупняк на ровном месте сильно дизморалит.
Может это какой-то троллинг ньюфагов или я староват?
123 вернее.
А смысл в винде вабще терминалом пользоваться? Это же не линукс, чтоб пердолиться и 24/7 в терминал глядеть. я терминал запускаю в лучшем случае раз в месяц. А для желающих попердолиться - есть как бы и альтернативы, только нахуя?
>чем мышкой кликать.
Это только в том случае, если интерфейс пилили из говна через жопу, или если интерфейса для нужных вещей как в линупсе просто нету а его там нету, т.к. пердолить в линупсе надо абсолютно всё. В целом конечно глупо отрицать, что интерфейсом работать в 10 раз быстрее. Например нажать shift+f10 в окне pycharm - в разы быстрее чем корябать в терминале 'python c:\py\123.py'.
Сдедал функцию, которая считает от 0 до N.
Засек время необходимо для ее работы.
И засек сколько времени уходит при использовании M процессов, запускаемых через фор, при подсчете от 0 до N/M. В противоречие ожиданиям времени ушло чуть больше чем при варианте без использования процессов.
Так же, использовал Pool, результат примерно такой же.
Вроде бы, при увеличении N, в какой-то момент процессы немного обгоняют линейный подсчет. Наверное, при гигантских N разница будет ощутима. Однако, результат при необходимом мне N печалит.
Что я делаю не так? Или это норма?
Я на линуксе сижу и редко пользуюсь терминалом.
Ну как редко, есть куча самописных скриптов, которые предствлены для линукса, венды и мака. Запускаю их соответственно через терминал и когда это делаю, получаю эстетическое удовольствие. Можно и вкладки открыть в терминале и много чего.
Твои оправдания, виндовс-девочка?
ну тут персонаж из лайнус-треда пожаловал видимо, который без терминала жить не может. Спорить не буду, и на линупсе можно без этого обойтись но таки сложно
Сам код(в комментариях вариант запуска процессов через for, а не Pool):
import time
import os
from multiprocessing import Process, Pool
def t(nmax=25):
t1 = time.time()
n_end = 0
for n in range(nmax+1):
print(n)
n_end = n
t2 = time.time()
print('time', (t2-t1), 'id_proc', os.getpid(), 'n_end', n_end, '\n')
if __name__ == '__main__':
procs = []
numbers = []
for i in range(5):
numbers.append(10000)
t1 = time.time()
pool = Pool(processes=5)
print(pool.map(t, numbers))
"""
for i in range(5):
# proc = Process(target=t, args=(4000,))
proc = Process(target=t, args=(10000,))
procs.append(proc)
proc.start()
for proc in procs:
proc.join()
"""
t2 = time.time()
print('end_time', t2-t1)
Сам код(в комментариях вариант запуска процессов через for, а не Pool):
import time
import os
from multiprocessing import Process, Pool
def t(nmax=25):
t1 = time.time()
n_end = 0
for n in range(nmax+1):
print(n)
n_end = n
t2 = time.time()
print('time', (t2-t1), 'id_proc', os.getpid(), 'n_end', n_end, '\n')
if __name__ == '__main__':
procs = []
numbers = []
for i in range(5):
numbers.append(10000)
t1 = time.time()
pool = Pool(processes=5)
print(pool.map(t, numbers))
"""
for i in range(5):
# proc = Process(target=t, args=(4000,))
proc = Process(target=t, args=(10000,))
procs.append(proc)
proc.start()
for proc in procs:
proc.join()
"""
t2 = time.time()
print('end_time', t2-t1)
Ну в том, что ты выводишь храниться не HTML код страницы, а ответ с кодом 200 ОК
Это как минимум говорит о том, что ты запрашиваешь неверный метод
Разбираться лень, на секунду глянул в доку по либе, попробуй .data()
A = set('bqlpzlkwehrlulsdhfliuywemrlkjhsdlfjhlzxcovt')
B = set('zmxcvnboaiyerjhbziuxdytvasenbriutsdvinjhgik')
for x in A:
__if x not in B:
____print(x)
Сделал так, вроде верно все выводит, но меня почему-то не покидает ощущение, что я сделал что-то не так.
Правильно решил задачу или нет, пацаны?
> set.difference(other, ...) или set - other - ... - множество из всех элементов set, не принадлежащие ни одному из other.
А тебе только через цикл допускается или методы множеств тоже можно юзать?
А так вроде правильно.
Задача так выглядит пикрелейтед
Мне твою функцию в цикл пихать? Походу я все правильно сделал, шиза накрывает бля
если обязательно использовать итератор, то все верно, если можно без него, то встроенный метод
Спасибо.
>если тебе нужно стянуть HTML со страницы, то могу подсказать решение через bs4
Я разные методы изучаю, и просто так и не могу понять почему он не хочет выдавать теги. Уже крутился с методами и так и сяк
Shift + f10 может и быстрее, но если ты захочешь прописать какие-то дополнительные параметры к запуску, добавить переменные окружения, перенаправить вывод скрипта на вход другой утилите (грепнуть например), то в графическом интерфейсе это займет гораздо больше времени. Более того, часто графический интерфейс не предоставляет всех возможностей, (подумай, например, почему люди пользуются консольным клиентом гита, а не графическим, который используется только для визуализации).
Для части прогерского софта в принципе нет графического интерфейса - докер отличный тому пример.
Да и вообще, если ты изучаешь питон для бэкенд-разработки, то пора начинать учиться пользоваться терминалом, т.к. 99% процентов машин, на которых будут вертеться твои сайты, будут работать именно на линуксе, а единственным способом взаимодействия с ними будет ssh
Скинь код там ясно будет. Но вообще результат довольно ожидаемый: на создание процесса тратится довольно много времени (в питоне 3.8 обещают сделать быстрее), т.к. процесс - это запущенная программа, со своим адрессным пространством, стеком, набором файловых дескрипторов, со своими регистрами и т.д. То есть при создании нового процесса создается полная копия процесса родителя (там, конечно, всё немного хитрее, но суть от этого не меняется). Плюс есть ещё большие накладные расходы из-за того, что приходится делать системный вызов. Поэтому процессы будут выигрывать только на долгих дистанциях (то есть, когда выполнение задачи занимает много времени). Также бесполезно создавать процессов больше, чем число потоков твоего процессора (по крайней мере для cpu-bound задач, а для других процессы и не используют обычно)
Я умею и не брезгую пользоваться терминалом, но я же не дурак лишний раз использовать текстовое говно вместо няшного гуи-интерфейса, и кукарекать о том что окно терминала слишком чёрное.
Ну да у тебя функция слишком быстро выполняется, создание процесса займет больше времени. Во-первых убери вывод в консоль из функции t, во-вторых увеличь аргумент раз в 10 и тогда уже прирост производительности будет очевиден
Я просто чёто не могу понять - нахуя мне городить конструкцию на пик.1, вместо конструкции на пик.2? Чтобы применить декоратор - его надо в виде '@декоратор' перед объявлением функции заюзать? Тоесть в коде динамически это селать невозможно?
>>64171
О бля, понял что можно использовать так, что бы целиком не модифицировать функцию, но всё-равно выглядит как юзелес хуета - проще и красивее имхо условия внутри функции прописать, если что-то поменять надо. А конструкция с @декоратор перед объявлением функции - мне до сих пор непонятна и кажется максимум юзелесс хуетой. Поправьте, если не прав.
Свой декоратор полезен, когда появляется много функций, одинаковых в начале и/или в конце (с одинаковым инфраструктурным кодом).
Например, как-то вынес в декоратор логику, чтобы функция запускалась не в основном потоке.
ну я правильно понял, что юзабельная для использования конструкция: декоратор(функция)(значения), а не @декоратор \ def функция?
Нет, не правильно.
И ты будешь каждый раз при вызове функции юзать функцию обертку вместо того, что бы один указать ее в объявлении
Когда у тебя будет 20 функций, одинаковым кодом вначале строк на 20. Юзабельнее проще и красивее будет вынести этот код в декоратор. А отдекорированные им функции использовать по просто их именам.
В простых скриптах свои декораторы не нужны, конечно.
Вот это нормально объяснил. Хотя даже тут не совсем понятно, что мешает просто из самой функции вызвать другую функцию с нужным кодом, получить от неё вводные данные и работать дальше, зачем именно декорировать
Накидай пожалуйста простенький пример, чтобы две функции например использовали один и тот же декоратор для замены одинакового куска кода
да я понял, мне интересно эта конструкция должна выглядеть в сложном скрипте - а то в учебниках объясняется для простых скриптов.
На данный момент это 3 вызова print() в самом коде, при вызове утилиты с опцией --help
Как грамотнее реализовать доку? Вынести текст в отдельный файл и вызывать его засовывая в print построчно? Или есть какие-то техники, о которых я не знаю?
Не столь важно, но есть примеры хорошего стиле обработки опций? У меня это сравнение входных данных с определенной строкой, что мне кажется довольно уебанским
Чтобы модифицировать поведение функций, не изменяя саму эту функцию. Может, эту функцию даже и не ты писал.
В модуле functools есть декаратор с lru_cache, он позволяет кешировать результаты выполнения функций, то есть, если будешь вызывать декорированную функцию несколько раз с одними и теми же параметрами, то вычисляться функция будет только в первый раз, а все остальное время будет извлекаться кэшированное значение, это повышает производительность.
Для классов есть декораторы property, staticmethod, classmethod которые позволяют создавать свойства, статические методы.
В библиотеках и фреймворках любят декораторы, вот, например, во Flask декораторами связывают url адреса страниц и функции, которые эти страницы генерируют, или в Numba декораторами помечают функции, которые надо ускорить.
Декораторы - это здорово, потому что ты одной строчкой добавляешь полезную функциональность.
Если ты только читаешь учебник, то декораторы тебе ещё не скоро понадобятся. Просто знай, что они есть. Это способ делать сложный код проще. В чем-то аналог макросов в C/C++.
Потом ты столкнёшься с декораторами при использовании сторонних либ (тот же фласк, например).
Потом ты будешь читать исходники этих либ, чтоб понять, как же работают.
Потом ты будешь рефакторить свой разросшийся код, и поймёшь, что тебе тут нужны свои декораторы.
Для консольных утилиток почти всегда лучше держать доки в коде.
Для обработки опций есть либы, начни например со штатной optparse.
Конструкция с декоратором
@deco
def func(par):
pass
полностью эквивалентна
def func(par):
pass
func = deco(func)
Просто чуть более и компактная запись. С декораторами просто немного нагляднее.
но ведь вторую конструкцию можно использовать в любой момент - тоесть с ней можно пользовать как оригинальную функцию, так и отдекорированую. А если использовать конструкцию с @deco - то функция будет отдекарирована безвозвратно, не?
Декораторы - это в первую очередь принцип оборачивания исходной функции в обёртку
func = deco(func)
Никто не принуждает пользоваться именно этим оператором, можно явно вызывать функцию и иногда даже разумно. Но намного удобнее читать сверху вниз.
Сама по себе идея обёрток полезна и интересна, но всё-таки бездумно использовать не надо, как минимум это оверхед и вообще несколько кривая архитектура.
Но в каких-то случаях могут быть очень полезны. Кеши, логгеры, контроль возвращаемых и передаваемых значений, вынос какого-то общъего обёрточного функционала в декоратор. Причём в таких случаях именно в таком синтаксисе обычно очень наглядно становится.
Да, всё верно. Поэтому декораторы не нужно использовать для всего подряд. Но где-то они реально удобны.
А как лучше сделать? Чего добавить, чего убрать. Покажи как у тебя, пожалуйста.
Декораторы позволяют следующее:
1. добавить к функции свою логику, которая будет выполняться при импорте этой функции (импорте модуля с функцией) - полезно для добавления функции в какой-нибудь реестр, например декоратор app.route во фласке
2. добавить к функции свою логику, которая будет выполняться перед исполнением самой функции (при этом в этой логике будут доступны аргументы, переданные на вход функции)
3. добавить к функции свою логику, которая будет выполняться после исполнения самой функции (при этом в этой логике будут достпны и аргументы функции и её возвращаемое значение)
4. можно вообще подменить функцию с помощью декоратора
Как видишь, область применения декораторов безграничная. Например, ты можешь написать декоратор, который будет засекать время выполнения самой функции или декоратор, который будет логировать входные и выходные значения или даже кэшировать (такой декоратор уже есть - functools.lru_cache).
Можно написать декоратор, который будет перед выполнением функции объявлять транзакцию, а в конце коммитить её (такой декоратор есть в джанго)
При этом декоратор может быть как универсальным, подходящим любой функции (с помощью args и *kwargs), так и специализированным, который учитывает входные данные.
Можешь ещё глянуть декоратор functools.singledispatch, благодоря которому можно заставить питон изображать перегрузку функции по типу входного аргумента.
Более того, декорировать можно не только функции, но и классы. При сам декоратор также может являться классом. Благодоря этому открываются ещё более широкие возможности.
Да, кстати, вот очень годная лекция про метапрограммирование
Я скинул с тайм-кодом на начало объяснения декораторов, но советую посмотреть полностью очень хорошие подача и материал.
https://youtu.be/bt6kU1kuHWA?t=2340
>Благодоря этому открываются ещё более широкие возможности.
Тут легко свалиться в типичное юниорское "прочитал про технику, полезную для каких-то задач, и начал искать места, куда бы её ещё можно приткнуть". При том, что реальной необходимости в этом нет.
Реально же смысл такой.
Пусть есть функции вида
def g1()
.... some code 1
f1()
some code 2
def g2():
.... some code 1
f2()
some code 2
при этом код some code 1 и some code 2 дублируются. Можно просто вынести этот дублирующийся код в deco, и реализовывать только уникальный функционал в функциях f1, f2
и в итоге год будет
g1 = deco(f1)
g2 = deco(f2)
таким образом мы уходим от дублирующегося кода и получаем большую гибкость.
Я могу другие примеры привести. Пусть нам на выходе нужен json в каком-то формате. Реализуемые функции могут возвращать просто объект, а уже во внешний будет перепаковка в json. При этом одновременно мы можем контролировать, что возвращается именно объект, а не строка или не исключение. Можем корректно обрабатывать те же исключения, и нам не нужно городить сложные негибкие обвязки внутри функций.
Подчёркиваю, что это идея функции-оболочки, сами декораторы лишь синтаксический сахар.
а что мешает циклом сделать?
for i in range(3): print("")
print("help")
а case самое простое опять же через импут и циклы
аа вьебал че ты хочешь - чтобы с новой строки писать просто в строку добавляешь \n, так одним принтом все будет
SOSI
list [
[ent01, ent02, ent03, ent04, ent05],
[ent11, ent12, ent13, ent14, ent15], ...
]
Причем пустые поля должны посылать нули. Подскажите плз, как это реализовать.
У классов есть __new__, который вызывается перед __init__ и ответственен за создание объекта, есть __init_subclass__, который вызывается всякий раз при создании класса-наследника, а еще для сложных и необычных случаев есть темная магия метаклассов. Честно говоря, я нихера не понял, что тебе нужно, но, похоже, ты хочешь вмешаться в стандартные механизмы создания и наследования классов.
Как в одну строку реализовать такое: возвращаем значение по ключу в словаре если такой ключ есть в словаре иначе возвращаем сам ключ.
Сам ключ
> Можно просто вынести этот дублирующийся код в deco, и реализовывать только уникальный функционал в функциях f1, f2
Да блять, больше всего напрягает в данной ситуации, что это можно сделать и без изобретания всяких конструкция аля декораторов - вынести общий код можно просто в отдельную функцию, и вызывать эту функцию так же в одну строчку, пикрелейтед - просто отдельная функция с общим кодом для двух других функций, и зачем для этого декоратор?
>>64330
Видео сейчас глянул, поясняет всё хорошо, стало понятнее как всё работает. Но область применения по-прежнему под вопросом - из адекватного для меня сейчас видится декорирование чужих функций из модулей например...
Есть пару вопросов по telegram bot api.
1) Как грамотно обойти блокировку? Тк у меня на компе стоит vpn, то проблем как таковых не возникает.
До тех пор пока я не захочу запустить его бота без vpn.
Документацию чекал - не вышло. Мб что не так делал?
2) Я реально не понимаю заморочек с chat_id и message_id!!
Когда нужно отправить сообщение пользователю бота, или в канал, где бот участник - окей.
Но что если я хочу, допустим, сделать бота-поисковика по рэндомному каналу??
Как я могу получить id этого канала или id сообщений? Есть что почитать по этому поводу?
Заранее спасибо за адекватные ответы!
>>62775 - кун
Потому что ты его просишь распечатать числа от 0 до 10.
Ты какой-то неадекватный, сколько тебе лет?
end = '\n' - идёт по дефолту, и указывать врчную не надо!
Мне кажется пограмирование - не твоё
a = input('введите А')
b = input('введите Б')
for i in range(a, b+1): #для i в диапазоне(от a до b+1)
print(i)
>из адекватного для меня сейчас видится декорирование чужих функций из модулей например...
А, ну да, кеширование забыл - тут вабще без вопросов - тоесть если надо иметь доступ и к вводу и к выводу функции - декоратор незаменим
640x360, 0:12
Ну получается что с декоратором можно присрать кеширование в одну строку, а без него придётся расписывать if else конструкцию внутри функции, и если функций много - придётся делать это много раз... С другой стороны для разных функций должен быть разный кеш, т.к. операции разные, и одним декоратором обойтись сложна... В общем хз, сложна, нипанятна
> одним декоратором обойтись сложна
Значит тебе рано еще об этом думать. Поиграй в замыкания, во вложенные функции, тогда все поймешь.
Не, ну если одна функция делает умножение, а вторая функция делает деления - один декоратор-кеш к ним не присрёшь. Тоесть тут должны быть разные функции делающие одно и то же просто под разным углом, чтобы их можно было отдекорировать одним хеширующим декоратором, или расписывать кучу условий в декораторе - что так же не айс. Ну мне пока так понимается
Карина пися богиня жамкать чепубель! Андрюха это ее дядя они не ебутся
Секретчики долбоебы, особенно эмпати и черкаш
меня из конфы кикнули, суки, но я молчуном был
Да у тебя и не должно быть проблем, просто запомни, как работает range
range(начальный элемент(по дефолту 0), конечный элемент(не включительно), шаг(по дефолту 1)
Яблоко это строковая переменная, следовательно должна быть помещена в кавычки. В противном случае python воспринимает это как переменную и сообщает тебе что переменная not defined.
> один декоратор-кеш к ним не присрёшь
> или расписывать кучу условий в декораторе
Какие условия? Где? http://ideone.com/q6rhHN
>>64750 - кун
Потому что нет никаких столбцов блять, построчный вывод ёбаныйрот
> Мне кажется пограмирование - не твоё
Рейндж понятно, будет равен б, пусть б равно 100. Теперь я пишу
а = 50
б = 101
for a in range(б):
print(a)
Бля, сейчас проверил, действительно начинается с нуля. А если я с 50 хочу, как сделать? В паскале и плюсах работало иначе.
Слушай, давай так, расскажи мне в ответ на этот пост, что делают параметры sep и end, и какие у них значения по умолчанию. Только погугли немного, чтобы никакую хуйню не написать.
Как то так ты можешь запилить столбцы сам. Скачай книжку AByteofPython 2.0 на русском и сиди читай, выполняй все задания. Она тебе даст базу по пайтону. Ты сейчас занимаешься какой-то хуитой непонятно откуда высратой, да ещё и не слушаешь никого. Тебе уже говорили что конструкция хуйня, тебе уже говорили что 'end' по дефолту равен '\n' и указывать этого вручную не надо, зачем ты это делаешь?
Пиздос ты жёсткий конечно, а если три столбца то три списка лишних надо? Сейчас он погуглит и изменит аргументы print'ов так, что всё будет работать
Отвечу по первой части. Вариант хостить вне РФ, как поступил я. Другой вариант использовать зарубежные прокси.
По второму вопросу могу ошибаться, но вроде как он (бот и апи) не умеет в принципе.
Нужно из двух строк получить список вланов, которые есть и в первой строке и во второй, затем вывести список этих вланов.
command1 = 'switchport trunk allowed vlan 1,3,10,20,30,100'
command2 = 'switchport trunk allowed vlan 1,3,100,200,300'
Засплитил я строки, в отдельном индексе у меня строка с вланами. Далее я опять засплитил эту строку и теперь у меня список с вланами в виде строки.
В условии говорится, что нужно вывести в виде [1,3,100], т.е. чтобы элементы были не строкой, а числом.
Проблема в том, что нужно использовать минимальное количество средств, а точнее те, что были в курсе (строковые методы, .join, .append, .extend, .pop, . remove, .index, .insert, .sort, .add, .discard, .clear, .union)
Решил я задачу доступными способами, но проблема в том, что мои элементы в итоге как были строковыми, таковыми и остались. Следовательно и сортировка не работает.
https://pastebin.com/aCQ4cPVm
Спасибо.
Нужно целое число, сделай его целым числом. Есть функция int, она пытается превратить свой аргумент в целое число, есть map, она применяет функцию к каждому элементу коллекции, есть функция sorted, она принимает коллекцию и возвращает отсортированный список.
просто используй
vlans = sorted(map(int, set(vlan1) & set(vlan2)))
вместо
vlans = list(set(vlan1) & set(vlan2))
Не, ну я косякнул конечно запилив списки слишком громоздким циклом, можно более просто - перегнав range в list или запилить генератором списка.
Но в остальном, поясни, что ты имеешь ввиду? Как тут можно это сделать обыграв только аргументы принтов? Мне на ум приходит только способ с итератором range, чтобы потом можно было элементы одного диапазона перебирать поочерёдно в цикле перебирающим элементы другого диапазона - вариант 3 на пикрил - но это сложновато для ньюфага его уровня - на его уровне он сможет понять максимум варианты с перебором элементов двух других списков в цикле for или while, и тут уже аргументы принта мало роляют, только формат строки вывода.
В общем если есть более простой вариант - предложи
Мимо-так-же-ньюфаг
Спасибо большое за ответ, map действительно выручает. Дело в том, что в условиях задачи указано использовать только пройденные в курсе инструменты. Можно было бы map заменить на цикл for, но даже его ещё не прошли.
Есть ещё способ как это реализовать? Или это опечатка в задаче?
https://pyneng.readthedocs.io/ru/latest/book/04_data_structures/index.html
Все, начиная от чисел и кончая множествами. Там ещё в каждом пункте есть подпункт, например, методы.
Почти завершил смотреть лекцию по множествам, но тут загвоздка не в них скорее всего...
Но у тебя вышла полная хуита, посмотри на вывод результата - это не два диапазона в две колонки нихуя
БампВопросу.
ideone.com/Xm9YLo
Некрасиво, зато без всякой памяти лишней и очень по простому
ideone.com/f0qblj
С памятью, но красивее.
Оба варианта, в отличие от твоих, не зависят от длины последовательностей. Мб какой-то библиотекой делается в одну строчку, хз.
Хотя я вот сейчас отредачил и убрал флаги из первого, которые там лишние были и получилось красиво
Ну так там в дополнительных материалах циклами пользуются, лол. В любом случае без цикла не выйдет перебрать элементы ИМХО.
Тоесть можно так:
vlans = set(vlan1) & set(vlan2)
vlansint = []
for i in vlans:
vlansint.append(int(i))
print(vlansint)
или так:
vlans = set(vlan1) & set(vlan2)
vlansint = [int(i) for i in vlans]
print(vlansint)
Ну там из-за for не уравнишь, а так способ нормальный, нужно просто два итера вести в while. Это по сути там внутри мой первый вариант, только не велосипедный.
Да не, там можно всего пару условий добавить, и скомпенсировать уменьшение ширины столбца при переходе от однозначных чисел к двухзначным, и разную длинну списков, лол
1. Оно не будет, как я вижу, работать, если второй промежуток намного больше первого, там цикл нужен, а не условие, во втором цикле тоже будет трай экцепт, иначе словишь ошибку пиздец ты даже не можешь разные диапазоны погонять, прежде чем постить
2. Подравниваешь ты хуево, только на один знак, дай питону табуляцию и он сам подравняет знака на три
3. Выглядит у тебя как-то хуево.
Вот как можно ideone.com/7APYXI
Но просто с циферками тут, конечно, немного проще и удобнее
Ребят, пользуйтесь стандартными инструментами из itertools и форматированием.
https://ideone.com/ymSo38
Ты невнимательно прочитал условие. Точнее, ты смешал задачу 4.3 и 4.4.
В задаче 4.4 не требуется получать список vlan из строки, там тебе уже дан список, и подразумевается, что это числа, а не строки.
Всё проще, не придумывай себе задачи, которые нельзя решить.
Модуль itertools реализован на C и продумано.
zip_longest работает с итератерами и не создаёт в памяти лишних промежуточных массивов, перерасхода памяти нет.
Он хотел сказать - что сами списки, с которыми работает инетртулс - занимают место в памяти.
А зачем там вообще преобразование в списки, если itertools нормально с итераторами работает?
Для наглядности. Можно подставить просто итераторы, но это смотрится чаще как непонятный синтетический пример. Обычно такие вещи нужны, когда ты работаешь с готовыми списками.
Ты вроде бы взрослый мужик, детей в школу отправляешь, а всё равно распиздяй. Это ответственный софт можно кодить в ночь перед дедлайном, а вот тетрадки детям надо заранее покупать. А не в воскресенье 1 сентября. Тьфу на тебя. Уходи в тред к жавасктиптерам.
Отмечали сегодня с семьёй поступление младшего брата, мне стало грустно и я занимался весь вечер тем, чем и вместо учёбы в его возрасте играл в линейку на первом попавшемся серваке с интерлюдом
ЛастБамп!
Анон, ну это классический боевичёк, без навязанных штампов, тупорылых шуток, сложного сюжета. Киану просто берёт и делает - в этом прикол этого фильма.
Отличное описание, все понятно и хорошо запоминается, вот бы официальная дока была такой же.
Я ньюфаг, но слышал, что именно пайтон использют в математических целях. И слышал, что анаконда для этого подходит
Используйте гугл, не пытайтесь разбираться в джанге на начальной стадии изучения, особенно если учите эту поебень по устаревшим мурзилкам.
>Начиная с Django 1.9, старый способ включения URL-адресов администратора устарел. Вы должны передать admin.site.urls непосредственно в url(), без вызова include():
Никогда не понимал людей, которые учат что-то по несоответствующей документации, тратят на попытки понять, что не работает огромные количество нервов, причем винят не себя, а сложнойсть фреймворка. Пиздец. Хорошо, что таких долбоебов максимум на стажера возьмут, а потом нахуй выкинут.
Ну что непонятного? Кто не может в англ мануалы, тот обречен подъедать объедки из мусорки переводчиков
сублим тоже, ну пидоское иде
Во-первых, в питоне все - ссылки, в том числе и аргументы, но сама ссылка передается по значению. Во-вторых, глупо хотеть передавать по ссылке что-то иммутабельное, когда ты можешь просто вернуть новое значение. Т.е. вместо res = do_smth(var) ты можешь res, var = do_smth(var).
Это копия, сохраненная 1 октября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.