Latest web development tutorials

Perbedaan Python2.x dengan versi 3 .v

3.0 versi Python, sering disebut sebagai Python 3000, atau hanya Py3k. Sehubungan dengan versi sebelumnya Python, ini adalah upgrade besar.

Agar tidak membawa terlalu banyak beban, Python 3.0 tidak dipertimbangkan dalam desain kompatibilitas ke bawah.

Bagi banyak program yang dirancang versi sebelumnya Python tidak akan melakukan dengan benar pada Python 3.0.

Dalam rangka untuk mengurus program yang ada, Python 2.6 sebagai versi interim 2.x Python menggunakan sintaks dasar dan perpustakaan, dengan mempertimbangkan migrasi ke Python 3.0 dan Python 3.0 memungkinkan penggunaan bagian dari sintaks fungsi.

Program baru dianjurkan untuk menggunakan Python 3.0 Python sintaks versi.

Kecuali lingkungan eksekusi tidak dapat menginstal Python 3.0 atau program itu sendiri tidak mendukung penggunaan pihak ketiga perpustakaan Python 3.0. Saat ini tidak mendukung perpustakaan pihak ketiga Python 3.0 adalah twisted, py2exe, PIL dan sejenisnya.

Kebanyakan perpustakaan pihak ketiga yang mencoba untuk Python versi 3.0 kompatibel. Jika tidak segera menggunakan Python 3.0, juga dianjurkan pengembangan kompatibel versi Python 3.0 dari program, dan kemudian menggunakan Python 2.6, Python 2,7 dilakukan.

Perubahan Python 3.0 terutama dalam bidang berikut:


fungsi print

Pernyataan cetak hilang, digantikan oleh print () fungsi. Python 2.6 dan Python 2.7 dukungan sebagian bentuk sintaks cetak. Python 2.6 dan Python 2.7 di dalam, tiga bentuk yang setara:

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

Namun, Python 2.6 telah benar-benar mendukung sintaks cetak baru ():

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

Unicode

Python 2 memiliki ASCII str () jenis, unicode () saja, bukan tipe byte.

Sekarang, di Python 3, kami akhirnya memiliki Unicode (utf-8) string dan byte kelas: byte dan bytearrays.

Karena Python3.X file sumber standar utf-8 encoding, yang membuat kode berikut adalah legal:

>>> 中国 = '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
'我爱北京天安门'

divisi

Divisi python dalam bahasa lain selain sangat high end, ada satu set yang sangat kompleks aturan. Python di divisi dengan dua operator, dan / //

Pertama, / Divisi:

Dalam python 2.x / divisi seperti kebanyakan dari kita yang akrab dengan bahasa, seperti Java ah ah C mirip dengan hasil dari pembagian integer itu integer, bagian pecahan benar-benar diabaikan, desimal divisi floating point akan tetap menjadi bagian dari get hasil angka floating-point.

Dalam 3.x python / divisi tidak lagi melakukannya, dan untuk pembagian antara bilangan bulat, hasilnya akan pelampung.

Python 2.x:

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

Python 3.x:

>>> 1/2
0.5

Untuk divisi //, divisi ini disebut divisi lantai, hasilnya akan divisi otomatis operasi lantai yang sama di python 2.x dan python 3.x di.

python 2.x:

>>> -1 // 2
-1

python 3.x:

>>> -1 // 2
-1

Perhatikan bahwa tidak membuang bagian pecahan, tetapi untuk membawa di lantai operasi, jika Anda ingin mencegat bagian pecahan, Anda perlu menggunakan fungsi matematika modul trunc

python 3.x:

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

abnormal

Pengolahan di Python 3 juga perubahan sedikit abnormal, Python 3, kita sekarang menggunakan sebagai kata kunci.

Sintaks untuk menangkap pengecualian dibuatkecuali exc, var berubah kecuali exc sebagai var.

Sintaks kecuali (exc1, exc2) sebagai var dapat menangkap pengecualian beberapa kategori. Python 2.6 memiliki dukungan untuk kedua sintaks.

  • 1. era 2.x, semua jenis benda yang dapat dibuang langsung di era 3.x, hanya mewarisi dari objek BaseException dapat dibuang.
  • 2. Pernyataan 2.x kenaikan gaji melemparkan koma untuk jenis terpisah obyek dan parameter, 3.x dibatalkan kata-kata indah ini langsung memanggil konstruktor melempar sebuah benda dapat.

Di era 2.x, anomali dalam kode di samping itu kesalahan prosedural, tetapi juga sering beberapa struktur pengendalian bersama harus melakukan, di 3.x dapat dilihat, para desainer membuat perubahan normal yang lebih spesifik hanya kesalahan dengan pengecualian kasus untuk menangkap pernyataan untuk menangani.


xrange

Buat iterasi objek di Python 2 di xrange () penggunaan sangat populer. Misalnya: untuk loop atau daftar / koleksi / kamus comprehensions.

Kinerja ini Generator sangat gambar (misalnya. "Malas evaluasi"). Tapi xrange-iterable tak terbatas, berarti unlimited yang dapat Anda melintasi.

Karena malas evaluasi, bukan hanya jika Anda tidak dapat melintasi sekali, xrange () Kisaran rasio function () lebih cepat (misalnya untuk siklus). Namun demikian, dibandingkan dengan satu iterasi, iterasi tidak dianjurkan bahwa Anda ulangi beberapa kali, karena generator dari awal setiap kali.

Di Python 3, rentang () adalah seperti xrange () sehingga mencapai suatu xrange tertentu () fungsi tidak ada lagi (di Python 3 xrange () akan melempar nama pengecualian).

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

Oktal representasi literal

nomor oktal harus ditulis 0o777, bentuk asli dari 0777 tidak dapat digunakan; harus ditulis dalam 0b111 biner.

Ditambahkan fungsi bin () digunakan untuk mengkonversi integer ke string biner. Python 2.6 memiliki dukungan untuk kedua sintaks.

Dalam Python 3.x, dan oktal literal hanya ada satu cara, yaitu 0o1000.

python 2.x

>>> 0o1000
512
>>> 01000
512

python 3.x

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

operator ketidaksetaraan

Python 2.x tidak berarti ada dua cara untuk menulis! = Dan <>

Python 3.x untuk menjatuhkan <> Hanya! = Way untuk menulis, tapi untungnya, saya tidak pernah menggunakan <> diet


Dihapus ekspresi `` cetak ulang

Python 2.x di belakang kutipan `` fungsi cetak ulang setara dengan peran

Python 3.x untuk menjatuhkan `` notasi, hanya diperbolehkan fungsi cetak ulang, tujuan melakukannya adalah untuk membuat kode terlihat lebih jelas itu? Tapi aku merasa dengan kesempatan untuk Repr jarang, biasanya hanya bila digunakan di debug, sebagian besar waktu atau gunakan fungsi str ke string menggambarkan objek.

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

Sebuah pluralitas modul diganti (menurut PEP8)

Nama lama nama baru
_winreg winreg
ConfigParser ConfigParser
copy_reg copyreg
antre antre
SocketServer socketserver
cetak ulang reprlib

Modul StringIO sekarang dimasukkan ke dalam modul io baru. baru, md5, modul gopherlib akan dihapus. Python 2.6 memiliki dukungan untuk modul io baru.

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib dimasukkan ke dalam paket http.

Membatalkan pernyataan exec, hanya fungsi exec (). Python 2.6 memiliki dukungan exec () fungsi.


5. Jenis Data

1) Py3.X dihapus tipe lama, sekarang hanya ada satu bilangan bulat --int, tapi berperilaku seperti versi 2.x dari panjang

2) Ditambahkan byte ketik sesuai dengan versi 2.x dari delapan seri, mendefinisikan sebuah metode literal byte adalah sebagai berikut:

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

str objek dan byte benda dapat menggunakan .encode () (str -> bytes) atau .decode () (bytes -> str) Metode satu sama lain.

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

3) dict dari .keys (),. Item dan .values ​​() metode mengembalikan sebuah iterator, sedangkan iterkeys sebelumnya () dan fungsi lainnya dibuang. Pada saat yang sama dihapus ada dict.has_key (), ganti dengan di dalamnya.