鉴于您不关心实际输出,有什么方法可以耗尽发电机?
我在地图中使用的功能将自行打印,因此我所要做的就是让地图进行评估。
目前,我使用list()
来执行此操作,但我正在寻找更短的方式。
任意例子:
list(map(print,range(10)))
答案 0 :(得分:3)
Set
是一个比list
短的字符。
set(map(print,range(10)))
在某些情况下,列表理解可能会更好:
[print(a)for a in range(10)]
答案 1 :(得分:3)
在3.5中,您可以滥用additional unpacking generalizations并替换:
list(map(print,range(10)))
使用:
*map(print,range(10)),
保存四个字符(它产生tuple
个None
s。。
使用3.4及更早版本,您可以(假设存在一个不存在于输出中的一个字符长的文字):
0in map(print,range(10)) # tokenizer is fine with no space between 0 and in
可以保存两个字符,同时还可以避免存储任何中间list
。
如果输出完全没有控制,并且你低于3.5,正如其他人所指出的那样,保存单个字符很容易(例如,只需将list
替换为any
,如果只是“虚假的“值可能,all
如果只有”truthy“值可能,或者set()
代表所有值,代价是存储set
),但如果你这样可以节省更多有版本或发电机输出保证。
显然,如果你不需要print
,这可以缩短甚至更多,因为*somegen,
将完成工作而没有毫无意义的print
,只需要两个字符以上首先引用发电机。
答案 2 :(得分:1)
如果您知道您的生成器不会包含其中一个单位数整数(例如2
),则可以使用2 in ...
消耗它,该{1}}小于list(...)
。