揭秘Python中的神秘现象(二)

图片[1]-揭秘Python中的神秘现象(二)-山海云端论坛

01

引言

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

02

神秘的Try-Except块

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

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

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

<code>def my_func(): try: return 'in try' finally: return 'in finally'</code>

调用语句如下:

<code>my_func()</code>
图片[2]-揭秘Python中的神秘现象(二)-山海云端论坛

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

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

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

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

03

神秘的For循环赋值

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

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

<code>my_string = 'Chris' for i, value in enumerate(my_string): print(i, value)</code>
图片[3]-揭秘Python中的神秘现象(二)-山海云端论坛

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

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

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

图片[4]-揭秘Python中的神秘现象(二)-山海云端论坛
<code>没有错误,我们的字典已经被分配了字符串中的字符!这是怎么做到的?事实上在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循环的循环语句中什么也没做。 --- **04** **总结** 在本文中,我介绍了Python中另外两种意想不到的神秘行为,即在try-exception和for循环语句中相应的神秘用法,并给出了相应的解释。</code>

05

总结

在本文中,我们探讨了Python中的一些神秘行为,包括Try-Except块和For循环赋值。这些行为可能会导致一些意想不到的结果,但通过深入理解它们背后的原理,我们可以更好地理解Python的工作方式。

通过对Try-Except块的讨论,我们了解到无论Try块中是否出现错误,Finally块中的代码都将被执行。这对于资源管理和清理非常有用,但也需要小心处理以避免意外行为。

在For循环赋值中,我们看到了一种不寻常的用法,即在For循环中同时对循环变量和字典键进行赋值。这种用法虽然看起来不直观,但实际上是Python语法的一部分,并且可以在某些情况下提供方便的编程方式。

通过深入了解这些神秘行为背后的原理,我们可以更好地利用Python的强大功能,并写出更加健壮和可靠的代码。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容