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
Traceback (most recent call last):
File “”, line 1, in
TypeError: add() got some positional-only arguments passed as keyword arguments: ‘x, y’
标记“/”意味着传递 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)
输出:
9.0.1
Metadata-Version: 2.1
Name: pip
Version: 9.0.1
Summary: The PyPA recommended tool for installing Python packages.
Home-page: https://pip.pypa.io/
Author: The pip developers
Author-email: python-virtualenv@groups.google.com
License: MIT
Description: pip
===
The `PyPA recommended
`_
tool for installing Python packages.
* `Installation `_
* `Documentation `_
* `Changelog `_
* `Github Page `_
* `Issue Tracking `_
* `User mailing list `_
* `Dev mailing list `_
* User IRC: #pypa on Freenode.
* Dev IRC: #pypa-dev on Freenode.
.. image:: https://img.shields.io/pypi/v/pip.svg
:target: https://pypi.python.org/pypi/pip
.. image:: https://img.shields.io/travis/pypa/pip/master.svg
:target: http://travis-ci.org/pypa/pip
.. image:: https://img.shields.io/appveyor/ci/pypa/pip.svg
:target: https://ci.appveyor.com/project/pypa/pip/history
.. image:: https://readthedocs.org/projects/pip/badge/?version=stable
:target: https://pip.pypa.io/en/stable
Code of Conduct
—————
Everyone interacting in the pip project’s codebases, issue trackers, chat
rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_.
.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/
Keywords: easy_install distutils setuptools egg virtualenv
Platform: UNKNOWN
Classifier: Development Status :: 5 – Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Software Development :: Build Tools
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=2.6,!=3.0.*,!=3.1.*,!=3.2.*
Provides-Extra: testing
表现
- 在Python 3.8 中,多处理模块提供了一个SharedMemory类,它允许在不同的Python进程之间创建和共享内存区域。共享内存为在进程之间传递数据提供了更快的路径,最终允许Python更有效地使用多个处理器和多个内核。
- 许多内置的方法和功能已经加速了 20% 到 50%。
- 新创建的列表现在平均比以前小 12%
- 在Python 3.8 中写入类变量要快得多。