📜  Python 3.8 中令人敬畏的新功能

📅  最后修改于: 2022-05-13 01:54:21.251000             🧑  作者: Mango

Python 3.8 中令人敬畏的新功能

Python是一种广泛使用的通用高级编程语言。它最初由 Guido van Rossum 于 1991 年设计,由Python Software Foundation 开发。它主要是为了强调代码的可读性而开发的,它的语法允许程序员用更少的代码行来表达概念。 Python是一种编程语言,可让您快速工作并更有效地集成系统。
Python 3.8 包含对早期版本的许多小改进。本文概述了Python 3.8 中最重要的添加和更改

仅位置参数(/)

有一个新的函数参数语法“/”,它表示某些函数参数必须按位置指定,不能用作关键字参数。 “/”的添加提高了语言的一致性并允许健壮的 API 设计。
例子:

Python3
# Arguments before / are considered
# as positional arguments only
def add(x, y, /, z = 0):
    a = x + y + z
    return a 
 
# Driver's code
print(add(2, 5))
print(add(2, 5, 7))
print(add(x = 2, y = 5))


Python3
a = 20
if (b := a) > 10:
    print(f"The value of b is {b} and is greater than 10.")


Python3
a = 5
b = 10
 
# Using = at the end of
# f-strings
print(f'{a + b = }')
 
# Using assignment operators
# inside f-strings
print(f'{(c := a + b)}')
 
print("The value of c:", c)


Python3
# Declaring a dictionary
my_dict = dict(x = 1, y = 2, z = 3)
 
# Prints only keys
list(reversed(my_dict))
 
# Prints the key-value pair
# as a list of tuples
list(reversed(my_dict.items()))


Python3
def parse(family):
  lastname, *members = family.split()
  return lastname.upper(), *members
 
print(parse('Charles David John Sam'))


Python3
print(pow(38, -1, 137))


Python3
from importlib import metadata
 
# pip version
print(metadata.version('pip'))
data = metadata.metadata('pip')
print()
print(data)


输出:

7
14

标记“/”意味着传递 x 和 y 的值只能在位置上完成,但不能使用关键字参数。

赋值表达式(:=)

此运算符用于在同一表达式中分配和返回值。这消除了预先初始化变量的需要。这样做的主要好处是它节省了一些代码行。由于它与海象的眼睛和獠牙相似,它也被称为“海象操作员”
例子:

Python3

a = 20
if (b := a) > 10:
    print(f"The value of b is {b} and is greater than 10.")

输出:

The value of b is 20 and is greater than 10.

f 字符串现在支持“=”

这种字符串格式化机制称为字面量字符串插值或更常见的 F 字符串(因为字符串字面量前面的前导 f字符)。 f-strings 背后的想法是使字符串插值更简单。 Python 3.8 允许在 f 字符串中使用上面讨论的赋值运算符和等号 (=)。
例如,假设我们有两个变量“a”和“b”,我们想要打印“a + b”以及结果。这里我们可以使用 f-strings=。

例子:

Python3

a = 5
b = 10
 
# Using = at the end of
# f-strings
print(f'{a + b = }')
 
# Using assignment operators
# inside f-strings
print(f'{(c := a + b)}')
 
print("The value of c:", c)

输出:

a + b = 15
15
The value of c: 15

这在调试过程中非常有用,尤其是对于使用 print() 语句进行调试的每个人。

reversed() 与字典一起使用

与Python 3.7 不同,现在在Python 3.8 中,内置方法“reversed()”可用于以相反的插入顺序访问元素。
例子:

Python3

# Declaring a dictionary
my_dict = dict(x = 1, y = 2, z = 3)
 
# Prints only keys
list(reversed(my_dict))
 
# Prints the key-value pair
# as a list of tuples
list(reversed(my_dict.items()))

输出:

['z', 'y', 'x']
[('z', 3), ('y', 2), ('x', 1)]

return 和 yield 语句没有括号

'yield' 和 'return' 语句不需要括号来返回多个值。

例如:

Python3

def parse(family):
  lastname, *members = family.split()
  return lastname.upper(), *members
 
print(parse('Charles David John Sam'))

输出:

('CHARLES', 'David', 'John', 'Sam')

pow()函数

在 pow() 的三参数形式中,当指数为 -1 时,它计算给定值的模乘逆。

例如,要计算 38 模 137 的模乘逆:

Python3

print(pow(38, -1, 137))

输出:

119

语法警告

如果您在代码中遗漏了一个逗号,例如 a = [(1, 2) (3, 4)],它不会抛出 TypeError,而是显示如下信息性语法警告:

SyntaxWarning: 'tuple' object is not callable; perhaps you missed a comma?

字典理解

字典推导已被修改,以便首先计算键,然后计算值:

>>> data = {input('Name: '), input('Age: ')}
Name: Charles
Age: 40

'csv' 模块

“csv.DictReader”现在返回字典实例而不是“collections.OrderedDict”。

导入库元数据

importlib_metadata 是 Python 的标准实用程序模块中添加的一个新库,它提供了一个 API 用于访问已安装包的元数据,例如其入口点或其顶级名称。
示例:可以使用此模块检查 pip 的版本。

Python3

from importlib import metadata
 
# pip version
print(metadata.version('pip'))
data = metadata.metadata('pip')
print()
print(data)

输出:

表现

  • 在Python 3.8 中,多处理模块提供了一个SharedMemory类,它允许在不同的Python进程之间创建和共享内存区域。共享内存为在进程之间传递数据提供了更快的路径,最终允许Python更有效地使用多个处理器和多个内核。
  • 许多内置的方法和功能已经加速了 20% 到 50%。
  • 新创建的列表现在平均比以前小 12%
  • 在Python 3.8 中写入类变量要快得多。