LINUX.ORG.RU

Python 3.6

 


4

5

Основные изменения

  • PEP 498: форматированные строковые литералы.
  • PEP 515: подчёркивания в числовых литералах.
  • PEP 526: синтаксис аннотаций для переменных.
  • PEP 525: асинхронные генераторы.
  • PEP 530: асинхронные компоновки.

CPython

  • Новая реализация словарей, использующая более быстрое и компактное представление аналогично тому, как это сделано в PyPy. Это позволило сократить количество памяти, выделяемой под словари, на 20-25% по сравнению с Python 3.5.
  • Добавлена возможность управлять созданием подклассов без использования метаклассов.
  • Порядок определения атрибутов класса теперь сохраняется.
  • Порядок элементов в **kwargs теперь соответствует порядку, в котором именованные аргументы были переданы при вызове функции.
  • Новая переменная окружения PYTHONMALLOC, предназначенная для отслеживания операций выделения памяти и ошибок доступа.
  • Добавлена поддержка DTrace и SystemTap.

Стандартная библиотека

Безопасность

  • Для упрощения генерации криптостойких псевдослучайных чисел добавлен модуль secrets.
  • Вызов os.urandom() на linux-системах теперь блокируется, пока пул энтропии не будет проинициализирован.
  • Модули hashlib и ssl теперь поддерживают OpenSSL 1.1.0.
  • Улучшены настройки по умолчанию для модуля ssl.
  • В модуль hashlib добавлены поддержка алгоритмов BLAKE2, SHA-3 и SHAKE, а также функция scrypt().

>>> Подробности

★★★★★

Проверено: Shaman007 ()
Последнее исправление: sudopacman (всего исправлений: 4)

Python - это лучший язык программирования! Говорю как бывший С/C++ программист с почти 20-летним стажем.

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

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

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

И что с чем я компоную?

restFiles = [os.path.join(d[0], f) for d in os.walk(".") if not "_test" in d[0]
             for f in d[2] if f.endswith(".rst")]

Перевод - говно, не отражающее сути generator comprehension - декларативного описания (трансформации).

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

https://ru.wikipedia.org/wiki/Списковое_включение

За щеку себе скомпонуй, изобретатель терминологии.

anon1984
()
Последнее исправление: anon1984 (всего исправлений: 1)

компоновки

Интересный перевод, неплохо выглядит.

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

компоновать — составлять целое из частей

Не знаю, кому как, а мне «включения списков/словарей/etc» режут слух. Здесь уж действительно не понятно, что и куда включем. Поэтому ранее я предпочитал кальку с английского. «Компоновка списков/словарей/etc» гораздо лучше выглядит.

За щеку себе скомпонуй, изобретатель терминологии.

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

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

У тебя какой-то неправильный Python, в 2.7 и 3.4:

In [1]: 'Лутц' == 'быдлокодер'[5:]
Out[1]: False

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

составлять целое из частей

Но ведь мы не составляем целое из частей, мы описываем трансформацию. Ближайшая аналогия SQL-запрос (трансформация отношений кортежей), linq из сишарпа, и т.п.

Эти твои «включения» как только не называют

Ну да, определение Васяна более авторитетно, чем определение из Википедии.

не можешь спокойно реагировать, то советую обратиться к доктору.

Закономерная реакция на попытку форсить унылый васянский креатив.

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

restFiles = [os.path.join(d[0], f) for d in os.walk(".") if not «_test» in d[0] for f in d[2] if f.endswith(".rst")]

код в стиле «смотрите как я умею!» обычно нормальные люди через code review не пропускают.

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

Может человек всю жизнь патчи Бармина пишет.

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

Посмотри в сторону golang. Забросил питон именно из-за него.

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

Но ведь мы не составляем целое из частей

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

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

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

Ничего подобного. Просто не работай в конторах где надо поддерживать легаси-код. Кто мешает?

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

Из элементов одного итерируемого объекта составляется новый

Это и есть трансформация.

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

Выражение-описатель списка/генератора/словаря/чего угодно (вот откуда взялось постижение, да?) становится частью кода. Т.е. мы включаем в свой код comprehensive description (declaration) того самого генератора. Короче, включаем инлайн-декларацию генератора. А в сишарпе мы вообще включаем sql-like код в блок.

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

А что не так-то? Я недолюбливаю питон, но эта конкретная фича ведь прекрасна. Скриптовать стало проще.

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

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

А так-то, в 90-х, питон и правда был неплохим языком для quick-n-dirty скриптов.

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

Держи нас в курсе, твое мнение очень важно.

anonymous
()

язык из табуляций который умеет хорошо одну вещь (для которой и предназначен): бросать ексепшены.

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

анонимус умеет хорошо одну вещь (для которой и предназначен): бросать какахи.

anon1984
()

Надо было им ещё официально и серьёзно ввести разные переменные окружения для разных версий. Например, не просто $PYTHONPATH, а $PYTHONPATH2 и $PYTHONPATH3. А то после настройки $PYTHONPATH для Python 3 не работает Python 2. Правда, как выясняется, Python 2 знает $PYTHONPATH2, но $PYTHONPATH сбивает его с толку. А Python 3 $PYTHONPATH3 не знает. Получается чехарда с необходимостью переопределения $PYTHONPATH при переключении между версиями Python'а.

А, вообще, по хорошему, лучше бы были конфиги в хомяке.

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

Зачем нужно настраивать $PYTHONPATH? Затем, чтобы в случае нестандартных путей они были найдены. Случаи бывают разные, но один из них таков: если хочется покрасноглазить левой пяткой и загнать весь базовый Python в /usr/lib64 минимальными усилиями. Левой пяткой в случае того же сабжевого Python 3.6.0 это делается так:

sed -i 's/\/usr\/lib\//usr\/lib64\//g' setup.py
sed -i 's/\/local\/lib\//local\/lib64\//g' setup.py
sed -i 's/lib\/python/lib64\/python/g' configure
sed -i 's/\"lib\"/\"lib64\"/g' Lib/site.py
...
sed -i 's/SCRIPTDIR=\t$(prefix)\/lib/SCRIPTDIR=\t$(prefix)\/lib64/' Makefile
Ну, а дальше можно спокойно переместить site-packages в lib64. И всё. Весь базовый Python 3.6.0 будет в /usr/lib64. Но, при этом у него будут проблемы с нахождением своих модулей, но эта ситуация исправима через
export PYTHONPATH="/usr/lib64/python3.6:/usr/lib64/python3.6/lib-dynload"
Но, об это будет спотыкаться Python 2 (см. выше).

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

Затем, что в мультилибовых системах есть необходимость разделять библиотеки как-то так:

/usr/lib - 32-х битные бинарники
/usr/lib64 - 64-х битные бинарники
Разные маинтейнеры могут давать разные имена, но суть одна.

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

Т.е. ты хочешь на 64 битной системе держать 32 битный питон? Но ты так и не объяснил, зачем это надо?

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

Нет. На 64-х битной 64-х битный. Но, в /usr/lib64. Потому, что /usr/lib для 32-х битных библиотек, а у 64-х битного Python'а они 64-х битные. А для 64-х битных библиотек /usr/lib64.

multilib, напоминаю, это когда в 64-х битной системе можно держать параллельно и 32-х битные библиотеки. И во избежание конфликтов файлов принято разделять библиотеки по разным директориям. Одна специально для 64-х разрядных библиотек, а другая - специально для 32-х разрядных.

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

Строковая интерполяция. Хитро вывернулись, надо отметить.

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

Зачем жизнь усложнять? Мне вот нравится чистый питон.

Вот например:

imgfiles = [path.join(d, x) for d,_, fn in walk("img") for x in fn if x[-4:] in [".jpg",".png",".gif","jpeg"]]

f = lambda x: path.getsize(x)

fsz = [ (x, f(x)) for x in imgfiles ]

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

fsz1 = [ (x, f(x)) for x in imgfiles[0:int(len(imgfiles)/2)] ]
fsz2 = [ (x, f(x)) for x in imgfiles[int(len(imgfiles)/2):] ]

или пусть f возвращает sha256, а не размер

Это ресурсоемкие вычисления? Нет, в самом деле?

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

А зачем это нужно то вообще?

Дебил? Установи в убунту питон 3.6 с оффсайта и попытайся позапускать скрипты с любого места системы по выбору: во встроенном питоне или в 3.6. И еще нужон 2.* для некоторых прог от дебилоидов-ретроградов, которые не могут в 3.

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

Можно быть и самому себе маинтейнером. Тем более, что и дистрибутивы бывают разные.

Кстати, Python 3.6.0 пока ещё нигде официально не опакетили. Даже в testing'е Arch'а его ещё нет.

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

Я подожду когда меинтенеры соберут

Есть тут на лоре один(?) тип, который в своём стабильным дебиане использует софт только из офф репов. Тухлый qt(для разработки), плесенелый blender и прочее. Ты такой же?

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

Мешает бессмысленность. Выполняться-то они на одном и том же ядре будут. Чо там про гил не помеха? Кому он не помеха?

С пулом из multiprocessing параллелятся, но это выглядит убого. А с тредами - видимость одна.

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

Выполняться-то они на одном и том же ядре будут

Кто тебе такое сказал? Треды питона выполняются в нативных тредах, а глобальный лок - он только для питоновского кода, у тебя же все будет в ожидании результата от системных / сишных api (точнее, перед входом в блокирующий C-api call будет выполнен релиз GIL, и тред может висеть в этом состоянии сколько угодно, без воздействия на интерпретатор), если конечно ты pure-python sha256 не впендюришь, лол. Короче, проблема надуманная.

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

Сказал опыт. И монитор загрузки процессора. Но хорошо признал, что все-таки питоний код параллелить нельзя. Теперь другая отмазка: это не тренды в Питоне говно, это просто так надо. Ясно.

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

Естественно, надо понимать, что ты делаешь. В лоб писать хайперфоманс (потому я и написал, что язык не про него, все нагруженное нужно выносить в нативный код) — результаты будут плачевные.

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

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

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

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

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

Вот он, патч для Python'а 3, который учит его смотреть в $PYTHONPATH3. Таким образом, можно настроить ему $PYTHONPATH3, и это не поломает Python 2:

sed -i 's/\"PYTHONPATH\"/\"PYTHONPATH3\"/' PC/getpathp.c
sed -i 's/\"PYTHONPATH\"/\"PYTHONPATH3\"/' Modules/getpath.c
sed -i 's/\"PYTHONPATH\"/\"PYTHONPATH3\"/' Mac/IDLE/IDLE.app/Contents/MacOS/IDLE

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

читал и его и еще остальных, эфекта 0.

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

dima1981
()

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

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