【发布时间】:2013-09-12 11:10:34
【问题描述】:
我正在尝试学习在 python 中做简单事情的不同方法,同时也学习一些功能实践。我有一些用户输入的数字,我想知道它们是否真的是数字。我想出了这种经典的解决方案:
def foo(list_of_inputs):
for n in list_of_inputs:
if not hasattr(n, "real"):
# some number is not a number!
return False
# all are numbers
return True
但后来,我想出了另一个可能有潜力的“东西”:
def foo(list_of_inputs):
bool_list = map(lambda input: hasattr(input, "real"), list_of_inputs)
return reduce(lambda x, y: x == y, bool_list)
我认为,如果集合、可迭代或任何我正在寻找的正确概念的所有成员都是“True”,则可能返回“True”的函数可能已经有些普遍,而且,这当找到“False”时,第二次尝试不会返回,而经典的尝试会......但我觉得它很优雅,也许那是因为我还没有一般的编程。
所以我的问题是:“可能更好”的方法是什么?
【问题讨论】:
-
您通常会将
all与生成器表达式一起使用:all(hasattr(input, 'real') for input in list_of_inputs)。 -
这实际上是迄今为止我见过的最好的方式,即使否定了我认为我会找到它的地方(在一些与功能相关的实践之后)。谢谢
标签: python lambda reduce hasattr