仅当变量为True时才执行函数

时间:2015-04-04 21:20:57

标签: python methods idiomatic

我想只在语句为True时才运行函数。 例如,我有:

def foo():
    # do something

我只想在

时运行它
var == True

在密钥处理程序中我想要做这样的事情:

if k.key() == Key_UP and var:
    foo()

我从多个地方调用此函数,我不想重复var条件。 此外,我想要这样的事情:

def foo():
    if var:
        # do something

我展示的最后一个是最接近我的需求,但我认为它可以通过其他方式完成。用于Python 3的惯用语。

问候!

PS。我想得到这样的东西:

def foo() if var == True:
    # do something

3 个答案:

答案 0 :(得分:6)

喜欢这个吗?

 def foo():
    print('foo')

>>> bool = True
>>> if bool: foo()
foo

>>> bool = False
>>> if bool: foo()

如果以上情况不合适,我不清楚你明白你想做什么或者为什么这样的事情不会起作用:

def foo():
    if not var:
        return

答案 1 :(得分:2)

根据声明var的位置和方式,你可以编写一个装饰器,这将允许你有这样的语法:

@if_true(var)
def foo():
     # body of the function

然而,这并不是一种惯用的方式,而不是函数正文中的简单if检查,而您(由于某种原因)并不想要。

答案 2 :(得分:0)

您可以使用布尔操作的短路行为来完成任务,但不清楚您所追求的是什么。

# bit of setup
class K:
    def __init__(self, key):
        self._key = key
    def key(self):
        return self._key
def foo():
    print('\tfoo running')
    return 'foo!'
var = [True, False]
k = K(True)
m = K(False)

for thing in (k, m):
    for b in var:
        print('thing.key():{} - var:{}'.format(thing.key(), b))
        if thing.key():
            result = b and foo()
            print('\t', result)
>>> 
thing.key():True - var:True
    foo running
     foo!
thing.key():True - var:False
     False
thing.key():False - var:True
thing.key():False - var:False
>>>