Python中生成器表达式的理解?

Python012

Python中生成器表达式的理解?,第1张

9.11. 生成器表达式

有时简单的生成器可以用简洁的方式调用,就像不带中括号的链表推导式。这些表达式是为函数调用生成器而设计的。生成器表达式比完整的生成器定义更简洁,但是没有那么多变,而且通常比等价的链表推导式更容易记。

例如:

>>>sum(i*i for i in range(10)) # sum of squares

285

>>>xvec = [10, 20, 30]

>>>yvec = [7, 5, 3]

>>>sum(x*y for x,y in zip(xvec, yvec)) # dot product

260

>>>from math import pi, sin

>>>sine_table = {x: sin(x*pi/180) for x in range(0, 91)}

>>>unique_words = set(word for line in page for word in line.split())

>>>valedictorian = max((student.gpa, student.name) for student in graduates)

>>>data = 'golf'

>>>list(data[i] for i in range(len(data)-1, -1, -1))

['f', 'l', 'o', 'g']

Footnotes

[1] 有一个例外。模块对象有一个隐秘的只读对象,名为 __dict__ ,它返回用于实现模块命名空间的字典,命名 __dict__ 是一个属性而非全局命名。显然,使用它违反了命名空间实现的抽象原则,应该被严格限制于调试中。

列表推导式和生成器表达式以及字典推导式 通常被视为Python中函数式编程的一部分,列表推导允许您使用包含较少代码的for循环创建列表。

用[] 包围

用{} 包围

生成器表达式允许在没有yield关键字的情况下即时创建生成器。

语法和概念类似于列表推导的语法和概念:用()包围