
53r63rn4r
18.02.2017
10:00:51
regex101.com

Игорь
18.02.2017
10:01:40

b0g3r
18.02.2017
10:01:45
для изистарта это +
Ну такое себе. Это хорошо, когда ты понимаешь как работают декораторы и лямбды, а так - сранная магия, которая новичку поперек горла встанет
Да и эти декораторы упираются в любом проекте, который больше чем "отвечать а на 1 команду, б на 2 команду"

Google

Игорь
18.02.2017
10:03:10

b0g3r
18.02.2017
10:03:11
И все равно логику и состояния писать)
Чудесная библиотека для быстрой разработки, но новичкам противопоказана

Johnnie
18.02.2017
10:04:29
python-telegram-bot уже был?

Игорь
18.02.2017
10:05:01

Johnnie
18.02.2017
10:05:21
Нет, а почему должно было?

b0g3r
18.02.2017
10:05:43

Маришка
18.02.2017
10:06:25

b0g3r
18.02.2017
10:06:56
Декораторы - большая любовь, чудесная красота

Маришка
18.02.2017
10:07:11
Не очень
Между
@asyncio.coroutine
def function
И
async def function
Явно видна разница в читабельности

b0g3r
18.02.2017
10:08:40
Эээ

Google

Игорь
18.02.2017
10:09:00

b0g3r
18.02.2017
10:09:16

Игорь
18.02.2017
10:10:54
Кто куда сдохло
у меня был бот на этой либе. Потом он заглох. Обновлял либу, пофик, не завелось. Ответом было от сервера, что апи телеграма не такое. Сейчас надобность в боте отпала

b0g3r
18.02.2017
10:11:26
Но как раз фича в том, что телепот дольше всех будет жить
Потому что жсон отдает и не пытается его в объекты
И если апи поменяется - никуда не упадет
(ну почти никуда)
Так что сомневаюсь что проблема в нем
Как раз pytelegrambot все в объекты

Игорь
18.02.2017
10:12:55

b0g3r
18.02.2017
10:13:43

Игорь
18.02.2017
10:13:58
под "сдохло" я имею ввиду, что никто не поддерживает уже

b0g3r
18.02.2017
10:14:41

Игорь
18.02.2017
10:15:02

b0g3r
18.02.2017
10:15:20
Я про "капот")

Игорь
18.02.2017
10:21:31
А еще там пришлось сделать такой хак:
def start():
try:
bot.polling(none_stop=True)
except Exception:
bot.stop_polling()
pass
sleep(10)
start()
иначе бот падал.

b0g3r
18.02.2017
11:01:23
К тому же с таким подходом бот все равно упадет когда превысит допустимую глубину рекурсии
Чем message_loop неугодил?

Google

b0g3r
18.02.2017
11:03:45
А, я понял чем
Я плохо читаю
Я думал мы про telepot говорим, а мы оказывается про pytelegrambotapi

Игорь
18.02.2017
11:11:09

b0g3r
18.02.2017
11:13:20
Ну скорее всего глаза тебя подвели
короче прежде чем искать ошибки в используемом продукте, стоит поискать ошибки в себе :)

Valery
18.02.2017
11:37:44
Ребят, кому подарить аккаунт с прем battlefield 3 и прем battlefield 4 ?

Denis
18.02.2017
11:38:15
Давай мне, я продам

Valery
18.02.2017
11:38:31
гоу в личку

Oleg
18.02.2017
11:45:54
Мужики, подскажите, пожалуйста, как на питоне в рамках одной функции составить как будет называться переменная, в которую сохранится значение?
Например есть функция func
Есть переменные var_a, var_b, var_c
В функции производится расчёт по объектам. Объекты перебираются списком (a, b, c). На выходе в функции получается значение, соответствующее объекту.
Как не вручную сохнарить значения в указанные функции, а циклом, генерируя название переменной в зависимости от рассматриваемого объекта?

arisu
18.02.2017
11:46:30
щито

Ray
18.02.2017
11:46:38
однако
рано я пить перестал

Oleg
18.02.2017
11:47:00
)))) хз как сформулировать яснее )

Aragaer
18.02.2017
11:47:16
вместо переменных используй словарь и генери ключи для словаря
ну или можно поступить как отморозок и писать прямо в locals()

arisu
18.02.2017
11:48:22
exec же

Oleg
18.02.2017
11:48:24
просто таких объектов много и не хочу делать простыню из if elif

Google

Oleg
18.02.2017
11:48:39
хм, ушёл читать про exec

Aragaer
18.02.2017
11:49:02
вместо a, b, c использовать my_objects['a'], my_objects['b'] и т.д.
вместо переменных var_a и прочих = словарь vars с ключами 'a', 'b' и т.п.

Artem
18.02.2017
12:41:11
Как лучше хранить пароли юзеров?
как результат key derivation function вроде pbkdf2, bcrypt, scrypt или argon2. как хэш не надо хранить. отличие в том, что kdf медленные и затратные по памяти и их труднее перебирать, а хеши быстрые и легкие, их можно подбирать по несколько сот миллионов в секунду.

Subbotin
18.02.2017
12:44:46
во-первых то что пароль долго подбирать значит что его и долго проверять. если у тебя например basic авторизация и 10000 запросов в секунду, то ты убьёшься считать 10000 итераций pbkdf2 для каждого

Pavel
18.02.2017
12:50:10

Subbotin
18.02.2017
12:52:23
Там где стоит приблизительно 250 серверов

Admin
ERROR: S client not available

Subbotin
18.02.2017
12:53:02
Один вытянет около 40 таких автоитзаций в секунду
А ещё ты забыл про соль

Игорь
18.02.2017
13:27:32

Artem
18.02.2017
13:28:41
kdf защищает при случаях вроде слива базы данных

Aragaer
18.02.2017
14:02:46
а как бы так изящненько сделать аналог join, но для списков? Есть список ['a', 'b', 'c'], хочу список ['a', '+', 'b', '+', 'c']

arisu
18.02.2017
14:03:06
+

Aragaer
18.02.2017
14:04:48
не, это-то понятно
вобщем похоже самое разумное это просто сделать ['a', '+', 'b', '+', 'c', '+'], а потом удалить последний плюс

arisu
18.02.2017
14:05:26
То что ты изобразил - это не сложение списков
Это сет
А

Google

arisu
18.02.2017
14:05:39
Тьфу

Aragaer
18.02.2017
14:05:40
эээ

arisu
18.02.2017
14:05:41
Туплю

Subbotin
18.02.2017
14:05:54

Aragaer
18.02.2017
14:06:09
я не говорил о сложении списков. Мне надо из одного списка сделать новый, в котором между каждыми двумя элементами первого стоит нужная мне константа

arisu
18.02.2017
14:07:26
Хм
reduce(lambda x, y: x + ['+', y], list, [])

Stanislav
18.02.2017
14:09:33

arisu
18.02.2017
14:10:11

Eldar
18.02.2017
14:10:57
дык zip заюзай

Маришка
18.02.2017
14:13:26

Aragaer
18.02.2017
14:14:50
то же, что и fold в хаскелле 8)

Маришка
18.02.2017
14:15:02
Еще лучше

arisu
18.02.2017
14:16:59
Только применить можно гибче.

Маришка
18.02.2017
14:25:50
А получше объяснить можно?

arisu
18.02.2017
14:32:15
Принимает на вход комбинирующую функцию и список значений
Функция должна вернуть единственное значение
Как результат обработки списка

Aragaer
18.02.2017
14:33:14
комбинирующую функцию, список значений и начальное значение
короче, sum(some_list) это reduce(operator.add, some_list, 0)
есть некий "аккумулятор" и для каждого элемента списка вызывается первая функция, принимая первым аргументом текущее значение аккумулятора, вторым текущий элемент списка. Результат присваивается в аккумулятор. Результатом всего редьюса будет окончательное значение аккумулятора