Ashot
Господа, всем привет! Ламеру нужна помощь!
Ashot
опишу свою проблему:
Ashot
пишу телеграм-бота на питоне. Нужно, чтобы передавался массив картинок с помощью метода SendMediaGroup (telegram API). В документации API написано, что необходимо передавать массив через json-запрос (A JSON-serialized array describing photos and videos to be sent, must include 2–10 items) И тут-то я посыпался. Помогите сформировать такой json-запрос
Ashot
https://core.telegram.org/bots/api#sendmediagroup Вот ссылка на метод в документации
Anonymous
Ламеры
Aquinary
Какие ламы?
Nickolai
южноамериканские, по всей видимости
λ
Просто пришел сюда, бить по рукам мудаков которые думают что в Python есть многострочные комменты
λ
λ
ПО РУКАМ ВАМ !"№:
Bogdan (SirEdvin)
А как же докстринги?
Nickolai
готовь руки
Aquinary
ПО РУКАМ ВАМ !"№:
Я буду издеваться над тобой
λ
А вот я над вами могу))
λ
λ
Я буду издеваться над тобой
У тебя как раз docstring (PEP 257) - все гуд 😉
Aquinary
У тебя как раз docstring (PEP 257) - все гуд 😉
С гуглстиля стырил, уж очень он мне понравился)
λ
Если перенести в English то будет так как нужно прям!
λ
(здесь был фанатеющий от кода стикер)
Nickolai
бля какой охеренный код
λ
бля какой охеренный код
У меня задачи шарить код и не было, только """.
λ
λ
Или вот)
λ
А зачем делают так? class SomeClass: def __init__(self, **kwargs): self.name = kwargs['name']
Bogdan
затем же, зачем пишут любой другой говно-код. незнание, лень, копипаста... возможно в старом питоне было какое-то ограничение связанное с этим, тогда по привычке
Nickolai
например если большое количество аргументов тогда так юзают или когда фабрика классов, где неопределенное количетсво аргументов, правда, в таком случае, лучше было бы юзать что-то вроде kwargs.get('name', 'noname')
Aquinary
**kwargs сильная штука, люблю её. Позволяет потом вызывать методы в стиле func1(param1='value1', param2='value2'), что куда более наглядно, чем стандартная передача аргументов
Bogdan
если их много, да. в данном примере лучше ИМХО __init__(self, name: str=None, **kwargs) Так сразу понятно, что кормить надо
Bogdan
и тогда выведение типов в пичарме не отвалится
Bogdan
def fn(x, y): ... fn(y=1, x=2)
Aquinary
def fn(x, y): ... fn(y=1, x=2)
Можно. Но есть некоторый ряд удобств кваргов перед именными аргументами. Например, не нужно заботиться о совпадении наименований аргументов и их вызове (острая боль прямиком из си, где надо было смотреть, чтобы в хедере и в сорце список аргуметов совпадал) Так же, когда стоит формальное ограничение в 80 символов, то гораздо проще формировать словарь и далее передавать его в качестве аргумента. Ну и уже внутри самого метода - params['value1'] выглядит куда симпатичнее, чем просто 'value1'. И более понятно для читающего
Bogdan
видимо у нас разные вкусы. я работаю с пичармом и без автодополнения не очень как то. и да, fn(**{'x':1, 'y':2}) то же все еще работает.
Aquinary
видимо у нас разные вкусы. я работаю с пичармом и без автодополнения не очень как то. и да, fn(**{'x':1, 'y':2}) то же все еще работает.
Я не профи питона, возможно в будущем мои вкусы поменяются в другую сторону, но сейчас не вижу особых недостатков в том способе, который использую :)
Aquinary
Разве что не всегда понятно, что должен передавать, но это правится хорошо прописанными докстрингами
Bogdan
Разве что не всегда понятно, что должен передавать, но это правится хорошо прописанными докстрингами
вот и не достаток. с питоном3.6 многие докстринги заменяются на однострочные без описания параметров, что экономит место (модуль typing, если что). да и в докстригах нельзя (на сколько я знаю) прописать что-то вроде List[List[Union[str, int]]], чтобы пичарм это понял и правильно вывел типы.
Aquinary
Ну, пока не сталкивался с такой необходимостью, будет проблема - будем стараться решить её :) Подход не самый лучший, но я могу всё списать на недостаток опыта. Во всяком случае пока ещё не встречал (или плохо искал?) статей, которые не рекомендуют использовать **kwargs в своих проектах😌
Bogdan
их (как и прочие плюшки питона) надо к месту использовать. я какое-то время везде лепил конструкции list(map(lambda x: ..., some_list)), хотя минимум половину стоило заменить на [... for x in some_list] банально для читабельности, так как производительность примерно одна и та же
Aquinary
У меня есть пару мест, где они не совсем к месту. send_post(tags="#tags", content=None, text='Тест') Например, вот в отрывке выше хотелось бы убрать возможность опускать параметр content. Хотя сейчас основные "загвоздки" состоят не в этом - только недавно определился с видом того, каким образом буду оформлять вызовы самих функций: send_post( tags="#tags", content=None, text='Тест') Это не самый удачный пример, но это выглядит лучше, чем гугловский стиль (например), во всяком случае на мой взгляд. Стандарту pep-8 это так же не противоречит. Ну и на тостере (https://toster.ru/q/489488) один из ответчиков расписал, почему такой вариант является достаточно неплохим
Bogdan
здесь все очень хорошо разжевано на примерах https://docs.python.org/3/tutorial/controlflow.html#more-on-defining-functions
Aquinary
send_post(content, tags="#tags") - content обязателен
Могу написать костыль через raise и класс основанный на exception :D Но это уже содомия
Bogdan
Aquinary
все уже сделано до нас
Чтобы понять устройство велосипеда... неплохо бы его и собрать :)
Bogdan
с этим согласен, на определенном этапе надо пробовать самому написать все что видишь почти😅 от 3d движка, до эмулятора консоли линукса
Yaroslav
чот у вас тухляк какой-то
Yaroslav
в других чатах на 2к сообщений в день разводят)
Nickolai
флуд ради флуда?
Nickolai
плюсану
Yaroslav
Дело не в нужно, а в том, что обсуждают всё подряд)
Vladimir
у нас флуд по пятницам в преддверии выходных)
Aquinary
Попробуйте проект какой-нибудь реализовать под свои цели, заодно и подтянитесь по навыкам, вытягивая нужную информацию по тем или иным вещам Я тоже новичёк, но толку от всех этих курсов без применения их на практике? А что за курс от маил ру? Текстовой или вебинар?
Aquinary
Попробуйте это посмотреть и после решите, нужен ли этот курс Вам или нет)
Aquinary
This channel is unavailable due to copyright infringement.
Aquinary
Очень разочарован в курсах в видеоформате, одно сплошное бубнение, ни дикции, ни постановки речи
Aquinary
Экспрессии тоже никакой. Вот когда учился, были преподаватели, так они объясняли, с чувством, с толком с расстоновкой. И это можно было слушать и иногда даже интересно
Aquinary
А в таких курсах будут целый час рассказывать о том, как поставить питон третий к себе на компьютер и вывести "Привет, мир!"
Aquinary
Разочарование, в общем-то. Но дело Ваше :)
Vitaly
мой путь - дип инто пайтон, кукбук питоновский, мануал фласка и джанги
Vitaly
параллельно почитываю книжку саммерфильда по паттернам и планиую почитать еще одну по работе бигдата
Vitaly
15 лет перла - это серьезно..
Vitaly
кстати, а никто не хочет на электронную книжку по пайтону скинуться?
Vitaly
я чото на нее облизываюсь, но платить за электронку 20 баксов как-то жмет слегка
Павел
Приветствую! Вопрос а кто нибудь в pyqt шарит?
Aquinary
Приветствую! Вопрос а кто нибудь в pyqt шарит?
Сможете потом рассказать как решить проблему с обфуксацией исходников, чтобы формочку не растащили на исходники потом?)
Aquinary
Очень интересно было бы послушать
Nikita
Разочарование, в общем-то. Но дело Ваше :)
Я прохожу Mega Course Python на udemy.com Очень хорошо. В отличие от geekbrains.
Aleksandr
а ты ставишь и запускаешь в одном окружении? и в тех ли версиях питона?
Aleksandr
да и импортируешь ли верно? https://pypi.python.org/pypi/future
Aleksandr
так ты проверь просто)
Aleksandr
что версии верные, что импорт правильный. Если я нашел этот самый модуль, то импорт там с future, а не future, по крайней мере так указано в доке модуля
Aleksandr
а питон сам потом как запускал? python или python3 ?
Aleksandr
а там вообще не то, там ссылка на модуль http://code.activestate.com/recipes/84317/, какой то самопальный
Aleksandr
скопируй код в файл с именем future и положи рядом
Aleksandr
там какая то реализация на тредах с таким же просто именем