Python 3.0 新加入了什么特性

发布时间:2021-06-18 16:53:25 作者:chen
来源:亿速云 阅读:137

这篇文章主要讲解了“ Python 3.0 新加入了什么特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ Python 3.0 新加入了什么特性”吧!


仅限关键字参数

Python 3.0 首次引入了仅限关键字参数参数的概念。在这之前,不可能指定一个只通过关键字传递某些参数的 API。这在有许多参数,其中一些参数可能是可选的函数中很有用。

请看一个特意设计的例子:

def show_arguments(base, extended=None, improved=None, augmented=None):    print("base is", base)    if extended is not None:        print("extended is", extended)    if improved is not None:        print("improved is", improved)    if augmented is not None:        print("augmented is", augmented)

当阅读调用该函数的代码时,有时很难理解发生了什么:

show_arguments("hello", "extra")     base is hello    extended is extra show_arguments("hello", None, "extra")     base is hello    improved is extra

虽然可以用关键字参数来调用这个函数,但这明显不是最好的方法。相反,你可以将这些参数标记为仅限关键字:

def show_arguments(base, *, extended=None, improved=None, augmented=None):    print("base is", base)    if extended is not None:        print("extended is", extended)    if improved is not None:        print("improved is", improved)    if augmented is not None:        print("augmented is", augmented)

现在,你不能用位置参数传入额外的参数:

show_arguments("hello", "extra")    ---------------------------------------------------------------------------     TypeError                                 Traceback (most recent call last)     <ipython-input-7-6000400c4441> in <module>    ----> 1 show_arguments("hello", "extra")        TypeError: show_arguments() takes 1 positional argument but 2 were given

对该函数的有效调用更容易预测:

show_arguments("hello", improved="extra")    base is hello    improved is extra

nonlocal

有时,函数式编程的人根据编写累加器的难易程度来判断一种语言。累加器是一个函数,当它被调用时,返回目前为止发给它的所有参数的总和。

在 3.0 之前,Python 的标准答案是:

class _Accumulator:    def __init__(self):        self._so_far = 0    def __call__(self, arg):        self._so_far += arg        return self._so_far def make_accumulator():    return _Accumulator()

虽然我承认有些啰嗦,但这确实有效:

acc = make_accumulator()print("1", acc(1))print("5", acc(5))print("3", acc(3))

这样做的输出结果将是:

1 15 63 9

在 Python 3.x 中,nonlocal 关键字可以用少得多的代码实现同样的行为。

def make_accumulator():    so_far = 0    def accumulate(arg):        nonlocal so_far        so_far += arg        return so_far    return accumulate

虽然累加器是人为的例子,但使用 nonlocal 关键字使内部函数拥有具有状态的的能力是一个强大的工具。

扩展析构

想象一下,你有一个 CSV 文件,每一行由几个元素组成:

请注意,最后一个元素是 文章总数,而不是 每天发表的文章。例如,一行的开头可以是:

2021,1,5,8,10

这意味着在 2021 年 1 月,第一天发表了 5 篇文章。第二天,又发表了三篇文章,使总数达到 8 篇。第三天,又发表了两篇文章。

一个月可以有 28 天、30 天或 31 天。提取月份、日期和文章总数有多难?

在 3.0 之前的 Python 版本中,你可能会这样写:

year, month, total = row[0], row[1], row[-1]

这是正确的,但它掩盖了格式。使用扩展析构,同样可以这样表达:

year, month, *rest, total = row

这意味着如果该格式改为前缀了一个描述,你可以把代码改成:

_, year, month, *rest, total = row

而不需要在每个索引中添加 1

感谢各位的阅读,以上就是“ Python 3.0 新加入了什么特性”的内容了,经过本文的学习后,相信大家对 Python 3.0 新加入了什么特性这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. 《流畅的Python》这本书如何
  2. Python2与Python3的区别详解

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:java中怎么实现字典序排序

下一篇:python清洗文件中数据的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》