[英]Value that returns true on any condition?
我有一个循环大数据集的函数。 它需要多个输入并包含许多条件。 对于测试,我有时喜欢在没有特定条件的情况下运行该函数,但是取消注释条件是耗时的 - 这就是我所知道的。
是否可以为函数提供始终使条件成立的输入 - 对于字符串和数值?
一个简化的例子:
def function(a,b,c....):
.....
item = dict(zip(header,row))
for row in list:
if item["variable"] == a:
print row
....
return something
现在我要打印任何一行。
function(any,b,c...)
我考虑过将item["variable"]
作为输入,但这不起作用。
如果您正在寻找一个对任何参数都返回true的函数:
def always(*args, **kw):
return True
如果您正在寻找一个始终将==
与任何对象进行比较的对象,您几乎可以这样做:
class AlwaysEqual:
def __eq__(self, other):
return True
但是,差不多 - 比如说,如果你把这种不可抗拒的真实力量对抗一个不可动摇的虚假对象,那么左边的人就会赢。
如果你想以不同于任何合理价值的方式超载多重比较,比如让它与所有东西相等而且比所有东西都要小,那就没有什么能阻止你了。 (毕竟, math.nan
不等于任何东西,包括它自己,并且这是由那些math.nan
考虑它的人所写的标准所要求的,因此Python不会阻止你做类似的事情。)
将代码拆分为“调试模式”和“释放模式”,并使用显式检入条件。 远离花哨的方法,因为它将来会带来更多的麻烦。
debug = True
if debug or len(something) > 2:
# something always on in debug mode
do_something()
if not debug and len(some_other_thing) > 7:
# something always off in debug mode
do_something_else()
像这样的东西可以工作。
def function(a,b,c,test=False):
.....
item = dict(zip(header,row))
for row in list:
if test:
print row
else:
if item["vaariable"] == a:
print row
....
return something
您可以使用一个带布尔值的函数,如果您正在运行测试则返回True
否则返回布尔值的实际值:
def func(x, y, test=False):
def _bool(b):
return True if test else b
if _bool(foo == x):
if _bool(bar == y):
do_something()
我有时用一个类似的项目来检测我的程序,关闭和打开调试跟踪。 在您的情况下,通过短路or
标志来灌输每个条件:
all_true = True
# all_true = False
...
if all_true or item["vaariable"] == a:
...
这样做一次; 您现在可以通过更改注释标记来控制它。 也许更有用,您可以在运行期间打开和关闭它。
从阅读代码开始,我认为你需要一个Python对象,当你使用==
将它与任何其他Python对象进行比较时,结果总是为True
;
首先,您需要定义一个类,我提到的属性然后使用它的一个实例而不是any
来调用该function
:
class AnyObject(object):
def __eq__(self, anything):
return True
1 == AnyObject()
'' == AnyObject()
None == AnyObject()
你的代码:
def function(a,b,c....):
.....
item = dict(zip(header,row))
for row in list:
if item["variable"] == a:
print row
....
return something
在调用function
时,只需要使用AnyObject
类的实例代替any
:
any = AnyObject()
function(any,b,c...)
现在条件适用于所有行!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.