Яка різниця між Python 2 та Python 3?


Відповідь 1:

Дякую за A2A!

Згідно з програмою Wiki Server Server Python Software Foundation, для кожного є переваги. Це дійсно залежить від того, що ви намагаєтесь досягти. Але висновок про те, що «Python 2.x - це спадщина, Python 3.x - це теперішнє та майбутнє мови». Дозвольте мені обговорити основні відмінності одна за одною.

  1. Друк

Висновок друку було замінено функцією print (). На Py2 друкується "привіт", а в Py3 - друк ("Привіт"). >>

2. У Python 2 є бібліотеки

Деякі бібліотеки (наприклад, PyImage) працюють лише у версіях python 2. *.

3. Ця стаття про "Середній" зрозуміла, що цей письменник Стівен А. Госс дуже захоплений тим, що не переходити на Python 3 та підтримувати Python 2 живим. Він також вказує на сторонні бібліотеки як одну з найбільших сильних сторін Python 2.

Але чому інші пропонують Python 3

«Основна перевага 3.x полягає в тому, що він знаходиться на передовій, тому всі нові функції будуть впроваджені там, а не додаються до 2.x. Інша річ, яку ви можете розглянути, - це загальний пітон майбутнього, тому, дивлячись пару років вниз, це буде зріла галузь, до якої йдуть люди ».

В основному, здається, Python 3 саме туди, куди прямує майбутнє. Але Python 2 має набагато більше документації.

Що слід вивчити новачка?

Python 3 - це приємніша і більш послідовна мова, АЛЕ підтримка сторонніх модулів є дуже обмеженою. Це, ймовірно, вірно хоча б на пару років більше. Отже, всі основні фреймворки все ще працюють на Python 2 і будуть робити це протягом значного часу. Тому, якщо ви сьогодні вивчаєте Python, ви повинні вивчити Python 2, адже саме цю версію ви дійсно використовуєте.

Це все, що я маю сказати. Ви також можете прочитати відповідь Сакіни Мірзи на те, як мені почати вивчати Python? Тут я поділився 5 кроками, які я дотримувався, щоб вивчити Python. Сподіваюся, це допомагає.

Якщо вам подобається ця відповідь, будь ласка, ЗАПАШНІТЬ. Ви також можете слідкувати за моїм обліковим записом Sakina Mirza, щоб отримати мої регулярні відповіді на Python та Data Science.


Відповідь 2:

Нещодавно мені довелося модернізувати проект з Python2 до Python3 в офісі.

Ось різниця, яку я спостерігав.

Перша і основна відмінність - це зміна функції друку.

python2: надрукувати "привіт світ" python3: print ("привіт світ")

Кодування рядків:

python2: type ('str') # stringtype (u'str ') # unicodepython3: type (' str ') # stringtype (u'str') # string

Виняток з обробки:

release.message більше не доступний у python3.In Python 3.x, str (e) повинен мати можливість перетворити будь-який виняток у рядок, навіть якщо він містить символи Unicode.

Як і в обов'язковому порядку в python3:

python2: спробуйте: надрукувати 1 / 0except ZeroDivisionError, помилка: print str (помилка) python3: спробуйте: надрукувати 1 / 0exest ZeroDivisionError як помилка: print str (помилка)

Якщо ви використовуєте бібліотеку запитів, тоді ця робота не працює в python3

python2: request.jsonpython3: запит .__ dict __ ['json']

raw_input та введення в python:

Більше не підтримується raw_input () - python3, і замість цього ми можемо ввести ()

Крім цього, всі нові функції будуть реалізовані в python3, а не додавання їх у python2.

Більше не підтримується функція xrange в python3

ми повинні замість цього використовувати функцію діапазону.

Інструмент 2to3 для перекладу коду python2 в python3.

Це гарно хороший інструмент, який економить багато розробників часу. Не потрібно проходити оновлення python3 doc для оновлення. Докладніше тут: 25.4. 2to3 - Автоматизований переклад коду Python 2 на 3

Крім цього є кілька бібліотек (певних версій), які не підтримують python3, ми їх оновлюємо. Подобається

колбу <0,10 дозант підтримує пітон3

пакет mysql-python (Оскільки немає прямої підтримки для python3), ми можемо використовувати pymysql як альтернативу.

Ось інші повноцінні ресурси: Python2orPython3 - Python Wiki

Python 2 проти Python 3

ImageSource: googleimages


Відповідь 3:

Мови програмування постійно розвиваються, оскільки розробники розширюють функціональність мови та вигадують химерність, що створює проблеми розробникам. Python 3 був представлений у 2008 році з метою полегшити використання Python та змінити спосіб обробки обробних рядків, щоб відповідати вимогам, що ставляться до мови сьогодні. Програмісти, які вперше навчилися програмувати в Python 2, іноді вважають, що нові зміни важко підлаштовуються, але новачки часто вважають, що нова версія мови має більше сенсу.

Python 3.0 принципово відрізняється від попередніх версій Python, оскільки це перший реліз Python, який не сумісний із старими версіями. Зазвичай програмістам не потрібно турбуватися про незначні оновлення (наприклад, від 2,6 до 2,7), оскільки вони зазвичай змінюють лише внутрішню роботу Python і не вимагають від програмістів змінити синтаксис. Зміни між Python 2.7 (остаточна версія Python 2) та Python 3.0 набагато вагоміше - код, який працював у Python 2.7, може знадобитися писати по-іншому для роботи в Python 3.0.

Ось деякі ключові відмінності між Python 2 та Python 3, які можуть зробити нову версію мови менш заплутаною для вивчення нових програмістів:

Друк: У Python 2 "друк" трактується як оператор, а не функція. Немає необхідності загортати текст, який ви хочете надрукувати в дужках, хоча ви можете, якщо хочете. Це може бентежити, оскільки більшість інших дій Python використовують функції, які вимагають розміщення аргументів у дужках. Це також може призвести до несподіваних результатів, якщо розмістити дужки навколо списку розділених комами елементів, які потрібно надрукувати. На відміну від цього, Python 3 явно розглядає "print" як функцію, а це означає, що ви повинні передавати потрібні елементи для друку функції в дужках стандартним способом, інакше ви отримаєте синтаксичну помилку. Деякі програмісти Python 2 вважають цю зміну дратівливою, але це може допомогти запобігти помилкам.

Пітон 2

друкувати "Python", python_version ()
друкувати "Привіт, світ!"
print ("Привіт, світ!")
друкувати "текст",; print "надрукувати більше тексту на тому ж рядку"

Вихід:

Пітон 2.7.6
Привіт Світ!
Привіт Світ!
надрукувати текст більше тексту на тому ж рядку

Пітон 3

print ('Python', python_version ())
print ("Привіт, світ!")
print ("деякий текст", end = "")
print ("надрукувати більше тексту на тому ж рядку")

Вихід:

Python 3.4.1
Привіт Світ!
якийсь текст, надрукуйте більше тексту на тому ж рядку

Ціле ділення: Python 2 розглядає числа, які ви вводите без цифр після десяткових знаків як цілі числа, що може призвести до неочікуваних результатів під час ділення. Наприклад, якщо ви введете вираз 3/2 в код Python 2, результатом оцінки буде 1, а не 1,5, як ви могли очікувати. Це тому, що Python 2 передбачає, що ви хочете, щоб результат вашого поділу був цілим числом, тому він округляє обчислення до найближчого цілого числа. Для того щоб отримати результат 1.5, вам доведеться написати 3.0 / 2.0, щоб сказати Python, що ви хочете, щоб він повернув поплавок, тобто включав цифри після десяткової крапки в результат. Python 3 оцінює 3/2 як 1,5 за замовчуванням, що більш інтуїтивно зрозуміло для нових програмістів.

Список змінних циклу розуміння списку: У попередніх версіях Python, надання змінній, яка повторюється в розумінні списку, однойменною як глобальна змінна, може призвести до зміни значення глобальної змінної - чогось зазвичай не хочеться. Ця дратівлива помилка була виправлена ​​в Python 3, тому ви можете використовувати ім'я змінної, яке ви вже використовували для керуючої змінної у вашому розумінні списку, не переживаючи про те, щоб вона витікала і не змішалася зі значеннями змінних у решті коду.

Модуль __future__: Python 3.x представив деякі не сумісні ключові слова та функції Python 2, які можна імпортувати через вбудований модуль __future__ в Python 2. Рекомендується використовувати імпортувати __future__, якщо ви плануєте підтримку Python 3.x для свій код. Наприклад, якщо ми хочемо поведінку цілочисельного поділу Python 3.x в Python 2, ми можемо імпортувати його через __future__ поділ імпорту.

Рядки Unicode: Python 2 має типи strc (ASCII), окремий unicode (), але немає типу байтів.

Тепер, у Python 3, ми нарешті маємо рядки Unicode (utf-8) та 2 байт-класи: байт та байт-масиви.

Пітон 2

друкувати "Python", python_version ()

Пітон 2.7.6


тип друку (unicode ('це як тип str str python3'))

<тип 'unicode'>


тип друку (тип b'байта не існує ')

<тип 'str'>


надрукувати "вони дійсно" + b "ті ж"

вони справді такі самі


тип друку (bytearray (b'bytearray як не дивно існує '))


Пітон 3

print ('Python', python_version ())
print ('рядки тепер utf-8 \ u03BCnico \ u0394é!')

Python 3.4.1
тепер рядки utf-8 μnicoΔé!


print ('Python', python_version (), end = "")
print ('має', введіть (b 'байти для зберігання даних'))

У Python 3.4.1 є 


print ('і Python', python_version (), end = "")
print ("також має", введіть (bytearray (b'bytearrays ')))

і Python 3.4.1 також має 


'зауважте, що ми не можемо додати рядок' + b'байтів для даних '


-------------------------------------------------- -------------------------

TypeError
Traceback (останній останній дзвінок)


 в  ()
----> 1 "зауважте, що ми не можемо додати рядок" + b'байтів для даних "




TypeError: Неможливо перетворити об’єкт 'байт' в str неявно

xrange

Використання xrange () дуже популярне в Python 2.x для створення ітерабельного об'єкта, наприклад, в розумінні for-циклу або списку / set-словник. Поведінка була досить схожа на генератор (тобто, "ледача оцінка "), Але тут іранжит xrange не є вичерпним - значить, ви могли б повторити його нескінченно.

Завдяки його «лінивій оцінці» перевагою звичайного діапазону () є те, що xrange (), як правило, швидше, якщо вам доведеться повторити його лише один раз (наприклад, у циклі for). Однак, на відміну від одноразових ітерацій, не рекомендується повторювати повторення кілька разів, оскільки генерація відбувається щоразу з нуля!

У Python 3 діапазон () був реалізований як функція xrange (), так що виділена функція xrange () більше не існує (xrange () викликає NameError в Python 3).

імпортний час



n = 10000

def test_range (n):

    повернення для i в діапазоні (n):

        пропуск



def test_xrange (n):

    для i в xrange (n):

        пропуск

Пітон 2

друкувати "Python", python_version ()



друкувати '\ ntiming range ()'
% timeit test_range (n)

надрукувати '\ n \ nставити xrange ()'
% timeit test_xrange (n)

Вихід:

Пітон 2.7.6



діапазон часу ()

1000 петель, найкраще 3: 433 мкс на цикл

час xrange ()

1000 петель, найкраще 3: 350 мкс на цикл

Пітон 3

print ('Python', python_version ())


print ('\ ntiming range ()')
% timeit test_range (n)

Вихід:

Python 3.4.1



діапазон часу ()

1000 петель, найкраще 3: 520 мкс на петлю

друк (xrange (10))

Вихід:

-------------------------------------------------- -------------------------

NameError
Traceback (останній останній дзвінок)


 в  ()
----> 1 принт (xrange (10))




NameError: ім'я 'xrange' не визначено

Це основні відмінності. Ви можете дізнатися більше про це на Python2orPython3 - Python Wiki.