@ru_python

Страница 2034 из 9768
Roman
14.01.2017
17:10:29
С каких пор EAFP в петоне плохая практика?
https://docs.python.org/2/faq/design.html#how-fast-are-exceptions

http://stackoverflow.com/questions/8107695/python-faq-how-fast-are-exceptions

http://gerg.ca/blog/post/2015/try-except-speed/

The version using if stayed about the same, but raising an exception on 30% of queries caused a dramatic slowdown.

Google
Артур
14.01.2017
17:14:22
Roman
14.01.2017
17:24:26
если исключение случается часто - нельзя использовать try/except.

для cpython try/except в 8 раз медленнее обычного if В случае возникновения исключения

Артур
14.01.2017
17:35:34
если исключение случается часто - нельзя использовать try/except.
Можно. Просто это будет неоптимально. Тем не менее этот факт не делает технику EAFP плохой практикой в питоне

Aragaer
14.01.2017
17:35:38
все просто - если исключение произошло, то его обработка довольно дорогая

я однажды видел код примерно следующего вида - надо было вычислить минимальное из двух функций, каждая из которых использовала некоторую нетривиальную арифметику. Функции от одной переменной, которая пробегает все значения от 0 до .. условно 100

так вот в одной из функций просто есть деление на этот несчастный х. Но вблизи нуля эта функция точно больше второй

Rookie
14.01.2017
17:37:25
Интересно, это питон-проблема, или касается прочих throw new

Aragaer
14.01.2017
17:37:54
в итоге чем делать if x == 0: только вторая else: минимум из двух быстрее было сделать именно try except

Подготовка к эксепшну и выход из блока try если эксепшн не произошел -

это быстро

в плюсах так ваще реально бесплатно, т.к. вся подготовка делается на этапе компиляции. В чистом С даже вход в try/catch это чуть-чуть действий

Google
Roman
14.01.2017
17:39:31
Можно. Просто это будет неоптимально. Тем не менее этот факт не делает технику EAFP плохой практикой в питоне
судя по timeit, простейший код с try/except и делением на x даёт 132 ns для x=1 и 880 ns для x =0 тот же самый код с if 98 ns x=0 и 904 ns для try/except x=0

Aragaer
14.01.2017
17:39:56
в питоне вход в try/except и выход без эксепшна - быстро. А вот когда эксепшн, то логика обычно "ну мы все равно уже в эксепшн попали, так что спешить некуда"

for x in range(10000): try: r.append(10/x) except: r.append(0) против аналогичного с if

один эксепшн окажется быстрее, чем 10 тыс сравнений

Roman
14.01.2017
17:42:03
но на pypy эксепшены дешевые

Rookie
14.01.2017
17:42:19
"ну мы все равно уже в эксепшн попали, так что спешить некуда" - доля истины в этом есть.

Aragaer
14.01.2017
17:43:20
на pypy if тоже может быть дешевым, потому что он этот иф соптимизирует после первой итерации

развернет в r.append(0) for x in range(1, 10000): r.append(1/x)

Roman
14.01.2017
17:44:23
10000000 loops, best of 7: 67.9 ns per loop #try/except 10000000 loops, best of 7: 61.7 ns per loop #if

это в случае деления на 0

Aragaer
14.01.2017
17:46:05
общая логика примерно такая - сравнение это действие, которое ты делаешь всегда, даже когда знаешь результат заранее

try это почти всегда все ок, без лишнего сравнения, но иногда промах и вобщем сразу печаль

Roman
14.01.2017
17:46:37
10000000 loops, best of 7: 64.2 ns per loop #try/except 10000000 loops, best of 7: 64.7 ns per loop #if

это если без деления на 0

Aragaer
14.01.2017
17:47:28
pypy имеет возможность соптимизировать это добро

Roman
14.01.2017
17:47:56
pypy имеет возможность соптимизировать это добро
он вообще очень злостно оптимизирует

Aragaer
14.01.2017
17:48:17
и правильно делает

here1am
14.01.2017
17:59:30
посоны, как в пихтоне вывести спецсимволы как спецсимволы?

Google
here1am
14.01.2017
17:59:52
ну типа не интерпретировать перевод на новую строку, а вывалить его как \n

Роман
14.01.2017
18:01:23
r'\n'

b0g3r
14.01.2017
18:02:10
r'\n'
Или '\\n'

here1am
14.01.2017
18:02:32
не, данные мне подсовываются, я хочу отладить

r'data: {0}'.format(data) не работает

b0g3r
14.01.2017
18:02:48
.replace

.replace('\n', '\\n')

Aragaer
14.01.2017
18:03:41
repr не?

arisu
14.01.2017
18:03:47
лол

а причем тут это

»> 'data: {0}'.format(r'\n') 'data: \\n'

если входные данные содержат \n - тогда он и выведется как текст

b0g3r
14.01.2017
18:04:47
Либо print(repr(s))

arisu
14.01.2017
18:04:49
а не как перенос

b0g3r
14.01.2017
18:05:01
here1am
14.01.2017
18:05:05
»> 'data: {0}'.format(r'\n') 'data: \\n'
проблема в том, что то, что вместо {0} выдаётся не как raw-строка

Aragaer
14.01.2017
18:05:07
>>> print(repr("hello, world\n")) 'hello, world\n'

arisu
14.01.2017
18:05:53
так пусть сделает .replace('\n', r'\n')

here1am
14.01.2017
18:06:08
Марк
14.01.2017
18:06:27
Хе-хе. SpaceX только что посадила первую ступень на плавучую платформу.

Google
here1am
14.01.2017
18:06:40
так пусть сделает .replace('\n', r'\n')
а если там ещё \t будет а то и \b?

arisu
14.01.2017
18:06:47
конечно

Aragaer
14.01.2017
18:07:02
да, все

here1am
14.01.2017
18:07:34
да, все
ну твоим вариантом очевидно, что всё выведет как надо

Diskord
14.01.2017
18:26:52
а в fluent python пишут что EAFP это мол Python way

Denis
14.01.2017
18:27:55
Обычно так и есть

Admin
ERROR: S client not available

Denis
14.01.2017
18:28:05
Но злоупотреблять не надо

Diskord
14.01.2017
18:28:46
дошёл там до yield from

в 3.5 это же вроде заменили на await?

Denis
14.01.2017
18:29:52
await для корутин, yield from для генераторов, ничего там не заменяли

Diskord
14.01.2017
19:10:31
Где можно почитать про корутины поподробнее асинхронное программирование, и где это применяется?

Aragaer
14.01.2017
19:27:31
если не знаешь, где применяется, зачем читать?

Diskord
14.01.2017
19:28:59
потому что мне интересно

Yan?
14.01.2017
19:29:02
Расширить кругозор

Diskord
14.01.2017
19:29:22
и потому что может пригодиться, и потому что работу искать надо

Denis
14.01.2017
19:29:23
В документации тогда

Diskord
14.01.2017
19:29:27
причин много

ясно, спс

Проксимов
14.01.2017
20:54:30
Столкнулся с такой задачей: Есть два списка, содержащих две или одну заглавную или строчную буквы, например ['A', 'a'] и ['a', 'A'], нужно конкатенировать все строки во всех возможных комбинациях , тут , например должно получиться: 'Aa', 'AA', 'Aa', 'aa'. Как реализовать?

Google
Проксимов
14.01.2017
20:56:57
itertools.product
Спасибо

b0g3r
14.01.2017
21:11:45
Если в обучающем курсе - то не стоит следовать совету с итертулс, а стоит вернуться на пару уроков назад и пересмотреть видео, пытаясь понять, как оно может тебе помочь

То есть в реальности для решения этой задачи правильнее использовать product, в случае обучения - писать свой велосипед (благо он совсем несложный)

Mihail
14.01.2017
21:50:03
Приветствую. Я новичок. Посодействуете?

here1am
14.01.2017
21:50:10
нет

уходи

Mihail
14.01.2017
21:50:16
Ок.

here1am
14.01.2017
21:50:42
на самом деле надо сразу вопрос задавать

Roman
14.01.2017
21:51:40
Приветствую. Я новичок. Посодействуете?
есть тематическая группа для таких

Mihail
14.01.2017
21:51:46
Без проблем. На Питон 3.6, Window. Не могу установить pycurl.

Скажите какая... я без порблем перейду туда.

here1am
14.01.2017
21:53:30
в описании

Mihail
14.01.2017
21:53:31
Может раз я уже здесь все же обсудим мою проблему?

b0g3r
14.01.2017
21:54:09
@python_beginners

Страница 2034 из 9768