2015-04-04 74 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 
>>> 
相關問題