(给Python开发者加星标,提升Python技能)
英文:Satwik Kansal,翻译:暮晨
Python开发者
整理自 GitHub
【导读】:Python 是一个设计优美的解释型高级语言,它提供了很多能让程序员感到舒适的功能特性。但有的时候 Python 的一些输出结果对于初学者来说似乎并不是那么一目了然。
GitHub 有个仓库收集 Python 中那些难以理解和鲜为人知的功能特性,并尝试讨论这些现象背后真正的原理!
虽然有些例子并不一定会让你觉得“卧槽”(WTF),但它们依然有可能会告诉你一些你所不知道的 Python 有趣特性。我觉得这是一种学习编程语言内部原理的好办法,而且我相信你也会从中获得乐趣!
如果你是一位经验比较丰富的 Python 程序员,你可以尝试挑战看是否能一次就找到例子的正确答案。你可能对其中的一些例子已经比较熟悉了,那这也许能唤起你当年踩这些坑时的甜蜜回忆。
for 循环怎么会事儿?
some_string = "wtf"
some_dict = {}
for i, some_dict[i] in enumerate(some_string):
pass
Output:
>>> some_dict # 创建了索引字典.
{0: 'w', 1: 't', 2: 'f'}
说明:
Python 语法[1] 中对
for
的定义是:for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]
其中
exprlist
指分配目标. 这意味着对可迭代对象中的每一项都会执行类似{exprlist} = {next_value}
的操作.一个有趣的例子说明了这一点:
for i in range(4):
print(i)
i = 10Output:
0
1
2
3你可曾觉得这个循环只会运行一次?
说明:
- 由于循环在Python中工作方式, 赋值语句
i = 10
并不会影响迭代循环, 在每次迭代开始之前, 迭代器(这里指range(4)
) 生成的下一个元素就被解包并赋值给目标列表的变量(这里指i
)了.
- 由于循环在Python中工作方式, 赋值语句
在每一次的迭代中,
enumerate(some_string)
函数就生成一个新值i
(计数器增加) 并从some_string
中获取一个字符. 然后将字典some_dict
键i
(刚刚分配的) 的值设为该字符. 本例中循环的展开可以简化为:>>> i, some_dict[i] = (0, 'w')
>>> i, some_dict[i] = (1, 't')
>>> i, some_dict[i] = (2, 'f')
>>> some_dict
参考资料
[1]Python 语法: https://docs.python.org/3/reference/grammar.html
- EOF -
推荐阅读 点击标题可跳转1、迭代列表不要For循环,这是Python列表推导式最基本的概念
2、Python 工匠:编写地道循环的两个建议
3、我是这样挑战不用 for 循环的,15篇 Python 技术热文
觉得本文对你有帮助?请分享给更多人
推荐关注「Python开发者」,提升Python技能
点赞和在看就是最大的支持❤️