【发布时间】:2010-09-17 02:44:31
【问题描述】:
当你想在 Python 中打印一堆变量时,你有很多选择,例如:
for i in range(len(iterable)):
print iterable[i].name
或
map(lambda i: sys.stdout.write(i.name), iterable)
我在第二个示例中使用 sys.stdout.write 而不是 print 的原因是 lambdas 不接受打印,但 sys.stdout.write 具有相同的目的。
您还可以使用三元运算符有条件地打印:
map(lambda n: None if n % 2 else sys.stdout.write(str(n)), range(1, 100))
因此,如果我可以检查整个序列中是否存在可以保证异常的条件,那将非常方便:
map(lambda o: raise InvalidObjectError, o.name if not o.isValid else o(), iterable)
但这不起作用。 Python中是否有raise这样的对象,如果有,在哪里?
【问题讨论】:
-
-1:哇,这太糟糕了。请不要那样打代码高尔夫。请不要让 Python 不可读。第一种风格有什么问题?这是有道理的。为什么要使用使事情变得模糊的奇异地图技术?所有这些默默无闻的意义何在?它不会更快。它不会更容易阅读。为什么要这样做?
-
@S. Lott 的前两个地图示例毫无用处,但它们只是为了演示 sys.stoud.write 以及我想使用 raise 的方式。但如果可能的话,我不明白为什么第三张地图会很糟糕。
-
既然可以使用
from __future__ import print_function,为什么还要使用sys.stdout.write? -
也是不错的选择。太糟糕了,未来还没有 raise_function。