疯狂的Python-05(神奇赋值法)
2018-09-06 本文已影响8人
景行1023
写给有基础的Python程序员,一些有趣的鲜为人知的Python特性集合
无论你是Python新手还是Python老手,我相信,这个系列的文章都会让你获益良多!
阅读此系列任何文章前请务必观看:疯狂的Python-目录大纲
▶ 神奇赋值法
some_string = "crazy"
some_dict = {}
for i, some_dict[i] in enumerate(some_string):
pass
Output:
>>> some_dict # 一个带引索的字典被创建.
{0: 'c', 1: 'r', 2: 'a', 3: 'z', 4: 'y'}
💡 解释:
-
一个
for
语句在Python语法中是这么定义的:for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]
exprlist
是一组被赋值的变量. 这就等于说这组变量在每次迭代开始的时候都会执行一次{exprlist} = {next_value}
。
下面这个例子很好的解释了上面想要表达的意思:for i in range(4): print(i) i = 10
Output:
0 1 2 3
是不是以为上面的循环就会执行一次?
💡解释:
- 在上面这个循环中,
i=10
这个赋值语句不会整个迭代过程产生任何影响。因为在每次迭代开始前,迭代函数(在这里是range(4)
)都会把下一次的值赋值给目标变量(在这里是i
)。
- 在上面这个循环中,
-
再来看上面的例子,
enumerate(some_string)
这个函数会在每次迭代的时候产生两个值,分别是i
(一个从0开始的索引值)和一个字符(来自some_string
的值)。然后这两个值会分别赋值给i
和some_dict[i]
。把刚才的循环展开来看就像是下面这样:>>> i, some_dict[i] = (0, 'c') >>> i, some_dict[i] = (1, 'r') >>> i, some_dict[i] = (2, 'a') >>> i, some_dict[i] = (3, 'z') >>> i, some_dict[i] = (4, 'y') >>> some_dict