我想只在语句为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
答案 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
>>>