繁体   English   中英

在任何条件下返回true的值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM