2015-04-04 72 views
1

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

如果你说出你想要的而不是你不想要的东西,也许它会更容易! – 2015-04-04 21:23:48

+0

你想要的语法比你不喜欢的语法更好吗? – user2357112 2015-04-04 21:28:22

+0

如果你只是想避免让'#做些什么'代码缩进,你可能会在函数的顶部执行'如果不是var:return'。 – iCodez 2015-04-04 21:35:47

回答

3

喜欢这个?

def foo(): 
    print('foo') 

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

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

如果上面不适合,我不认为这是清楚你想要做或为什么这样的事情是行不通的:

def foo(): 
    if not var: 
     return 
2

不同的地方和var的声明方式,你可以写一个装饰,这将让你有一个这样的语法:

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

然而,这是不以任何手段,而不是一个简单的更地道检查函数的主体,你(出于某种原因)不想要的。

+0

如果在定义函数后更改了'var'的值,这将不起作用。 – interjay 2015-04-04 21:33:41

+0

是的。正如我所说:这取决于'var'实际是什么。 – yole 2015-04-04 21:34:23

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 
>>> 
相关问题