2017-02-19 55 views
0

這段代碼在Python中是否正確?條件下的Python定義函數

def foo(flag): 
    if flag: 
     def bar(): 
      # Somthing 
    else: 
     def bar(): 
      # Somthing else 
    bar() 

foo(True) 
foo(False) 

如果不是什麼建議的方式來設置一些函數(酒吧)的行爲下?條件?

確定真正的代碼如下

# Building replaceFunc based of ignore_case and use_regexp flags 
if not ignore_case: 
    if not use_regexp: 
     def replaceFunc(string, search, replace): 
      return string.replace(search, replace) 
    else: 
     def replaceFunc(string, search, replace): 
      pattern = re.compile(search) 
      return pattern.sub(replace, string) 
else: 
    if not use_regexp: 
     # There is no standard puthon function for replacing string by ignoring case 
     def replaceFunc(string, search, replace): 
      # implementation from http://stackoverflow.com/questions/919056/case-insensitive-replace 
      return string 
    else: 
     def replaceFunc(string, search, replace): 
      pattern = re.compile(search, re.IGNORECASE) 
      return pattern.sub(replace, string 
+0

你爲什麼不把裏面的吧?爲什麼你需要吧? – BlackBear

+0

爲什麼不把你的if,否則放在'bar'裏 – ZdaR

+0

真實的情況太複雜了。我試圖把簡化的代碼。在實際的例子中,bar被稱爲內部循環。它也需要傳遞給其他函數 – ArmanHunanyan

回答

1

這裏有一個合理的方式來實現你想要的:

定義功能的
def bar1(): 
    return 'b1' 

def bar2(): 
    return 'b2' 

def foo(flag): 
    bar = bar2 if flag else bar1 
    return bar() 

print(foo(False)) 
print(foo(True)) 

一個好處bar1()bar2()foo()是它們能進行單元測試。

+0

好的,謝謝。這將工作。是避免不必要的被指名稱的方法。在我的情況下,他們將bar1 bar2 bar3 bar4。不好看。 – ArmanHunanyan

+0

@ArmanHunanyan當然,你可以任何你喜歡的方式命名函數。給他們有意義的名字 - 不是'bar1','bar2'等 – FMc