Что нового в Python? Руководство по Python 3 и выше

Что нового в Python Изучение

Обновление с одной версии языка программирования Python до другой может быть настоящей проблемой. Это еще сложнее, если вы пропустили несколько промежуточных версий. Какие самые важные различия? Как они соотносятся с версией, с которой вы знакомы?

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

Python 2.x против Python 3.0

Python 3 внес много изменений, чтобы упростить синтаксис Python и добавить новые функции. Каждое из этих изменений может показаться незначительным, но вместе они могут серьезно повлиять на работу вашей программы.

В целом Python 3.x имеет:

  • Более чистый синтаксис
  • Более надежные математические и логические операторы
  • Также более универсальное поведение String
  • Более строгие правила для типов данных
  • Более современная поддержка

Далее мы рассмотрим важные синтаксические изменения, которые помогут вам адаптироваться к Python 3.

Print()

В Python 3.0 поведение печати изменилось с оператора на функцию Python. Теперь поле печати должно быть заключено в круглые скобки как параметр для правильной работы.

print "hello, world"  # Python 2

print("hello, world") # Python 3

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

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

В Python 2 вы могли печатать в той же строке с запятой в конце:

# Python 2
print 5,
print 10

В Python 3 вместо этого вы используете endаргумент ключевого слова после первой строки.

# Python 3
print(5, end =» «)
print(10)

Наконец, Python 3 сделал синтаксис для печати в файл более читабельным.

print >>open('test.txt','w'), "Printing to file" # Python 2

print("Printing to file", file = open('test.txt','w')) # Python 3

Версия Python 3 избавляется от символов `>>` в пользу более интуитивно понятного `file =`. Он также изменяет порядок аргументов в соответствии с бизнес-логикой операции, как мы бы сказали «печать ___ в файл ___» поверх «на файл ___, печать ____».

Строки в Unicode и ASCII

В Python 2 все строки по умолчанию сохраняются как ASCII. Они могут быть сохранены как Unicode, используя uперед строкой.

#Python 2
default = "This string is ASCII"
unicode = u"This string is Unicode"

В Python 3 все строки по умолчанию хранятся в Юникоде. Unicode предпочтительнее ASCII во всем мире, потому что Unicode поддерживает переменную битовую кодировку и другие наборы символов.

# Python 3
unicode = "This string is Unicode by default"

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

Целочисленное деление

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

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

Например:

Python2

# Python 2
print 7 / 5
print 7 / -5

Python3

# Python 3
print (7 / 5)
print (7 / -5)

Range против xrange

range()Функция Python 3 заменяет xrange()функцию Python2. Новая, более чистая функция дает тот же результат.

Читайте также:  Таблицы HTML: как создавать и стилизовать таблицы с помощью HTML

В Python 2 range()возвращал список, а xrange()возвращал объект-итератор xrange. В большинстве случаев они могут использоваться как взаимозаменяемые. Теперь range()поведение Python 2 было удалено.

Python2

for x in xrange(1, 5):
    print(x),

Python3

for x in range(1, 5):
    print(x),

Обработка ошибок

Python 3 теперь требует asключевое слово при реализации обработки ошибок. Это изменение отделяет синтаксис обработки ошибок от синтаксиса параметров функции и упрощает чтение кода обработки ошибок с первого взгляда. Многие разработчики, переходящие с Python 2 на Python 3.0, упускают из виду это небольшое, но важное изменение.

 # Python 2
try:  
  
    trying_to_check_error  
  
except NameError, err:  
  
    print err, 'Error Caused' 
  # Python 3
try:  
  
     trying_to_check_error  
  
except NameError as err: # new `as` keyword
  
     print (err, 'Error Caused')  

Исходный код и совместимость библиотек

Код Python 2.x может быть совместим с Python 3, но часто приводит к неожиданному поведению. Однако код Python 3 нельзя запускать с Python 2.

Хотя код Python 2.x можно портировать, библиотеки часто не могут. Перенос библиотек Python 2 на Python 3 может быть трудным и ненадежным. Поскольку все больше пользователей продолжают внедрять новые функции Python 3, большинство разработчиков больше не создают или обновляют библиотеки из Python 2.

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

Например, Django для работы требуются современные библиотеки. В результате Django больше не поддерживает версии Python 2.x с обновлениями. Django 1.11 был последней версией, поддерживающей Python 2.7. Теперь Django рекомендует вам загрузить новейшую версию языка программирования Python, чтобы получить лучшие возможности и возможности веб-разработки.

Шпаргалка по Python 3

Шпаргалка по Python 3

Python 3.7 против 3.8

Самая последняя версия Python — это версия 3.8. Независимо от того, используете ли вы Python 2 или более раннюю версию Python 3, важно понимать новейшие функции, доступные в этом мощном обновлении.

Ниже мы рассмотрим самые большие изменения с Python 3.7 до 3.8 с примерами кода и пояснениями, которые помогут вам использовать самую современную версию Python, независимо от того, с какой предыдущей версией вы работали.

Выражения присваивания

Выражения присваивания — самая большая функция, добавленная в Python 3.8. С помощью этих выражений вы можете назначать и возвращать значение переменной всего в одной строке. Назначение выражение записывается с новым оператором моржа, (:=).

Вот пример:

Python3.x

var = ‘False’
print var
# False

Python3.8

print(var := True)
# True

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

Посмотрите, насколько мы можем упростить эту более сложную программу:

Python3.x

shoppingList = list()
while True:
    current = input(«Next item: «)
    if current == «end»:
        break
    shoppingList.append(current)

Python3.8

shoppingList = list()
while (current := input(«Next item:  «)) != «end»:
    shoppingList.append(current)

Здесь мы используем оператор моржа для создания временной переменной, currentкоторая назначается как строка ввода пользователя. Он также оценивается при присвоении, чтобы увидеть, соответствует ли оно «концу». Программа повторяет цикл и добавляет новый элемент в конец списка.

Эта программа может создать весь управляемый вводом список с помощью всего 3 строк кода!

Отладка f-String

Относительно новые «f-строки» также получили обновление в Python 3.8. Напоминаем, что f-строки — это упрощенный способ печати операторов с вычисленными переменными без объединения строк вручную. Представленные в Python 3.6, они стали одной из самых популярных частей современного Python. Фактически, они считаются основной причиной того, что так много библиотек Python совместимы только с версиями после 3.6.

F-строки — это форматированный строковый литерал, распознаваемый по кавычке fперед открывающей кавычкой строки. Любое имя переменной в фигурных скобках оценивается, и его значение плавно добавляется в строку.

Взгляните на пример:

size = «small»
print( f»This is a {size} dog»)

Это позволяет легко создавать динамические строки без загроможденного синтаксиса.

Читайте также:  5 тенденций мобильной разработки iOS, которые будут доминировать в 2021 году

Начиная с Python 3.8, теперь вы можете добавить =переменную после фигурной скобки, чтобы напечатать как выражение, так и переменную.

size = «small»
print( f»{size= }»)

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

В версиях до 3.8 вам нужно было бы повторить выражение перед фигурными скобками, чтобы получить тот же эффект:

size = «small»
print (f»size = {size}»)

Вы также можете использовать выражения присваивания в f-строках для создания компактных и динамических строк:

print(f"Square has area of {(area := length**2)} perimeter of {(perimeter := length*4)}")

Только позиционные аргументы

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

Например:

>>> def parkingSpace(name, /, space= "Guest Parking"):
...     return f"{name}: {space}"
... 
>>> parkingSpace("Ryan")
# `Ryan: Guest Parking'

>>> parkingSpace("Jodie", space= "14G")
# 'Jodie: 14G'

>>> parkingSpace(name="Joe", space="9B")

 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
 TypeError: parkingSpace() got some positional-only arguments passed as
            keyword arguments: 'name'

В строке 1 мы указываем, что nameдолжно быть передано позиционно (после /), а spaceдолжно быть передано с его ключевым словом. В строке 4 мы успешно вызываем parkingSpaceи позиционируем значение nameсо значением по умолчанию для space. Также в строке 7 мы parkingSpaceснова успешно вызываем, но на этот раз мы присваиваем новое значение spaceс его ключевым словом. Наконец, в строке 10 мы вызываем parkingSpaceв третий раз, но назначаем nameего ключевым словом, а не позиционно, и получаем ошибку.

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

Используйте только позиционные аргументы, когда:

  • Заголовок аргумента произвольный, например, конструктор int, не int (x=»1″)дает больше информации, чем просто int(«1«).
  • Название аргумента также используется встроенной функцией, например self. Только позиционные аргументы устраняют путаницу в том, что передается.
  • Вы переносите код с C или сделаете это в будущем. C не принимает аргументы ключевого слова, поэтому использование только позиционных аргументов упростит перенос.

Предупреждения синтаксиса

Python 3.8 добавляет два новых предупреждения в список Python SyntaxWarnings. Первое предупреждение, которое покажет вам, когда выбрать isболее ==. Они немного отличаются, и их легко смешать. Последний проверяет равные значения, а isвозвращает True, только это одни и те же объекты.

>>> # Python 3.8
>>> version = "3.8"
>>> version is "3.8"
<stdin>:1: SyntaxWarning: "is" with a literal. Did you mean "=="?
# returns False
>>> version == "3.8"
# returns True

Другое предупреждение — это исправленный SyntaxWarning, когда вы пропускаете запятую в списке. В предыдущих версиях пропущенные запятые в списке кортежей приводили к ошибке: «Кортежи не вызываются». Это сбивало с толку пользователей Python, поскольку в большинстве случаев им не хватало запятой.

Теперь Python 3.8 правильно определяет ошибку:

>>> [
...   (1, 3)
...   (2, 4)
... ]
<stdin>:2: SyntaxWarning:'tuple' object is not callable; perhaps you missed a comma? 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: 'tuple' object is not callable

Шпаргалка по Python 3.8

Шпаргалка по Python 3.8

Что учить дальше

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

Даже если вас не интересует какая-либо конкретная функция, Python с каждым обновлением становится быстрее и требует меньше памяти. Если вы внесете изменения сейчас и начнете практиковать новый синтаксис, вы сможете продемонстрировать свои современные навыки интервьюеру!

Оцените статью
bestprogrammer.ru
Добавить комментарий