LINUX.ORG.RU
ФорумTalks

Плохой Питон

 ,


0

5

по мотивам предыдущего треда.

Вот имеется функция.

def foo(bla):
   if bla > 10 and bla < 20:
        raise ValueError('Некорректно bla: какая-то херь!')

По данному коду:

  1. мы железно знаем что ошибку допустил код вызывающий нас
  2. поэтому правильно бросать исключение указывающее на строку нас вызывающую, а не на нас
  3. как бросить такое исключение?

хочу как в человеческом языке оператор

croak

PS: так же крайне удручает отсутствие полноценных лямбда-функций в этом говноязыке. Блин, как вы живёте без лямбд-то? только не надо мне тыкать в лямбда-оператор, я функцию хочу!

★★
Ответ на: комментарий от bread

Нету интерфейсов или миксинов. Ну значит впендюрим в строки, и ничего что выглядит лютым черезжопием, зато ООП блджад.

ЕМНИП даже в JS join нормально сделан:

> a = [1,2,3]
[ 1, 2, 3 ]
> a
[ 1, 2, 3 ]
> a.join(';')
'1;2;3'
>

а у питонячины тут еще и ексепшены гыгы:

>>> a = [1,2,3]
>>> ';'.join(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
rsync ★★
() автор топика
Ответ на: комментарий от rsync

Ну в жс вроде просто впендюрили в Array, или как оно там называется. Хотя я могу ошибаться. Фокус в том, что join должен работать с любым итератором, в том числе самописным. Не реализовывать же его для каждого класса. Ну вот в питоне сделали такую странную фигню, хотя язык позволяет спокойно работать со свободными функциями.

bread
()
Ответ на: комментарий от pawnhearts

сильная типизация - тоже зло.

если я применяю заведомо строковый оператор, зачем бросать исключения при том, что возможности привода к строкам в движке вполне имеются?

  >>> a = [1,2,3]
  >>> ';'.join(map(lambda x: str(x), a))
  '1;2;3'
  >>>
rsync ★★
() автор топика
Последнее исправление: rsync (всего исправлений: 2)
Ответ на: комментарий от pawnhearts

Потому что «явное лучше неявного».

- чем лучше?

- чем неявное!

язык должен брать на себя рутину, а не взваливать её на пользователя

rsync ★★
() автор топика
Ответ на: комментарий от bread

Ну в жс вроде просто впендюрили в Array, или как оно там называется. Хотя я могу ошибаться. Фокус в том, что join должен работать с любым итератором, в том числе самописным.

Не реализовывать же его для каждого класса.

Если уж сильно так припекает, то почему бы и нет? Можно и питон в жс превратить:

class list(list):
    map = lambda self, fn: list(map(fn, self))
    filter = lambda self, fn: list(filter(fn, self))
    join = lambda self, d: d.join(map(str, self))


print(list(range(5)).map(lambda x: x * 2)
                    .filter(lambda x: 2 < x < 8)
                    .map(lambda x: x * x).join('-'))
16-36
vvn_black ★★★★★
()
Ответ на: комментарий от vvn_black

class list(list):

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

rsync ★★
() автор топика
Ответ на: комментарий от rsync

Это же не как надо, а как можно, если сильно захотелось.

vvn_black ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.