栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

你绝对想不到的Python中的神秘行为(二)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

你绝对想不到的Python中的神秘行为(二)

1 引言

在前文中我们介绍了Python在字典键中的神秘行为,本文接着来介绍其它两种神秘行为,即在Try-Except块和For循环赋值中的神秘行为.
闲话少说,我们直接开始吧…

2 神秘的Try-Except块

我打赌你肯定听过说Python中的Try-Except块。在大多数编程语言中,处理异常是非常常见的。在Try和Except之后,我们还可以放置一个可选的Finally块。

我们知道无论Try块中是否发生错误,Finally块都将被执行。但是,如果我们在Try块中有一个return语句,并在Finally块中添加另一个return语句,会发生什么情况呢?

一般来说,如果Try块中的代码没有问题并且到达了return语句,那么函数应该完成执行,对吗?但是,让我们看看下面的例子。

def my_func():
    try:
        return 'in try'
    finally:
        return 'in finally'

调用语句如下:

my_func()

运行结果如下:

它显示返回“in finally”而不是“in try”。因此,已经证明,即使Try块中存在return语句,Finally块中的return语句仍将被执行。也许下面的例子将是一个更好的例子。

my_string = '123'
def my_func():
    global my_string
    try:
        return 'in try'
    finally:
        my_string = 'abc'
print(my_func())
print(my_string)

运行结果如下:

在本例中,我们在Try块中有一个return语句,但在Finally块中没有return语句。相反,我们在Finally块中重新分配一个全局字符串变量。然后,可以看到Try块中的return语句已正确执行。同时,Finally块中的代码也被执行。

请注意,无论发生什么情况,Finally块中的代码都将被执行。

3 神秘的For循环赋值

在Python中,For循环是最为常见的语句。无论您是数据科学家还是软件工程师,我们都在Python中到处都在使用For循环。

您知道如何循环字符串来逐个打印每个字符吗?解决方案之一是使用enumerate()函数。它将把字符串转换成一个包含索引的字符列表。如下:

my_string = 'Chris'
for i, value in enumerate(my_string):
    print(i, value)

结果如下:

但是,您知道使用For循环有一种神秘的用法吗?我们来看下面的例子。

my_dict = {}
for i, my_dict[i] in enumerate(my_string):
    pass

你认为会发生什么事?这段代码会抛出异常吗?直觉上,我的my_dict[i]没有初始化,因此可能会出现“key error”。但让我们看看执行结果。

没有错误,我们的字典已经被分配了字符串中的字符!这是怎么做到的?事实上在Python语法中,我们把放在for…in中的变量称为“target”。每个迭代都会给其分配来自iterables的值。因此,上面的For循环相当于执行以下操作(下面的代码是用于说明的伪代码,无法执行)。

For each iteration:
i = next(enumerate(my_string)).index
my_dict[i] = next(enumerate(my_string)).value

因此,字典my_dict由For循环进行赋值填充,即使我们在For循环的循环语句中什么也没做。

4 总结

在本文中,我介绍了Python中另外两种意想不到的神秘行为,即在try-exception和for循环语句中相应的神秘用法,并给出了相应的解释.

您学废了吗?

关注公众号《AI算法之道》,获取更多AI算法资讯。

参考链接

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/581300.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号