@propython

Страница 109 из 228
Aquinary
17.12.2017
18:27:44
В том смысле, что если объекту присваивается значение None, то и в условии его нужно провеерять как if (obj != None)?

Или достаточно просто сделать if (obj)?

Второй вариант более лаконичный, но хз, является ли он верным

Google
Aquinary
17.12.2017
18:36:01
is not None
Точно

Благодарю)

Vitaliy Nameless
17.12.2017
18:36:31
Один из постулатов Пайтона - явное лучше неявного

И проверка на ноун в данном случае правильнее, чем !obj

Aquinary
17.12.2017
18:39:36
А заюзать тенарник без else совсем не вариант?

Vitaliy Nameless
17.12.2017
18:41:12
Питоновский тернарник содержит else в любом случае

Aquinary
17.12.2017
18:41:49
эх

Тогда ещё вопросик

if (... is None) и if (is not None) или if (... is None) и else: за ним?

Такой же принцип: лучше явное, чем не явное?



Марк ☢
18.12.2017
05:46:37
(Qwe, asd) = xxx.split()

Vitaliy Nameless
18.12.2017
08:09:54
можно и без скобок

Google
Vitaliy Nameless
18.12.2017
08:10:13
или вообще заюзать namedtuple

Aquinary
18.12.2017
08:25:57
gotcha!

V
19.12.2017
09:06:38
#opennet #tls https://www.opennet.ru/opennews/art.shtml?num=47730

Пусть работа сама найдет тебя - https://t.me/jobsspbit

Ilya
19.12.2017
13:10:47
Супер

Новая вакансия: Дизайн и создание сайта 100 руб. https://www.avito.ru/sankt-peterburg/vakansii/dizayn_i_sozdanie_sayta_937758876

Artem
19.12.2017
13:13:38
Лол

Ашот
19.12.2017
13:41:16
Господа, всем привет! Ламеру нужна помощь!

опишу свою проблему:

пишу телеграм-бота на питоне. Нужно, чтобы передавался массив картинок с помощью метода SendMediaGroup (telegram API). В документации API написано, что необходимо передавать массив через json-запрос (A JSON-serialized array describing photos and videos to be sent, must include 2–10 items) И тут-то я посыпался. Помогите сформировать такой json-запрос

https://core.telegram.org/bots/api#sendmediagroup Вот ссылка на метод в документации

Jurij
20.12.2017
08:22:40
Ламеры

Aquinary
20.12.2017
09:04:01
Какие ламы?

Nickolai
20.12.2017
09:11:00
южноамериканские, по всей видимости

Oleg
20.12.2017
10:30:13
Просто пришел сюда, бить по рукам мудаков которые думают что в Python есть многострочные комменты

ПО РУКАМ ВАМ !"№:

Bogdan (SirEdvin)
20.12.2017
10:36:32
А как же докстринги?

Nickolai
20.12.2017
10:40:45
готовь руки

Aquinary
20.12.2017
10:47:39
Oleg
20.12.2017
10:48:09
Не получилось :)

Google
Oleg
20.12.2017
10:50:45
А вот я над вами могу))



У тебя как раз docstring (PEP 257) - все гуд ?

Aquinary
20.12.2017
10:54:22
У тебя как раз docstring (PEP 257) - все гуд ?
С гуглстиля стырил, уж очень он мне понравился)

Oleg
20.12.2017
11:03:40
Если перенести в English то будет так как нужно прям!

(здесь был фанатеющий от кода стикер)

Nickolai
20.12.2017
11:56:14
бля какой охеренный код

Oleg
20.12.2017
11:57:09
бля какой охеренный код
У меня задачи шарить код и не было, только """.



Или вот)

А зачем делают так? class SomeClass: def __init__(self, **kwargs): self.name = kwargs['name']

Bogdan
20.12.2017
13:22:18
затем же, зачем пишут любой другой говно-код. незнание, лень, копипаста... возможно в старом питоне было какое-то ограничение связанное с этим, тогда по привычке

Nickolai
20.12.2017
13:40:29
например если большое количество аргументов тогда так юзают или когда фабрика классов, где неопределенное количетсво аргументов, правда, в таком случае, лучше было бы юзать что-то вроде kwargs.get('name', 'noname')

Aquinary
20.12.2017
13:48:05
**kwargs сильная штука, люблю её. Позволяет потом вызывать методы в стиле func1(param1='value1', param2='value2'), что куда более наглядно, чем стандартная передача аргументов

Bogdan
20.12.2017
13:57:02
если их много, да. в данном примере лучше ИМХО __init__(self, name: str=None, **kwargs) Так сразу понятно, что кормить надо

и тогда выведение типов в пичарме не отвалится

def fn(x, y): ... fn(y=1, x=2)

Aquinary
20.12.2017
14:10:05
def fn(x, y): ... fn(y=1, x=2)
Можно. Но есть некоторый ряд удобств кваргов перед именными аргументами. Например, не нужно заботиться о совпадении наименований аргументов и их вызове (острая боль прямиком из си, где надо было смотреть, чтобы в хедере и в сорце список аргуметов совпадал) Так же, когда стоит формальное ограничение в 80 символов, то гораздо проще формировать словарь и далее передавать его в качестве аргумента. Ну и уже внутри самого метода - params['value1'] выглядит куда симпатичнее, чем просто 'value1'. И более понятно для читающего

Google
Bogdan
20.12.2017
14:12:33
видимо у нас разные вкусы. я работаю с пичармом и без автодополнения не очень как то. и да, fn(**{'x':1, 'y':2}) то же все еще работает.

Aquinary
20.12.2017
14:18:08
видимо у нас разные вкусы. я работаю с пичармом и без автодополнения не очень как то. и да, fn(**{'x':1, 'y':2}) то же все еще работает.
Я не профи питона, возможно в будущем мои вкусы поменяются в другую сторону, но сейчас не вижу особых недостатков в том способе, который использую :)

Разве что не всегда понятно, что должен передавать, но это правится хорошо прописанными докстрингами

Bogdan
20.12.2017
14:21:53
Разве что не всегда понятно, что должен передавать, но это правится хорошо прописанными докстрингами
вот и не достаток. с питоном3.6 многие докстринги заменяются на однострочные без описания параметров, что экономит место (модуль typing, если что). да и в докстригах нельзя (на сколько я знаю) прописать что-то вроде List[List[Union[str, int]]], чтобы пичарм это понял и правильно вывел типы.

Aquinary
20.12.2017
14:24:58
Ну, пока не сталкивался с такой необходимостью, будет проблема - будем стараться решить её :) Подход не самый лучший, но я могу всё списать на недостаток опыта. Во всяком случае пока ещё не встречал (или плохо искал?) статей, которые не рекомендуют использовать **kwargs в своих проектах?

Bogdan
20.12.2017
14:27:50
их (как и прочие плюшки питона) надо к месту использовать. я какое-то время везде лепил конструкции list(map(lambda x: ..., some_list)), хотя минимум половину стоило заменить на [... for x in some_list] банально для читабельности, так как производительность примерно одна и та же

Aquinary
20.12.2017
14:40:46
У меня есть пару мест, где они не совсем к месту. send_post(tags="#tags", content=None, text='Тест') Например, вот в отрывке выше хотелось бы убрать возможность опускать параметр content. Хотя сейчас основные "загвоздки" состоят не в этом - только недавно определился с видом того, каким образом буду оформлять вызовы самих функций: send_post( tags="#tags", content=None, text='Тест') Это не самый удачный пример, но это выглядит лучше, чем гугловский стиль (например), во всяком случае на мой взгляд. Стандарту pep-8 это так же не противоречит. Ну и на тостере (https://toster.ru/q/489488) один из ответчиков расписал, почему такой вариант является достаточно неплохим

Aquinary
20.12.2017
14:43:54
send_post(content, tags="#tags") - content обязателен
Могу написать костыль через raise и класс основанный на exception :D Но это уже содомия

Aquinary
20.12.2017
14:46:47
все уже сделано до нас
Чтобы понять устройство велосипеда... неплохо бы его и собрать :)

Bogdan
20.12.2017
14:48:45
с этим согласен, на определенном этапе надо пробовать самому написать все что видишь почти? от 3d движка, до эмулятора консоли линукса

Yaroslav
21.12.2017
08:53:25
чот у вас тухляк какой-то

в других чатах на 2к сообщений в день разводят)

Nickolai
21.12.2017
09:03:21
флуд ради флуда?

Михаил
21.12.2017
09:03:29
Nickolai
21.12.2017
09:03:42
плюсану

Страница 109 из 228