LINUX.ORG.RU

Python 3.7

 


5

8

Спустя полтора года после выхода предыдущей мажорной версии, наконец-то состоялся релиз Python 3.7.

В этом выпуске

  • Улучшена поддержка аннотации типов
  • Data classes
  • Атрибуты модулей
  • Отладка с помощью breakpoint()
  • И многое другое

PEP 563, Отложенное исполнение аннотаций типов

Теперь аннотации разрешаются в момент вызова функции, а не в момент загрузки её кода. Это уменьшает время старта программы и делает доступным использование имён, определённых позднее самой функции (forward references).

Такой код вызывал бы ошибку в предыдущих версиях Python

class C:
    @classmethod
    def from_string(cls, source: str) -> C:
        ...

    def validate_b(self, obj: B) -> bool:
        ...

class B:
    ...

Это изменение нарушает совместимость, поэтому до прихода версии Python 4.0 пока требует

from __future__ import annotations

PEP 553, Встроенная функция breakpoint()

Отладка стала ещё проще! Допустим, у вас есть такой код

def divide(e, f):
    return f / e

a, b = 0, 1
print(divide(a, b))

В предыдущих версиях для отладки вам требовалось:

def divide(e, f):
    import pdb; pdb.set_trace()
    return f / e

В 3.7 это выглядит проще и короче

def divide(e, f):
    breakpoint()
    return f / e

Теперь запускайте ваш код:

$ python3.7 bugs.py 
> /home/gahjelle/bugs.py(3)divide()
-> return f / e
(Pdb)

По умолчанию breakpoint() просто заменяется на import pdb; pdb.set_trace(), однако это можно изменить. Скажем, вы можете использовать другой отладчик:

$ PYTHONBREAKPOINT=pudb.set_trace python3.7 bugs.py
Или отключить отладку вовсе
$ PYTHONBREAKPOINT=0 python3.7 bugs.py
ZeroDivisionError: division by zero
Или запустить IPython
$ PYTHONBREAKPOINT=IPython.embed python3.7 bugs.py 
IPython 6.3.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: print(e / f)
0.0
В конечном счёте, вы можете написать свой собственный обработчик breakpoint()

PEP 557, Data Classes

Новый модуль dataclasses делает более удобным написание классов, основная задача которых — хранить данные. Вы просто используете декоратор, и весь бойлерплейт пишется за вас.

from dataclasses import dataclass, field

@dataclass(order=True)
class Country:
    name: str
    population: int
    area: float = field(repr=False, compare=False)
    coastline: float = 0

    def beach_per_person(self):
        """Meters of coastline per person"""
        return (self.coastline * 1000) / self.population

Методы __init__, __repr__, __eq__, __ne__, __lt__, __le__, __gt__, __ge__ будут сгенерированы автоматически для класса Country

PEP 562, Кастомизация атрибутов модулей

Вы уже давно знакомы с __getattr__ для классов. Теперь этот метод может быть определён и для модулей. Типичные примеры использования: сообщить о том, что некоторая функция в модуле объявлена deprecated, а также ленивая загрузка тяжелых подмодулей.

PEP 564, Временны́е функции с наносекундным разрешением

Улучшен модуль time, добавлено несколько новых функций

time.clock_gettime_ns()
time.clock_settime_ns()
time.monotonic_ns()
time.perf_counter_ns()
time.process_time_ns()
time.time_ns()
Точность расчёта временных интервалов повышена до наносекунд

Упорядоченные словари

Порядок ключей в словарях теперь гарантированно совпадает с порядком их вставки, это добавлено в спецификацию.

>>> {"one": 1, "two": 2, "three": 3}  # Python <= 3.5
{'three': 3, 'one': 1, 'two': 2}

>>> {"one": 1, "two": 2, "three": 3}  # Python >= 3.6
{'one': 1, 'two': 2, 'three': 3}

Это работало ещё с версии 3.6, однако опиралось на внутреннюю реализацию словарей CPython, и полагаться на такой порядок было нельзя.

Новые ключевые слова: async и await

Корутины с async и await были введены в Python 3.5, однако для обратной совмесимости всё ещё можно было объявить переменные с такими именами. Теперь это будет выдавать ошибку.

>>> async = 1
  File "<stdin>", line 1
    async = 1
          ^
SyntaxError: invalid syntax

>>> def await():
  File "<stdin>", line 1
    def await():
            ^
SyntaxError: invalid syntax

Улучшение модуля asyncio

Модуль asyncio для поддержки асинхронности был представлен в Python 3.4 (введение). В Python 3.7 asyncio получил большое количество новых функций, поддержку контекстных переменных и улучшения производительности. Например, используя asyncio.run(), вы можете легко вызывать корутины из синхронного кода, не создавая event loop.

import asyncio

async def hello_world():
    print("Hello World!")

asyncio.run(hello_world())

PEP 567, Контекстные переменные

Контекстные переменные — это переменные, которые могут иметь различные значения в зависимости от окружения. Они похожи на Thread-Local Storage, в которых каждый исполняемый тред может иметь разное значение переменной, однако контекстные переменные могут иметь разные значение даже в пределах одного треда. Основная область применения — параллельные асинхронные задачи.

import contextvars

name = contextvars.ContextVar("name")
contexts = list()

def greet():
    print(f"Hello {name.get()}")

# Construct contexts and set the context variable name
for first_name in ["Steve", "Dina", "Harry"]:
    ctx = contextvars.copy_context()
    ctx.run(name.set, first_name)
    contexts.append(ctx)

# Run greet function inside each context
for ctx in reversed(contexts):
    ctx.run(greet)

Запуск скрипта приветствует Steve, Dina, и Harry в обратном порядке:

$ python3.7 context_demo.py
Hello Harry
Hello Dina
Hello Steve

Импорт файлов с данными с помощью importlib.resources

Как происходила упаковка ресурсов в пакет до Python 3.7? Обычно выбирали один из трёх способов

  • Захардкоженные пути к ресурсам
  • Поместить файлы внурь пакета и получать к ним доступ с помощью __file__
  • Использовать setuptools.pkg_resources

Первый способ не портируем. Второй подходит лучше, но если Python-пакет находится внутрь zip архива, то там не будет атрибута __file__, что создает проблемы. Третий способ работает, однако слишком медленный.

Теперь появляется ещё один способ: новый модуль importlib.resources в стандартной библиотеке. Он использует уже существующую функциональность импорта модулей для загрузки файлов. Допустим, у вас есть ресурсы внутри пакета:

data/
│
├── alice_in_wonderland.txt
└── __init__.py

Теперь вы можете получить доступ к alice_in_wonderland.txt следующим образом:

>>> from importlib import resources
>>> with resources.open_text("data", "alice_in_wonderland.txt") as fid:
...     alice = fid.readlines()
... 
>>> print("".join(alice[:7]))
CHAPTER I. Down the Rabbit-Hole

Alice was beginning to get very tired of sitting by her sister on the
bank, and of having nothing to do: once or twice she had peeped into the
book her sister was reading, but it had no pictures or conversations in
it, ‘and what is the use of a book,’ thought Alice ‘without pictures or
conversations?’

Похожая функция resources.open_binary() открывает файлы в бинарном режиме.

Оптимизации

Ни один релиз Python не обходится без набора оптимизаций. Python 3.7 не стал исключением:

  • Снижены накладные расходы при вызове многих методов из стандартной библиотеки
  • В целом методы теперь вызываются на 20% быстрее
  • Время запуска самого Python снижено на 10-30%
  • Импортирование typing теперь быстрее в 7 раз.

Различные лучшения CPython

  • Уход от ASCII как от дефолтной кодировки:
  • PEP 552, Воспроизводимые .pycs
  • Новая опция -X
    $ python3.7 -X importtime my_script.py
    import time: self [us] | cumulative | imported package
    import time:      2607 |       2607 | _frozen_importlib_external
    ...
    import time:       844 |      28866 |   importlib.resources
    import time:       404 |      30434 | plugins
    
    Вы также можете использовать -X dev для активации «режима разработки» и -X utf8 для активации режима UTF-8. Полный список опций.
  • PEP 565, улучшенная обработка DeprecationWarning

Новость на Real Python

>>> Официальный обзор изменений

★★★★★

Проверено: tailgunner ()
Последнее исправление: tailgunner (всего исправлений: 5)
Ответ на: комментарий от Rodegast

Ну это только твоё личное мнение.

Нет, это не только моё личное мнение.

В асинхронных/многопоточных программах поиск ошибок должен быть за счёт системы типов. Почитай например про Haskell, там всё сильно по другому.

Он у тебя в залог не брал и ничего тебе не должен.

Сама по себе типизация инструментом быть не может. Этим инструментом может быть компилятор который проверяет типы, но они сами по себе инструментом не являются.

Сама по себе типизация - это инструмент, который придумали для поиска ошибок.

Двойка тебе. Во первых:

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

Во вторых ты не понял задание. У тебя действительно 3 потока, но работают они последовательно, а должны работать параллельно.

Нет.

И я всё ещё жду твой код. Пока не напишешь - можешь не возвращаться.

anonymous
()
Ответ на: комментарий от Rodegast

В нём нет ничего сложного.

Вы скорее всего никогда не пытались на нем ничего путного сделать сместе с иерархией наследования.

anonymous
()
Ответ на: комментарий от Rodegast

Двойка тебе. Во первых:

Это очень удобно в литералах. Ты просто никогда не работал бинарными и шестандцатеричными числами, клоун.

anonymous
()
Ответ на: комментарий от Rodegast

Объявление абстрактных классов (и абстрактных методов).

Забей на них.

Типичный бидлокодер. Ему сказали что нужно, он будет верить. Скажут что это ненужно, будет верить. Своей головы нет, сложней хеловорда ничего не писал.

anonymous
()
Ответ на: комментарий от Rodegast

Поверь, пользователю глубоко наплевать на PEP 515.

Эпический чайник... Подсказываю, если ты левый человек в программировании, не надо болтать что якобы пользователям наплевать на фичу, которая стандарт де-факто во множестве языков программирования. И часто действительно нужна. Понятно, что твой мирок от этого треснет, но всё же.

anonymous
()
Ответ на: комментарий от RazrFalcon

2018
На лоре ругают питон и хвалят пых.

Куда катится мир...

в данном конкретном случае скорее питон катится.

anonymous
()
Ответ на: комментарий от ugoday

Правильнее говорить Питон — лёгкий язык

Ну, если не ходить дальше туториала, то да, лёгкий. Но так ведь любой язык лёгкий.

1500 страниц — это конечно много, но у питона лозунг «батарейки в комплекте». Если каждую батарейку хорошо описывать, там и больше может быть

Там не описываются батарейки, только язык. 1500 страниц описывается язык. Я так понимаю, что книгу ты не читал и стало быть с питоном знаком только по журналу мурзилка туториалу.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Я бы не был так уверен. Почему-то учебники по питону, охватывающие все его фичи и тонкости, по объёму сравнимы с таковыми для крестов. Например Learning Python - 1500 страниц. Это простой язык? Для сравнения Learning Perl всего 390 страниц.

Programming Perl - 1176 страниц. И что дальше?

Перлопрограммисты не умеют подробно и понятно писать, это ясно всем, кто видел их язык.

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

Programming Perl - 1176 страниц. И что дальше?

Половина этой книги включает обзор практики использования перла, батареек, и формальный reference material, чего в learning python нет, а если бы было, то было бы не 1500, а 3000 страниц.

не умеют подробно и понятно писать, это ясно всем, кто видел их язык

И всё равно этот язык проще питона. Хорошо только то, что большинство питонофанбоев дальше туториала не ушли и лепят наивный код, a la современный бейсик (в чём они сами в этом треде признаются и за это агитируют). Иначе код на перле показался бы тебе идеалом простоты и ясности.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Половина этой книги включает

Не читал, верю.

И всё равно этот язык проще питона. Хорошо только то, что большинство питонофанбоев дальше туториала не ушли и лепят наивный код, a la современный бейсик (в чём они сами в этом треде признаются и за это агитируют). Иначе код на перле показался бы тебе идеалом простоты и ясности.

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

anonymous
()
Ответ на: комментарий от makoven

Все, да на все. sqlite3-ruby, я так понял, не используют. Свою прослойку наваяли.

Это писали когда еще не было гема ffi.

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

Стандарты начала нулевых ничем не отличаются.

Кто-то сравнивает доки от корпораций с доками наколенных язычков, ой-вей. Для маргинальщины доки у пистона были норм.

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

Нещитово.

Чегойта? Библиотека есть, берешь и пользуешься. Питоний подход тянуть всё на что глаз Гвиды ляжет в стандартную поставку - не пример для подражания.

bread
()
Ответ на: комментарий от no-such-file

Ну, если не ходить дальше туториала, то да, лёгкий. Но так ведь любой язык лёгкий.

Нет.

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

Чегойта? Библиотека есть, берешь и пользуешься

Я ж говорю, как в ноде. Сначала был только нестабильный V8 API. Народ начал пилить биндинги на нем. Затем появился nan. Но никто не торопился на него переходить. Затем запилили node-ffi на базе nan. Потом в стандартную библиотеку пропихнули n-api, но без ffi. А значит ждем отдельную node-ffi на базе n-api (которой снова никто не будет пользоваться)

Разработчик node-sqlite двинулся на этой почве, написал свой менеджер бинарных пакетов.

Другой, не выдержав несовершенства мира, написал на чистом js обертку над sqlite3 cli. Так и озаглавив «sqlite for node.js without gyp problems»

Вот что бывает, когда делают язык, неспособный работать с dll-ками

makoven ★★★★★
()
Последнее исправление: makoven (всего исправлений: 1)
Ответ на: комментарий от makoven

Ничо, просто объясняю, почему у них лисапед. А так работает не трожь.

bread
()

ВАЖНО

Итак подытожым: Чтобы вкатиться в Python потребуется:

1) Вкурить ман на 1900 страниц (если человек не малтает, как изучать по документации , то перед этим нужно будет прочитать книги от мисье Лутца («Изучаем питон» 1200стр. «Программируем на питон том 1, 1000 страниц, „програмируем на питон том 2“, 900стр.

2) мануал по Django 1700 стр. До этого скорее всего придется пройти книгу „Learning django“ 600стр. И „Django by example“ 450 стр.

anonymous
()
Ответ на: ВАЖНО от anonymous

3) дока по ботарейка Pillow 150стр 4) django restfullframework 100 cтр. 5) requests 100 стр

anonymous
()
Ответ на: комментарий от no-such-file

Но так ведь любой язык лёгкий.

Нет, не любой. Как правило, нужно дофига чего знать, чтобы что-то сложнее хелловорлда заставить работать. Тут, конечно, можно полезать спорить мол, java как язык — особая статья, её стандартная библиотека — другое дело, nexys/ivy/maven — третье. И это формально даже в чём-то корректно, но факт остаётся фактом. В одном случае, для работы нам нужно знать и уметь заботиться о радикально большем количестве вещей, чем в другом.

Я так понимаю, что книгу ты не читал и стало быть с питоном знаком только по журналу мурзилка туториалу.

Вот, видите. В одном случае, чтобы программировать чего-то осмысленное нужно окончить университет, а в другом — прочитать журнал мурзилка. На всякий случай, как человек совершивший и то, и другое отвественно заявляю, прочитать журнам мурзилка намного _легче_.

ugoday ★★★★★
()
Ответ на: комментарий от no-such-file

Если ты про пых, то можно.

Да, действительно, в пхп7 можно указать тип возвращаемого значения. До этого было нельзя. Также, там есть ограничения.

nisemax
()
Ответ на: комментарий от ugoday

Если исключить напрашивающийся вариант, что этот господин нарочно издевается

Троллинг? Взгляни беспристрастно, на вбросах фанбоев легко поскользнуться.

«что ж тут всё сложно-то так»

Анонимус никогда не говорил, что питон сложный. Утверждалось, что питону не свойственна какая-то особенная, выдающаяся «простота», выделяющая его на фоне других языков на столько, что это можно бы считать хоть каким-то преимуществом.

nisemax
()
Ответ на: комментарий от ugoday

В одном случае, чтобы программировать чего-то осмысленное нужно окончить университет, а в другом — прочитать журнал мурзилка.

Для того чтобы программировать достаточно окончить 3 месячные программистские курсы. Университеты дают много непрактичного шлака и притом умудряются растянуть это удовольствие на 4-6 лет.

Высшее программерское образование нужен только для учёных.

anonymous
()
Ответ на: комментарий от no-such-file

так ведь любой язык лёгкий

Нет, он правильно сказал. Словарь(или память пользователей) русского языка не имеет достаточно точных слов для детализации понятия «простой». Питон - сложен из довольно большого количества всякой всячины и в этом смысле «сложный»=«не простой». Он же (обычно) «простой» в сопровождении(скажем «не трудный»?). Он же «лёгкий» («не тяжёлый»?) как в физике, по кол-ву требуемой для начала движения работы. Ещё, наверное, есть несколько полезных измерений.

И они все почти ортогональны/независимы, и не универсальны. ad absurdum: unlambda простой=несложный - весь состоит из несколькиих функций, описываемых на одной странице. «тяжёлый» - что-то на нём написать нужен таки универ, наверное. И «трудный» - понять потом нереально(если верить автору, я не пробовал). С - несложный, довольно тяжёлый, трудный. Perl - сложный, трудный, средней тяжести. Ну и т.д.

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

PS: порывшись в словаре

ещё нашёл. Простой-прихотливый(java?) - для определения требовательности к инструментам(навороченные редакторы, отладчики, etcы), без которых слишком трудно. Простой-замысловатый(haskell?) - по «высоте» используемых абстракций.

DonkeyHot ★★★★★
()
Последнее исправление: DonkeyHot (всего исправлений: 1)
Ответ на: комментарий от ugoday

В одном случае, для работы нам нужно знать и уметь заботиться о радикально большем количестве вещей, чем в другом

Нет, не нужно. Продолжая экскурс в литературу, Learning Java всё того же издательства - 970 страниц. В это включается обзор стандартной библиотеки, сервлеты, JavaBeans и даже Swing и работа с мультимедиа.

отвественно заявляю, прочитать журнам мурзилка намного _легче_

А я тебе ответственно заявляю, что прочитать 970 страниц легче, чем 1500 + доки к батарейкам.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Чтобы успешно писать на питоне достаточно прочитать 1 главу любого учебника и открыть для себя команды dir() и help() в интерактивной сессии. Где твой бог теперь? Для вебни ещё по шаблонизаторам справку. Вообще хватит мерить простоту изучения графоманскими высерами, бесите уже.

anonymous
()
Ответ на: комментарий от DonkeyHot

С - несложный, довольно тяжёлый, трудный. Perl - сложный, трудный, средней тяжести. Ну и т.д.

У perl есть такой слоган «make the easy things easy, and the hard things possible». Я считаю что на любой язык нужно смотреть с этого ракурса, потому что существуют сложные задачи и нет ничего, что могло бы их упростить. Никакие магические языки не сделают трудную задачу лёгкой. Поэтому когда кто-то утверждает, что питон - лёгкий, это означает что этот кто-то просто не решает тяжёлых задач.

А теперь если подумать, для чего в питон напихали столько всего, что учебник получается минимум в 2 раза толще любого другого (кроме разве что крестов)? Чтобы лабать на нём простенькие скриптики для которых достаточно 10% от всех возможностей? Вообще тут в теме не зря вспоминали PL/I, питон действительно продолжатель этих традиций «мы сделаем язык программирования максимально похожим на английский» путём запихивания в него сахара на все случаи жизни. Вот что понимается, когда говорят что питон easy to learn. Как показала история, это порочная практика ведущая в тупик, т.к. язык постепенно превращается в переусложнённый, неповоротливый кусок говна. Python way?

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от anonymous

Чтобы успешно писать на питоне достаточно прочитать 1 главу любого учебника и открыть для себя команды dir() и help() в интерактивной сессии

Уверен, что ты и многие другие питонофанбои так и делают. Т.е. всё программирование сводится к тому чтобы дёргать suprer_lib.foo(«hello world») в разных вариациях. Максимум - скопипастить пример из доков.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Чтобы успешно писать на питоне достаточно прочитать 1 главу любого учебника и открыть для себя команды dir() и help() в интерактивной сессии

Уверен, что ты и многие другие питонофанбои так и делают

Все так делают. Даже ты.

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

Все так делают

Нет не все, это ложь.

Даже ты

В том числе я так не делаю. Так что это тоже ложь.

PS: если ты не готов конструктивно что-то обсуждать, зачем набрасывать? Чешется что ли?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

питон действительно продолжатель этих традиций «мы сделаем язык программирования максимально похожим на английский» путём запихивания в него сахара на все случаи жизни.

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

anonymous
()
Ответ на: комментарий от no-such-file

Все так делают

Нет не все, это ложь.

Все. Но некоторые стесняются признаться.

если ты не готов конструктивно что-то обсуждать, зачем набрасывать?

Ты же набрасываешь, с чего бы мне не набросить.

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

Ты же набрасываешь, с чего бы мне не набросить

Ну я думал, что ты не всегда ведёшь себя как мартышка. Ладно, сдаюсь, больше не буду даже пытаться разглядеть в тебе человека.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Ну я думал, что ты не всегда ведёшь себя как мартышка.

Не всегда. Но если оппонент ведет себя так, я тоже.

tailgunner ★★★★★
()
Ответ на: комментарий от no-such-file

Т.е. всё программирование сводится к тому чтобы дёргать suprer_lib.foo(«hello world») в разных вариациях.

Если задача решаема простым путем, то к чему сложности?

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

Т.е. я хочу услышать о сложности языка Python, а ты рассказываешь мне, что у языка Python в stdlib есть модули, которые по твоему мнению, криво спроектированы

Они не только заведомо криво спроектированы. Питонные модули сломаны, т.е. их нельзя использовать для того, для чего они заявлены. Их документация непона, расплывчата и просто ложна. И даже разработчики не знают, как оно должно работать, вынуждены с переменным успехом сами разбираться в этом бардаке и удивляются бессмыслице в документации,, сверяются с Java, не знают как же об этом «всё сломано» написать в документации и вообще надеются на то, что это просто все равно никто не будет использовать так т.е. можно и дальше так все оставить в сломанном состоянии и не поднимать этот вопрос.

А ты всё продолжаешь передергивать и изворачиваться, пытаешься показаться «умным».

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

Чтобы успешно писать на питоне достаточно прочитать 1 главу любого учебника и открыть для себя команды dir() и help()

Так невозможно ничего написать. Это глупости.

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

Высшее программерское образование нужен только для учёных.

Нет. Высшее образование нужно для нормальных инженеров.

Другое дело, что основная масса вакансий на IT-рынке труда не инженеры, а простые техники. Тут действительно будет достаточно какого-нибудь ПТУ для кодеров.

anonymous
()
Ответ на: комментарий от no-such-file

А теперь если подумать, для чего в питон напихали столько всего, что учебник получается минимум в 2 раза толще любого другого (кроме разве что крестов)?

Вы так зациклились на размере этого учебника, что складывается впечатление, будто вас им, извините, били.

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

Питонные модули сломаны, т.е. их нельзя использовать для того, для чего они заявлены.

Ты делаешь слишком далеко идущие выводы из своего опыта. Использовать их можно и люди используют.

А ты всё продолжаешь передергивать и изворачиваться, пытаешься показаться «умным».

Я утверждаю очевидные факты. Я тут Капитан Очевидность.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от no-such-file

потому что существуют сложные задачи и нет ничего, что могло бы их упростить

Изначально почти любая задача сложная. Простой она становится, когда ты научаешься собирать её решение из небольшого числа готовых компонент(которые должны тоже откуда-то взяться, не худший вариант - в результате того же процесса). Соответственно, решает набор компонентов(который мы называем батарейками и не обсуждаем), и способность языка их клеить(и тут они заметно отличаются), ну и способности человеков складывать кубики(тоже не совсем офтопик). Второе, наверное, влияет на скорость появления/развития первого, но там ещё много факторов, оценивать второе по первому трудно, хотя кореляция должна наблюдаться.

для чего в питон напихали столько всего

Очевидно же. «Сложность»(в указанном выше смысле) - забота автора и пользователей не волнует. Возможность «упростить»(в любом из других перечисленных смыслов) за его счёт жизнь клиентов - целесообразна(ибо их больше и они не такие ловкие). Вероятно потому питон - за счёт сложности внутри простой «снаружи» - популярен.

не решает тяжёлых задач

Известный факт - подавляющее большинство задач тривиальны. Если дать средство их решения в руки любителей, время специалистов можно будет сконцентрировать на менее тривиальных(и им будет не так нудно). win-win же.

постепенно превращается в переусложнённый, неповоротливый кусок говна

Общая тенденция в софтостроительстве, не только в языках. После решения очевиднополезных и срочнонужных задач остаются только непонятнозачемные. «надо же с ними что-то делать».

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

делаешь слишком далеко идущие выводы

Нет. Это не я делаю выводы, это то, что пишут сами разработчики на bugs.python.org.

люди используют

Потому что дареному коню в зубы не смотрят. Я лично и за это им благодарен.

Я тебя понял, язык со расплывчатой и ложной документацией на сломанные модули - простой. Т.е. многие языки простые, а этот - еще проще. Ок. Обскурная машинерия в виде metaclass=abc.ABCMeta это тоже делает его более простым чем все остальные. ОК.

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

Питонные модули сломаны, т.е. их нельзя использовать для того, для чего они заявлены.

Ты делаешь слишком далеко идущие выводы из своего опыта.

это то, что пишут сами разработчики на bugs.python.org.

Да? И у тебя есть ссылка, чтобы это подтвердить, или ты просто врешь?

Обскурная машинерия в виде metaclass=abc.ABCMeta это тоже делает его более простым чем все остальные.

Ужас какой. Приведи пример на другом языке, где метаклассы - не «обскурная машинерия».

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

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

https://bugs.python.org/issue13322

According to the the documentation, BufferedReader.read() and BufferedWriter.write() should raise io.BlockingIOError if the file is in non-blocking mode and the operation cannot succeed without blocking. However, BufferedReader.read() returns None

This is the documentation for BufferedReader.read(): Read and return n bytes, or if n is not given or negative, until EOF or if the read call would block in non-blocking mode. This sentence is complete gobbledygook, and it makes no mention of what should happen if nothing can be read in non-blocking mode.

Still, non-blocking behavior is incorrectly specified in the docs and is inconsistent (as investigated by Martin). And obscure errors like in my example or in Issue 13858 show that I/O stack is confused too. To prevent people from tripping on it, would you consider recommending against usage of I/O stack for non-blocking operations in io module docs?

Of course, we may also question whether it's useful to use buffered I/O objects around non-blocking file descriptors; if you do non-blocking I/O,

The non-blocking behaviour of BufferedReader matches the RawIOBase documentation better than its own documentation. I’m not sure which way it should be fixed. Is this a documentation bug or an implementation bug?

The read() test was added in revision 21233c2e5d09 in 2007, with a remark about a “tentative decision to drop nonblocking I/O support from the buffering layers”.

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

Метаклассы это сложно и не считаю что язык с этой чушью - простой

А. Ну так бы и сказал.

This sentence is complete gobbledygook,

Ииии... что? Недавно было «Питонные модули сломаны, их нельзя использовать для того, для чего они заявлены», а сейчас предъявляешь неполную документацию, как же так.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

ты прочитай всё полностью по ссылке.

readline до сих пор сломан для неблокирующих. и вообще этот модуль не имеет смысла для них, и тем не менее в документации делается в вид, что он с неблокирующими таки работает, хотя как выяснилось давно уже известно, что не должен.

Питонные модули сломаны, их нельзя использовать для того, для чего они заявлены

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

anonymous
()
Ответ на: комментарий от ugoday

зациклились на размере этого учебника

Потому что это объективный показатель сложности языка, а не мнение какого-то Васяна с ЛОРа. Чем больше требуется объяснений, тем сложнее предмет, это же очевидно. А то ведь твой коллега уже совсем в метафизику ударился, у него уже питон простой потому что он сложный. Диалектика бытия питона.

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