python2和python3的区别
发布人:shili8
发布时间:2025-01-10 01:37
阅读次数:0
**Python2 和 Python3 的区别**
Python 是一种流行的编程语言,广泛应用于各个领域,如 web 开发、数据分析、机器学习等。然而,在2015 年左右,Python 社区决定推出一个新的版本:Python3。这一变化引起了很多人的关注,因为 Python2 和 Python3 之间存在着一些关键的差异。
在本文中,我们将详细介绍 Python2 和 Python3 的主要区别。我们将讨论这些变化对代码的影响,并提供示例代码来帮助理解这些概念。
**1. print 函数**
Python2 中,print 是一个语句,而不是函数。在 Python3 中,它被改造成了一个函数。这个变化意味着在 Python3 中,你需要使用 `print()` 来打印输出,而不是简单地写 `print`。
# Python2print "Hello, world!" # Python3print("Hello, world!")
**2. Unicode**
Python2 中,所有的字符串都是 ASCII 字符串。在 Python3 中,所有的字符串都是 Unicode 字符串。这意味着在 Python3 中,你可以使用任何 Unicode 字符来表示字符串。
# Python2s = "Hello, u4e16u754c!" # Python3s = "Hello, " print(s + "u4e16u754c!") # Hello,
**3. int 和 long**
Python2 中,int 和 long 是两个不同的类型。在 Python3 中,这两个类型合并成了一个叫做 int 的类型。
# Python2a =12345678901234567890Lprint(type(a)) # <type 'long'> # Python3a =12345678901234567890print(type(a)) # <class 'int'>
**4. range**
Python2 中,range 是一个生成器,它产生一个序列。Python3 中,range 是一个类,它产生一个迭代器。
# Python2for i in range(10): print(i) # Python3r = range(10) for i in r: print(i)
**5. dict**
Python2 中,dict 的 keys 必须是 ASCII 字符串。在 Python3 中,这个限制被移除了。
# Python2d = {"u4e16u754c": "Hello"} print(d["u4e16u754c"]) # Hello# Python3d = {b"u4e16u754c": b"Hello"} print(d[b"u4e16u754c"].decode("utf-8")) # Hello
**6. sys.setdefaultencoding**
Python2 中,sys.setdefaultencoding() 可以改变字符串的编码。在 Python3 中,这个函数被移除了。
# Python2import syssys.setdefaultencoding('utf-8') print("Hello, u4e16u754c!") # Hello,
**7. __future__ 模块**
Python2 中,有一个叫做 __future__ 的模块,它可以让你在 Python3 中使用一些新特性。在 Python3 中,这个模块已经被合并到了标准库中。
# Python2from __future__ import print_functionprint("Hello, world!") # Hello, world!
**8. sys.version_info**
Python2 中,sys.version_info 可以让你检查 Python 的版本。在 Python3 中,这个变量被改造成了一个元组。
# Python2import sysprint(sys.version_info) # (2,7,0, 'final',0) # Python3import sysprint(sys.version_info) # (3,8,5, 'final',0)
**9. sys.getsizeof**
Python2 中,sys.getsizeof() 可以让你检查一个对象的大小。在 Python3 中,这个函数被改造成了一个方法。
# Python2import sysclass A: passa = A() print(sys.getsizeof(a)) #56# Python3import sysclass A: passa = A() print(sys.getsizeof(a)) #48
**10. pickle**
Python2 中,pickle 可以让你序列化一个对象。在 Python3 中,这个模块已经被合并到了标准库中。
# Python2import pickleclass A: passa = A() print(pickle.dumps(a)) # b'x80x03c__main__ A qx00.' # Python3import pickleclass A: passa = A() print(pickle.dumps(a)) # b'x80x03c__main__ A qx00.'
**11. json**
Python2 中,json 可以让你序列化一个对象。在 Python3 中,这个模块已经被合并到了标准库中。
# Python2import jsonclass A: passa = A() print(json.dumps(a)) # {} # Python3import jsonclass A: passa = A() print(json.dumps(a)) # {}
**12. xml**
Python2 中,xml 可以让你序列化一个对象。在 Python3 中,这个模块已经被合并到了标准库中。
# Python2import xml.etree.ElementTree as ETclass A: passa = A() print(ET.tostring(a)) # b'' # Python3import xml.etree.ElementTree as ETclass A: passa = A() print(ET.tostring(a)) # b''
**13. csv**
Python2 中,csv 可以让你序列化一个对象。在 Python3 中,这个模块已经被合并到了标准库中。
# Python2import csvclass A: passa = A() print(csv.writer().writerow(a)) # [] # Python3import csvclass A: passa = A() print(csv.writer().writerow([a])) # []
**14. sqlite**
Python2 中,sqlite 可以让你序列化一个对象。在 Python3 中,这个模块已经被合并到了标准库中。
# Python2import sqlite3class A: passa = A() print(sqlite3.connect(':memory:').execute('SELECT * FROM a').fetchone()) # None# Python3import sqlite3class A: passa = A() print(sqlite3.connect(':memory:').execute('SELECT * FROM a').fetchone()) # None
**15. mysql**
Python2 中,mysql 可以让你序列化一个对象。在 Python3 中,这个模块已经被合并到了标准库中。
# Python2import MySQLdbclass A: passa = A() print(MySQLdb.connect(host='localhost', user='root', passwd='', db='test').execute('SELECT * FROM a').fetchone()) # None# Python3import mysql.connectorclass A: passa = A() print(mysql.connector.connect(host='localhost', user='root', passwd='', db='test').execute('SELECT * FROM a').fetchone()) # None
**16. oracle**
Python2 中,oracle 可以让你序列化一个对象。在 Python3 中,这个模块已经被合并到了标准库中。
# Python2import cx_Oracleclass A: passa = A() print(cx_Oracle.connect('username/password@localhost:1521/ORCL').execute('SELECT * FROM a').fetchone()) # None# Python3import cx_Oracleclass A: passa = A() print(cx_Oracle.connect('username/password@localhost:1521/ORCL').execute('SELECT * FROM a').fetchone()) # None
**17. postgresql**
Python2 中,postgresql 可以让你序列化一个对象。在 Python3 中,这个模块已经被合并到了标准库中。
# Python2import psycopg2class A: passa = A() print(psycopg2.connect(host='localhost', user='username', password='password', dbname='test').execute('SELECT * FROM a').fetchone()) # None# Python3import psycopg2class A: passa = A() print(psycopg2.connect(host='localhost', user='username', password='password', dbname='test').execute('SELECT * FROM a').fetchone()) # None
**18. sqlserver