2017-04-18 68 views
1

我有一個簡單的if語句在我的代碼如果所謂的聲明,忽略後,即使條件已經滿足

if len(bootstrap_node_list_recieved_no_dups) >= min_node_to_complete_boot_strap: 
    print "recieved required nodes" 

基本上我想知道是否有足夠的節點,我只希望這發生一次,如代碼仍然會繼續運行,因此當前每次運行if語句都會如我所料。

有沒有一種方法來編寫代碼,以便if語句運行,但是一旦它完成後永遠不會再運行?由於輸入不是常數,因此需要>=

我希望這很清楚,因爲它有點難以描述。

更新,

我試圖實施的建議,但我得到的錯誤

UnboundLocalError: local variable 'flag' referenced before assignment 
下面

全碼:

flag = False 

def number_of_duplicates_in_list(): 
    number_recieved = len(bootstrap_node_list_recieved) 
    bootstrap_node_list_recieved_before = len(bootstrap_node_list_recieved_no_dups) 

    " this method works in O(n^2) time and is thus very slow on large lists" 
    for i in bootstrap_node_list_recieved: 
     if i not in bootstrap_node_list_recieved_no_dups: 
      bootstrap_node_list_recieved_no_dups.append(i) 
    assert len(bootstrap_node_list_recieved_no_dups) >= bootstrap_node_list_recieved_before 
    if len(bootstrap_node_list_recieved_no_dups) >= min_node_to_complete_boot_strap and flag is False: 
     print "recieved required nodes" 
     flag = True 
+3

'如果hasnt_run_yet和len(...):hasnt_run_yet = False; ...'...? – deceze

回答

2

你可以有改變時,有些萎靡不振的變量首先觸發if語句。下面的代碼是一個最小的例子,它只會打印一次「觸發」語句,即使所有大於3的數字都會觸發語句,如果該標誌也沒有被檢查。

flag = False 

for x in xrange(10): 
    if x > 3 and flag is False: 
     print 'Triggered' 
     flag = True 

    # Do something else 

如果你想在一個函數中做到這一點,你需要將標誌初始化移入函數中。請注意,重新運行功能將復位標誌:

def test_func(): 
    flag = False 
    for x in xrange(10): 
     if x > 3 and flag is False: 
      print 'Triggered' 
      flag = True 

    # Do something else 

test_func() 

爲了能夠運行一次函數多次,但只能觸發if聲明並更改標誌,則需要該標誌鏈接到函數調用。這樣做的一個簡單的方法是通過並在每次調用返回的標誌:

flag = False 

def test_func(flag): 
    for x in xrange(10): 
     if x > 3 and flag is False: 
      print 'Triggered' 
      flag = True 

    # Do something else 
    return flag 

flag = test_func(flag) 
flag = test_func(flag) 

這裏,標誌調用時定義的功能之外,並傳遞到每一個功能。如果沒有被觸發,它會通過而不會改變。如果被觸發,它會被改變,並且它的狀態會被傳回到函數之外。

其他方法可以定義一個global變量或建立一個類作爲對象變量並通過self訪問它。

+0

謝謝我已經嘗試過這種方法,但不斷得到UnboundLocalError:賦值前引用的局部變量'flag' – Rich

+0

Iv根據您的要求用兩種解決方案更新了答案 – Wokpak

0

定義flag在number_of_duplicates_in_list內爲全局。否則,你只能閱讀它。