2012-02-07 53 views
-2

我有一個python函數,它包含一個if語句來檢查一些東西。在python中使用條件條件

def my_func(a, b, c): 
    if a < b and b < c: 
    #do complicated stuff 

我想修改函數,以便調用者可以通過傳遞布爾值來確定是否執行if語句檢查。

def my_func(a, b, c, perform_check=True): 

我想弄清楚如何使有條件只被調用有時,或跳過其他時間。

+0

也許你可以更簡潔,只專注於你的問題的通用版本。 – shenshei 2012-02-07 23:03:17

+1

這個問題絕對可以歸結爲一個更一般的形式,這真的會幫助提問者和我們其他人找出問題的根源。 – mattbornski 2012-02-07 23:05:14

+0

對不起!我傾向於收到意見,我的問題沒有足夠的信息,所以我試圖做個冗長的。 – 2012-02-07 23:08:41

回答

3

我想這樣的事情是你所需要的:

if include_already_seen or not data[person].get(item, 0): 
+0

啊,就是這樣。我需要花一些時間來梳理我的布爾邏輯。 [http://codingbat.com/python/Logic-2](http://codingbat.com/python/Logic-2) – 2012-02-07 23:17:49

1
def find_recommendations(person, using=pearson_correlation, data=critics, include_already_seen=True): 
    totals = {} 
    sim_sum = {} 

    for critic in critics: 
    if critic != person: 
     similarity_score = using(data, person, critic) 
     print "the similarity score between %s and %s is %d" % (person, critic, similarity_score) 
     if similarity_score <= 0: continue # ignore similarity_scores below 0 

     for item in data[critic]: 

     if include_already_seen or (item not in data[person] or data[person][item] == 0): 
      totals.setdefault(item,0) 
      totals[item] += data[critic][item] * similarity_score 

      sim_sum.setdefault(item,0) 
      sim_sum[item] += similarity_score 

    #create the normalized list 
    rankings = [ (total/sim_sum[item],item) for item, total in totals.items()] 

    rankings_sorted = sorted(rankings) 
    rankings_sorted.reverse() 
    return rankings_sorted