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)

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

У меня не возникало с этим проблем последние лет 10 как минимум.

Тебе нужно разжевать «порог вхождения»? Или к чему ты написала про 10 лет?

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

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

В питоне не принято писать явные интерфейсы и абстрактные классы. Тупо не нужно. Хотя некоторые пытаются, да.

Всё же ты не доказал мне, что «питон простой язык».

Ну пиши на жаве. И тебе хорошо, и мне на душе спокойно.

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

Мимими, ты доки каждой либы хранить локально будешь? И потом искать их на диске? Интернет сейчас везде и всегда, давно нет необходимости обкладываться различной протухлости справками про запас (хотя ты наверно из тех кто будет хранить 200 гигабайт посвящённых msvc на диске, где 99% места занимает вовсе не информация).

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

Проблема в том, что ты его как раз таки не освоил,

Ты в питон тащишь абстрактные классы, называешь fcntl - высокоуровним, а я его не освоил? Девочка, это не серьёзно.

P.S. Совет, тебе мальчик-гуглеровщик: документацию к инструменту держат при себе и ищут по ней локально.

Девочка, тебе ли меня обвинять было в невнимательности? Напряги мозг и следи за разговором. Гугл тебе нужен, чтобы найти платформонезависимый способ лочить файлы. В твоей документации этого способа очевидно нет.

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

Мимими, ты доки каждой либы хранить локально будешь?

При всём неодобрении той девочки, поломаные свитчи никто не отменял. Хотя если ты пишешь на жаваскрипте, то у тебя проблемы.

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

В питоне не принято писать явные интерфейсы

Правильно, в питоне принято быдлокодить куриными лапками. А потом встречайте жуткие разношерстные интерфейсы с кишащей багами реализацией. А для небольших скриптов пытон наоборот слишком академичен. Ни т.н. богу свечка, ни т.н. чорту кочерга.

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

Мимими, ты доки каждой либы хранить локально будешь?

Хранию документацию 4 проектов + свои заметки, сниппеты и шпаргалки локально. «Профит» имею неимоверный.

И потом искать их на диске?

Для этого есть программные решения, нет никто не ищет файл вручную, ахахах. Поиск занимает 3 секунды вместе нажиманием на кнопки.

протухлости справками про запас

нет, только то что нужно и всё up to date, правда для одного проекта держу документации 3 версий назад. latest переключается симлинком. речь идет о скриптах. на питоне.

Интернет сейчас везде и всегда

Да у нас тут тоже интеренет

вы какие-то дурные все тут. я кажется понял почему у вас «питон простой язык».

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

А потом встречайте жуткие разношерстные интерфейсы с кишащей багами реализацией.

Что-то жаву явные интерфейсы не сильно спасли. А было, что и вовсе костыли вокруг них говнокодили.

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

вы какие-то дурные все тут.

Зато ты в белом пальто.

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

Речь была про это https://keras.io/layers/core/ и для либ типа буста и компании, справку локально хранить развлечение ещё то, а ведь буст не один на свете и качество док изумительным образом отличаться может.

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

Зачем терпеть GIL? Просто пиши import multiprocessing и волосы становятся мягкими и шелковистыми!

...после того, как отладишь...

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

платформонезависимый способ лочить файлы

Алло! Та строка - это гарантия однократного запуска программы, исключающая гонки и возню с номерками pid. Оно работает на линуксе (и наверняка posix, я не спициалист в этих тонкостях). Этот враппер lockf - в стандартной библиотеке питона, сама возможноть гарантии - сервис операционной системы. Как левая библиотека сделает еще лучше? Трюками с созданием директории которое получается, если правильно помню, почти везде якобы, наверное атомарным? Оно мне не надо (мне заказчик сказал давай для линукс). Или вроде был еще способ через открывание порта - тоже не надо (криво как-то да и зачем).

Что ты мне лечишь вообще. Мой довод был о том, что «питон НЕ простой язык», я объяснял почему. Я объяснял что включил в ожидание от простого языка, будеь внимателен, перечитай на что ты изначально отвечал. Если бы он был простым языком, то бы какой-нить EnsureSingleInstance сразу для всех платформ. А тем кому реально надо лочить файлы чтобы именно файлы, а не обеспечения одной копии программы - был бы сказано оно per-process или per-thread. И если бы он был «простым языком» в случае если кроссплатформенность частичная было бы четко заявлено как на линуксах, а как на нелинуксах (т.е. на freebsd например). Обрати внимание что я написал, перечитай. В питоне ничего этого нет, ни для какого из кейсов, а задача простая - это не простой язык. Я не знаю Жаву, но наверняка жависты бы подтвердили что даже там окажется всё проще для конечного программиста.

Ты мой довод не понял и начал лепить, у тебя гонор зашкаливает. Надоел.

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

Ты, блять, определись, чего ты хочешь?

Хочешь fcntl - бери fcntl. Хочешь EnsureSingleInstance - загугли либу, которая тебе тоже самое сделает под вендой и обложит всё тестами. Хочешь знать per thread или per process - так ищи в документации от операционной системы, при чём тут питон? Он тебе только враппер вокруг сисколла даёт.

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

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

я не понял. про буст не знаю, си и си++ не владею. в чем проблема-то? у меня скрипт скачивает тарболы, они работают без js, есть программа (не подскажу из вредности) которая по ним делает полнотекстовый поиск мгновенный, доступ по хоткею глобальному.

у Read the Docs, кстати раньше как-то можно было выковыривать ссылку на тарболл с html, правда они часто были сломаны. хорошо что теперь мне документация по тому проекту не нужна, вся что часто нужно - нормальная, не использует Read the Docs и скачивается с сайтов проектов.

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

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

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

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

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

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

Название начинается с двух символов подчёркивания - метод приватный. Название начинается с одного символа подчёркивания - метод protected. Это официально и поддерживается в IDE.

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

Хочешь доказать, что питон сложный - так доказывай

Я выше привел достаточно доказательств того, что называть его особенно «простым языком» - глупость. Он ничем не проще жавы, дотнета, руби, и еще много. Вообще ничем. И даже сложнее.

Ты, определись, чего ты хочешь?

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

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

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

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

Я выше привел достаточно доказательств того, что называть его особенно «простым языком» - глупость. Он ничем не проще жавы, дотнета, руби, и еще много. Вообще ничем. И даже сложнее.

Нет. Хочешь - приводи пример, где жава или дотнет проще питона. Хочешь - я тебе покажу где питон проще жавы и дотнета.

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

Опять нет. Смотреть выше.

Почему никто не повторяет как попугай тоже самое про них? А я выше объяснил почему и откуда этот миф.

Потому что большинство с тобой не согласно. Обдумай это хорошенько и не выдумывай себе больше мифов.

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

Он простой в сравнении с перлом. Или с плюсами, если любишь сравнивать несравнимое. Хотя в перле культура кодинга много выше, так что даже не знаю... Мне с перлом как то легче, несмотря на мусорный синтаксис.

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

Господа, вы бы сначала определились с терминами: простой как лёгкий порог вхождения или простой как «просто делать сложные штуки». Это, прямо скажем, не одно и то же.

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

Кстати, напомни сколько раз в дотнете совместимость сломали за последние 10 лет? Объёмы бесполезной информации совершенно несравнимые.

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

Потому что большинство с тобой не согласно.
Обдумай это хорошенько

Ну я могу только посочувствовать большинству, че.

выдумывай себе больше мифов.

так это большинство выдумало себе какой-то особый миф про питон. и я объяснил выше откуда он растет.

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

Ну я могу только посочувствовать большинству, че.

Большинству, боюсь, пофиг.

так это большинство выдумало себе какой-то особый миф про питон. и я объяснил выше откуда он растет.

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

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

Он хорошо подходит для обучения непрограммистов и детей самым азам программирования, 1) т.к. там нет скобок 2) не надо объявлять типы 3) его допустимо брать обучения т.к. он не маргинален и не угасает как руби. Кто-то на западе из этого всего уловил и запомнил только два слова: easy и python.

Порог же вхождения в новый/следующий язык для людей уже умеющих программировать и тем более программирующих несколько лет у него совершенно такой же как, скажем, у руби, пхп, java, c#. Или даже кривее.

anonymous
()

Python хороший инструмент! Я на нем на upwork заработываю с помощью веб скрапинга. Веб разработкой у меня не пошло, js, html, css слишком муторно для меня. А вот с python элегантным синтаксисом и наличием готовых либов прям в душу.

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

Python хороший инструмент!

С этим трудно поспорить.

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

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

у руби, пхп, java, c#. Или даже кривее.

Из всего этого имел дело только с Руби. Насчёт рубина, согласен. В пхп, говорят, адовая неконсистентность, нужно сильно привыкать. В яве — какая-то влияющая на мозги злая магия. Про C# не знаю.

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

Он ничем не проще жавы, дотнета, руби, и еще много. Вообще ничем. И даже сложнее

Линуксоеды же. Поставить жаву или руби сложно. А питон идет с дистрибутивом. Я вообще удивлен, как линуксоедам удалось пропихнуть питон на место перла. За си то они цепляются до последнего. Видать что-то серьезное произошло, какой-то переломный момент в истории опенсорса. А потом еще и третий пропихнули (местами)!

Учоным и прочим не-вайтишникам тупо лень писать типы и скобки — поэтому питон там без вариантов. Ну и плюс питон идет с ffi, а значит можно на раз-два интегрировать со всякими числодробилками на C/C++ — руби и джава тут в пролете

По документации в стандартной библиотеке. Там скорее не сложность, а плохая организация. На одной странице подряд идет описание концепции, примеры, публичный интерфейс модуля и мелкие детали реализации. В итоге просто устаешь читать эту дрянь и к концу главы забываешь что было в начале:). Им бы поучиться писать документацию у js-ников — там, как правило, есть четкое разделение на Basic и Advanced: после Basic можно начинать пользоваться либой, попутно обращаясь к отдельным главам из Advanced когда что-то не понятно. Плюс отдельная страничка с API. А у питона всё это в кучу на одной странице

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

И какой же язык проще питона?

Среди скриптовых, любой язык проще питона. Столько ad hoc фич и синтаксиса нет просто нигде.

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

Проще в использовании != проще как язык. Баш в сотни раз проще, но пользоваться им невозможно.

Ну и рынок порешал - питон самый популярный скриптовый язык без вендорлока (это я про JS).

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

ПИТОН ВЕСЬ ЦЕЛИКОМ ПРОЩЕ ЧЕМ ОДНА ТОЛЬКО БИЛДЕЛКА К ЭТОЙ НЕСЧАСТНОЙ СКАЛЕ

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

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

Ну и плюс питон идет с ffi, а значит можно на раз-два интегрировать со всякими числодробилками на C/C++ — руби и джава тут в пролете

С каких это пор в ruby и java нет ffi?

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

Почему-то учебники по питону, охватывающие все его фичи и тонкости, по объёму сравнимы с таковыми для крестов

Как действующий программист на Си++ и бывший программист на Python, я могу сказать, что Python ГОРАЗДО проще Си++.

Для сравнения Learning Perl всего 390 страниц.

А книга «Си++ за 21 день для анацефалов» - 10 страниц.

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

Было б пофиг, если б его только для простеньких скриптов юзали. Так нет же, django-@$янго

Назови список Django-проблем из-за отсуствия private.

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

Вопрос к критикам питона - что существует ему на замену-то?

Перл, руби, тикль, луа, джулия. Но все это нишевые языки, а пытон типа универсальный. Как выжал бейсик почти.

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

Вопрос к критикам питона - что существует ему на замену-то?

Давай я скажу что (например) пых, а ты попробуешь обосновать почему пых хуже питона в применении к «там, где он уже работает и прижился». Безотносительно наличия готовых решений, а как язык.

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

Давай я скажу что (например) пых, а ты попробуешь обосновать почему пых хуже питона в применении к «там, где он уже работает и прижился». Безотносительно наличия готовых решений, а как язык.

Python еще с версии 1 умел классы и модули, тогда как PHP3 классы умел очень плохо, а модулей или неймспейсов у него не было и не предвиделось. Это недостатки прошолого, но это то, почему PHP так и остался языком домашних страничек. Базовая библиотека у Python полнее (Batteries included), а синтаксис компактнее, что делало и делает его языком лучше подходящим для ваяния системных скриптов (но менее подходящим чем Perl). PHP почти такой же многословен как Java и при этом, имеет те же недостатки что любой язык с динамической типизацией (кроме GIL в CLI версии, хотя производительности это ему не добавляет).

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

- два фоновых потока делают свою работу - поток - планировщик по времени - действия запускаются в отдельных потоках - все синхронизировано - опциональное удаленное по http api (встроенный веб-сервер в своем потоке, смотрит наружу) - работает оно месяцами бесконечно и не течет - почему это «безотносительно наличия готовых решений» вдруг?. и всё там было нужно много всякой внешней ерунды типа pyserial

как я буду такое на php? когда-то там появился некий pthreads(со своей какой-то семантикой), но я уже не следил чем там это кончилось.

кстати даже для скриптов в системе пхп не подходит тоже, там для любой современной либы нужно инициализировать уродский psr-совместивый автолоадер (может уже впилили его в сам пхп наконец? давно не проверял)

не, пхп не катит, ни для программ ни для скриптов автоматизации системы.

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

Например Learning Python - 1500 страниц. Это простой язык? Для сравнения Learning Perl всего 390 страниц.

Learning Python — графомания, негодный пример. А Learning Perl по сути первый том букваря (как ни смешно это звучит). Там еще по ссылкам и объектам отдельная книга, advanced темка, не хухры-мухры. А camel book это вовсе монументальный талмуд. В общем перл монстр тот еще. Но хоть читать все это любопытно, а книги по питону какой-то треш.

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

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

anonymous
()
Ответ на: комментарий от anonymous
  • два фоновых потока делают свою работу
  • поток - планировщик по времени
  • действия запускаются в отдельных потоках
  • все синхронизировано
  • опциональное удаленное по http api (встроенный веб-сервер в своем потоке)
  • много всякой внешней ерунды типа pyserial
  • работает оно месяцами бесконечно и не течет

как я буду такое на php? когда-то там появился некий pthreads(со своей какой-то семантикой), но я уже не следил чем там это кончилось.

для скриптов пхп не подходит тоже, там для любой современной либы нужно инициализировать уродский psr-совместивый автолоадер (может уже впилили его в сам пхп наконец?)

не, пхп не катит, ни для программ ни для скриптов автоматизации системы.

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

Что сложного? Да всё практически. Множественное наследование [...] Объявление абстрактных классов (и абстрактных методов)

Да уж.

Кроме того, то ли в джаве то ли в сишарпе была какая-то удобная косметика на уровне синтаксиса для синхронизационных примитивов. Точно не помню, но вроде на почти любое имя можно было взять блокировку (т.е. неявно создавались ассоциированные лок-объекты). Было сделано очень красиво и удобно. В питоне такого не нашел. Ну фиг бы да с ними

Вот именно - фиг с ним.

Но что интересно: мы пишем программу тратя усилия как на обычную многопоточную (берем локи, синхронизируемся...) а получаем почти однопоточную программу из-за GIL.

Не получаем. Во-первых, IO всё равно праллелиться, во-вторых, причем здесь вообще Python как язык и причем здесь его простота? Не причем.

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

По твоему мнению.

fcntl.lockf

...и тут ты берешь Unix-специфичный вызов и его некроссплатформенность приписываешь Питону. Логика, чо.

Модули [...]

Не являются частью языка.

Документация у питона просто треш, как можно это отрицать - не понимаю, неужели не видно.

Документация у Python нормальная (да, я работал с Java и сравниваю с ней).

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