Latest web development tutorials

разница Python2.x с версии 3 .x

3.0 версии Python, часто упоминается как Python 3000 или просто Py3k. Что касается более ранней версии Python, это крупное обновление.

Для того, чтобы не принести слишком много нагрузки, Python 3.0 не учитывает при разработке обратной совместимости.

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

Для того, чтобы заботиться о существующей программе, Python 2.6 в качестве временной версии 2.x на Python с использованием базового синтаксиса и библиотек, принимая во внимание миграцию в Python 3.0 и Python 3.0 позволяет использовать часть синтаксиса функции.

Новая программа рекомендуется использовать Python 3.0 Python версии синтаксиса.

Если среда выполнения не может установить Python 3.0 или сама программа не поддерживает использование сторонних библиотек Python 3.0. В настоящее время не поддерживает сторонние библиотеки Python 3.0 скручены, py2exe, PIL и тому подобное.

Большинство библиотек сторонних производителей пытаются Python 3.0 совместимой версии. Если не сразу использовать Python 3.0, также было рекомендовано разработать совместимой версии Python 3.0 программы, а затем использовать Python 2.6, Python 2.7 выполняется.

Изменения в Python 3.0 в основном в следующих областях:


функция печати

оператор печати исчезает, заменяется функцией печати (). поддержка Python 2.6 и Python 2.7 в части эта форма синтаксиса печати. В Python 2.6 и Python 2.7 внутри, три формы эквивалентны:

print "fish"
print ("fish") #注意print后面有个空格
print("fish") #print()不能带有任何其它参数

Тем не менее, Python 2.6 фактически поддерживает синтаксис новой печати ():

from __future__ import print_function
print("fish", "panda", sep=', ')

Unicode

Python 2 были ASCII ул () тип, юникода () один, а не тип байтов.

Теперь, в Python 3, мы, наконец, Unicode (UTF-8) строку и байт класса: байт и ByteArray,.

Поскольку Python3.X исходный файл по умолчанию UTF-8 кодировке, что делает следующий код является законным:

>>> 中国 = 'china' 
>>>print(中国) 
china

Python 2.x

>>> str = "我爱北京天安门"
>>> str
'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
>>> str = u"我爱北京天安门"
>>> str
u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'

Python 3.x

>>> str = "我爱北京天安门"
>>> str
'我爱北京天安门'

разделение

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

Во-первых, он / Отдел:

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

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

Python 2.x:

>>> 1 / 2
0
>>> 1.0 / 2.0
0.5

Python 3.x:

>>> 1/2
0.5

Для // деление, это деление называется пол деление, результат будет автоматически разделение операции пол одинакова в Python 2.x и 3.x в питона.

Python 2.x:

>>> -1 // 2
-1

Python 3.x:

>>> -1 // 2
-1

Обратите внимание, что не отбросить дробную часть, но продолжать операции пол, если вы хотите, чтобы перехватить дробную часть, вам нужно использовать функциональный модуль Math TRUNC

Python 3.x:

>>> import math
>>> math.trunc(1 / 2)
0
>>> math.trunc(-1 / 2)
0

ненормальный

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

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

Синтаксис (кроме exc1, exc2) как вар может перехватывать исключения несколько категорий. Python 2.6 имеет поддержку обоих синтаксиса.

  • 1. 2.x эпохи, все типы объектов, которые могут быть брошены непосредственно в 3.x эпоху, только унаследованные от объектов BaseException могут быть заброшенные.
  • 2. 2.x рейз заявление бросает запятую для разделения типов объектов и параметров, 3.x погашенных эту замечательную формулировку напрямую вызвать конструктор бросает объект может быть.

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


xrange

Создание итерации объекта в Python 2 в использовании xrange () является очень популярным. Например: для цикла или списка / коллекции / словаря постижений.

Эта производительность генератора очень изображения (например. "Ленивые вычисления"). Но xrange-итерируемый бесконечно, неограниченные средства, которые могут перемещаться.

Из-за своей ленивой оценки, а не только тогда, когда вы не можете пройти его один раз, xrange () диапазон соотношения функции () быстрее (например, для циклов). Тем не менее, по сравнению с одной итерации, итерации не рекомендуется повторять несколько раз, так как генератор с нуля каждый раз.

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

import timeit

n = 10000
def test_range(n):
    return for i in range(n):
        pass

def test_xrange(n):
    for i in xrange(n):
        pass   

Python 2

print 'Python', python_version()

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

print '\n\ntiming xrange()' 
%timeit test_xrange(n)

Python 2.7.6

timing range()
1000 loops, best of 3: 433 µs per loop


timing xrange()
1000 loops, best of 3: 350 µs per loop

Python 3

print('Python', python_version())

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

Python 3.4.1

timing range()
1000 loops, best of 3: 520 µs per loop
print(xrange(10))
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-5-5d8f9b79ea70> in <module>()
----> 1 print(xrange(10))

NameError: name 'xrange' is not defined

Восьмиштырьковый буквальное представление

Восьмеричное число должно быть записано 0o777, оригинальная форма 0777 не может быть использован, должен быть записан в двоичном 0b111.

Добавлена ​​функция бункер () используется для преобразования целое число в двоичную строку. Python 2.6 имеет поддержку обоих синтаксиса.

В Python 3.x и восьмеричном буквального только в одну сторону, то есть 0o1000.

Python 2.x

>>> 0o1000
512
>>> 01000
512

Python 3.x

>>> 01000
  File "<stdin>", line 1
    01000
        ^
SyntaxError: invalid token
>>> 0o1000
512

операторы неравенства

Python 2.x не означает, что существует два способа написания! = И <>

Python 3.x уронить <> только! = Путь писать, но, к счастью, я никогда не использую <> диета


Удалены выражение `` Repr

Python 2.x в обратные кавычки `` Repr функция эквивалентна роли

Python 3.x отказаться от `` обозначения, допускается только магнезии функции, целью этого является, чтобы сделать код выглядит более ясно, что? Но я чувствую, с возможностью Repr редко, как правило, только тогда, когда он используется в отладке, большую часть времени, или использовать функцию ул строка, описывающая объект.

def sendMail(from_: str, to: str, title: str, body: str) -> bool:
    pass

Множество модулей переименовываются (согласно PEP8)

Старое название новое наименование
_winreg WinREG
ConfigParser ConfigParser
copy_reg copyreg
очередь очередь
SocketServer SocketServer
магнезии reprlib

модуль StringIO теперь включен в новый модуль ввода-вывода. новые, md5 gopherlib модули будут удалены. Python 2.6 имеет поддержку нового модуля ввода-вывода.

HTTPLIB, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib быть включены в пакет HTTP.

Отмена EXEC заявление, только функцию Exec (). Python 2.6 имеет функцию поддержки EXEC ().


5. Типы данных

1) Py3.X удалены длинный тип, в настоящее время существует только одно целое --int, но он ведет себя как версии 2.х длинный

2) Добавлен байт типа, соответствующий версии 2.х серии восемь, определяют буквальным метод байт выглядит следующим образом:

>>> b = b'china' 
>>> type(b) 
<type 'bytes'> 

ул объекты и байты объекты могут использовать .encode () (ул -> байт) или .decode () (байт -> ул) метод друг в друга.

>>> s = b.decode() 
>>> s 
'china' 
>>> b1 = s.encode() 
>>> b1 
b'china' 

3) ДИКТ из .keys (),. Элементы и .values ​​() метод возвращает итератор, в то время как предыдущие iterkeys () и другие функции отбрасываются. В то же время там удалены dict.has_key (), заменить его в нем.