Python 3.x 新特性及10大变化
Python 3是Python编程语言的最新版本,以下是该版本引入的10大变化及新特性:
1. print()函数
Python 2.x版本中的print语句已经被print()函数代替,而Python 3.x版本则进一步更改了print()函数的行为:
- 在Python 3.x版本中,print()函数是一个内置函数,它无需像Python 2.x版本中一样导入sys模块。
- 在Python 3.x版本中,print()函数使用括号括住打印内容,如
print("Hello, World!")
。
2. 高分辨率时间
Python 3.x版本新增了一个time.perf_counter()函数,用于精确计算程序代码的执行时间。这个函数的精度很高,可以精确计算到微秒。
示例:
import time
start = time.perf_counter()
# 添加需要计时的代码
for i in range(1000000):
pass
end = time.perf_counter()
print(f"程序执行时间为 {end - start:.6f} 秒")
3. UTF-8编码
Python 3.x版本默认使用UTF-8编码。这意味着,在Python 3.x版本中,你可以直接使用Unicode字符串而无需在文件注释中指定编码方式。
示例:
# -*- coding: utf-8 -*-
print("你好,世界!")
在Python 3.x版本中,你可以直接写上“你好,世界!”而无需指定编码格式。
4. 更改除法运算行为
在Python 2.x版本中,整数之间的除法运算结果也是整数。在Python 3.x版本中,整数之间的除法运算结果将会转换为浮点数。
示例:
print(10 / 2) # 输出5.0
print(9 / 2) # 输出4.5
print(9 // 2) # 输出4
在第一行代码中,10和2都是整数,它们的除法运算结果是5.0,一个浮点数。第二行代码的结果与第一行相同。第三行代码使用了双斜杠运算符,用于获取整数之间的地板除。
5. 用range()替代xrange()
在Python 2.x版本中,有一个特殊的函数xrange(),用于生成较大范围的可迭代对象。Python 3.x版本已经没有这个函数了,range()函数被用于生成可迭代对象。
示例:
for i in range(100000):
pass
在上面的例子中,range(100000)函数返回一个包含10万个整数的可迭代对象。
6. 用async和await实现协程
Python 3.5引入了async和await关键字,用于协程的实现。这两个关键字用于解决回调地狱问题,简化异步编程。
示例:
import asyncio
async def fetch_data(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
上面的示例使用async和await定义了一个协程函数fetch_data(),用于异步获取远程数据。
7. 指定函数参数类型
Python 3.x版本中引入了PEP 484,其中包括了用于指定函数参数类型的语法。
示例:
def add_numbers(a: int, b: int) -> int:
return a + b
上面的示例中,我们使用了冒号语法来指定参数a和b的类型,以及返回值类型。
8. 用raise from代替raise语句
Python 3.x版本中引入了raise from语法,用于抛出一个异常并指定另一个引发该异常的异常对象。这个特性可以用于捕获异常的根本原因。
示例:
try:
1 / 0
except ZeroDivisionError as e:
raise ValueError("输入有误") from e
在上面的代码中,我们抛出了一个ValueError异常,并用from关键字指定了引发该异常的原因是ZeroDivisionError异常。
9. 异常链
Python 3.x版本中,构造异常对象时可以使用比以前更丰富的语法。异常对象可以包含另一个异常的引用,以便于在不同层次的代码中跟踪异常的来源。
示例:
class WebsiteException(Exception):
def __init__(self, message, status_code, error=None):
super().__init__(message)
self.status_code = status_code
self.error = error
try:
raise WebsiteException("网站发生错误!", 500, ZeroDivisionError)
except WebsiteException as e:
if e.error:
print(f"异常根本原因为 {e.error}")
在上面的代码中,我们创建了一个名为WebsiteException的自定义异常类,其中有一个error属性。我们在try语句块中抛出WebsiteException异常并指定它的error值为ZeroDivisionError,然后在except语句块中访问异常的error属性。
10. 加强随机数功能
Python 3.6版本新增了一个模块random.choices(),用于指定概率值来随机选择元素。同时,Python 3.8版本新增了一个模块secrets.token_hex(),用于生成随机的十六进制数字。
示例:
import random
import secrets
# 随机选择元素
colors = ["红色", "黄色", "蓝色"]
weights = [1, 2, 3]
print(random.choices(colors, weights, k=10))
# 生成随机的十六进制数字
print(secrets.token_hex(16))
在上面的代码中,我们使用了新的随机数模块来实现随机选择元素和生成随机的十六进制数字。
以上就是Python 3.x版本的10大变化及新特性的完整攻略。在使用Python 3.x版本时,我们可以利用这些新特性和变化来提高代码的质量和效率。