我有一个循环遍历大型数据集的函数。它需要多个输入并包含许多条件。对于测试,我有时喜欢在没有特定条件的情况下运行该函数,但是取消注释条件是耗时的 - 这就是我所知道的。
是否可以为函数提供始终使条件为真的输入 - 对于字符串和数值都是如此?
简化示例:
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"]
作为输入,但这不起作用。
答案 0 :(得分:2)
如果你正在寻找一个对任何参数都返回true的函数:
def always(*args, **kw):
return True
如果您正在寻找始终将==
与任何对象进行比较的对象,则几乎可以执行此操作:
class AlwaysEqual:
def __eq__(self, other):
return True
但差不多 - 如果说,如果你把这种不可抗拒的真实性力量对抗一个不可动摇的虚假对象,那么左翼的人将会获胜。
如果你想以对任何合理价值不一致的方式超载多重比较,比如使它与所有东西相等而且比所有东西都要小,那就没有什么可以阻止你了。 (毕竟,math.nan
不等于任何东西,包括它自己,以及那些经过深思熟虑的人所写的标准所要求的,所以Python不会阻止你做类似的事情。)
答案 1 :(得分:1)
将代码拆分为“调试模式”和“发布模式”,并使用显式检入条件。远离花哨的方法,因为它将来会带来更多的麻烦。
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()
答案 2 :(得分:0)
这样的事情可行。
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
答案 3 :(得分:0)
你可以使用一个带布尔值的函数,如果你正在运行测试则返回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()
答案 4 :(得分:0)
我有时会使用类似的项目检测程序,关闭和打开调试跟踪。在您的情况下,在标志上使用短路or
灌注每个条件:
all_true = True
# all_true = False
...
if all_true or item["vaariable"] == a:
...
这样做一次;您现在可以通过更改注释标记来控制它。也许更有用,您可以在运行期间打开和关闭它。
答案 5 :(得分:0)
从阅读代码开始,我认为你需要一个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
当您致电AnyObject
时,您只需使用any
课程的实例代替function
:
any = AnyObject()
function(any,b,c...)
现在所有行的条件都为真!