The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Развиваемая проектом openSUSE система управления контейнерам..."
Отправлено Аноним84701, 01-Фев-19 23:17 
> На Перловке или каком-то другом языке как будто нельзя так написать.

"Нельзя написать" и "понятнее, там даже отступы обязательны" -- две большие разницы.

> Какие-нибудь конкретные претензии к питону может кто озвучить?

Так выше вон, отличная демонстрация костыльного синтаксиса:
{} - dict
{()} - set
_ - конкретное значение в зависимости от контекста, более упрощенный пример:


__ = [1,2]; _= range(10);[_ for _ in _ if _ not in __]
[0, 3, 4, 5, 6, 7, 8, 9]
subset = [1,2]; some_range = range(10);[x for x in some_range if x not in subset]
[0, 3, 4, 5, 6, 7, 8, 9]

lambda - умеет только выражения, хотя ЯП императивный, что [невозможность безкостыльно присвоить или изменить значение] частенько "доставляет".  Т.е. передать "my_val = 3.14; for i in range(...) if i == my_val" в качестве анонимной функции не выйдет.

Дефолтные значения в аргументах:


__ = type({( )})

"сохраняется" между вызовами.
демонстрирую:

>>> def f(x, y=list()):

...     y.append(x)
...     print y
...    
...
>>> f(1)

[1]
>>> f(2)

[1, 2]
>>> f(1,[])

[1]
>>> f(1)

[1, 2, 1]

Непонятно, нафига ввели синтаксис **kwdargs "def x(**myargs): "
когда оно по сути является словарем (который так же можно было передать)

ну и всякие мелочи:


>>> class F(object):

...   def noself(): return "hello"
...   def __init__(self):
...     self.self = lambda: "world"
...
>>> F().self()

'world'
>>> F().noself()

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: noself() takes no arguments (1 given)

>>> 1, + 2,

(1, 2)
>>> (1,) + (2,)

(1, 2)
>>> (1,) + 2,

Traceback (most recent call last):
  File "<input>", line 1, in <module>
    (1,) + 2


"однородность" синтаксиса аж "изо всех щелей".

При попытках использовать динамизм на всю (манкипатчинг) начинают вылезать особенности реализации:


>>> d={1:2,2:3}
>>> d.__getitem__ = lambda: "d"

Traceback (most recent call last):
  File "<input>", line 1, in <module>
    d.__getitem__ = lambda: "d"
>>> int.__add__ = lambda: "d"

Traceback (most recent call last):


  File "<input>", line 1, in <module>
    int.__add__ = lambda: "d"

Это если на вскидку.
"Батарейки" в двойке вообще отдельный разговор -- советую заглянуть в asyncore, "поудивляться".

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру