在阅读某位大佬的源码时发现for语句的另外一种用法,for语句放在整条语句的后面,心生疑惑,于是将那段代码运行一遍发现没报错,然后通过查阅资料和自己写代码的测试,由于可供查阅的文章有限,我现在也是一知半解,如发现不对请告知我。
for语句放在后面以前也知道,就是列表推导式,例如:
l = [ i for i in range(10)]
一直以为这种写法只能用来写列表推导式,但是他还能这样用
s1 = ''.join(
random.choice(string.digits + string.ascii_letters)
for i in range(1000)
)
"""
相当于
s2 = ''
for i in range(1000):
s2.join(random.choice(string.digits + string.ascii_letters))
"""
li = [i for i in range(2000) if i % 2 == 0]
d1 = {li.pop() : i for i in range(1000)}
"""
相当于
li = [i for i in range(2000) if i % 2 == 0]
d2 = {}
for i in range(1000):
d2[li.pop()] = i
"""
语句不难理解,很直观,但是为什么这样的用法一般是用在列表推导式中,用在字典推导式(不知道怎么叫,暂且这么叫)中的却很少。然后我在测试时发现列表推导式比用普通循环处理列表时快,但是在字典中确是很不稳定,大部分时候是普通循环比字典推导式的运行速度快,至于其他用法可能是出现的场景比较少吧。
至于为什么列表推导式会快详情请百度。
越学越发现自己无知,心累。。。。