Какие проблемы решают новые возможности Python 3? [закрыто]

18

Новые возможности Python 3 говорят:

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

В нем упоминается, что отличается (исправить), но не почему (проблемы). Я не нашел, в чем были проблемы. Какие проблемы решали исправления?

user712092
источник
1
Однако одна бородавка, которую они не удалили, является причиной того, что нужно передать «я» методу класса. Неудачный поезд.
Рог
1
См. Также programmers.stackexchange.com/questions/220479/…
пользователь,

Ответы:

11

Я просто назову те, которые сразу приходят на ум.

  • Аргументы только для ключевых слов: описаны в обосновании PEP.
  • nonlocalБез этого замыкания не могут перезаписывать закрытые переменные. Эта потребность время от времени возникает с декораторами и другими функциями более высокого порядка. Единственный разумный обходной путь (без переключения внешнего API), хранящий любое изменяемое состояние, которое вы хотите в изменяемом объекте, является чрезмерно уродливым.
  • Словарь и набор определений: создание словарей и наборов способом, аналогичным спискам, менее привлекательно и немного медленнее, когда выполняется с помощью генератора пониманий. Это позволяет нам использовать эти типы там, где они уместны, без дополнительных затрат. То же самое для заданных литералов, особенно для inтестов (в Python 3.2 они также оптимизированы оптимизатором глазка).
  • Восьмеричные литералы существовали в Python 2, но 0777нотация является ловушкой для тех, кто к ней не привык (в других контекстах добавление начального нуля не меняет ни значения, ни основания).
  • Двоичные литералы полезны для биты, даже больше, чем шестнадцатеричные литералы.
  • Байтовые литералы являются признаком принудительного различия между строками юникода и байтовыми строками, а строковые литералы являются юникодом. Эти изменения заставляют вас задуматься о разнице между текстовыми и неинтерпретированными двоичными данными и о кодировках. Это важно, потому что в противном случае вам нужно провести тщательное тестирование (с учетом того, что мы, англоязычные, дураки из Европы / Америки редко думаем), чтобы найти ошибки, связанные с кодированием.
  • except ex, var-> except ex as varисправляет распространенную ошибку except ValueError, IndexError(должен отлавливать оба, но только перехватывает первое и перезаписывает имя IndexErrorс перехваченным исключением).
  • Перечень понимания списка: избегайте загрязнения пространств имен и позволяйте думать о них с точки зрения выражений генератора.
  • Удалены синтаксис и модули: приблизьте нас к «Должен быть один - и желательно только один - очевидный способ сделать это». и избегает людей с плохими учебниками, придерживающихся старого и испорченного способа исправления вещей.

источник