2012-02-11 49 views
3

我很難找出解決名稱衝突的最佳方法。這是我在我面前的要點:如何解決定義的函數和另一個函數中的參數之間的名稱衝突?

def clean(): 
    # do some cleaning stuff 

def build(clean=True): 
    if clean: 
     clean() 

糟糕。

有幾個原因,我不想在這裏更改API。解決這場衝突的最佳策略是什麼?現在,我在做:

def clean(): 
    # do some cleaning stuff 
clean_alias = clean 

def build(clean=True): 
    if clean: 
     clean_alias() 

,這可能是最好的/唯一的解決辦法很短的重命名的東西。我只是想知道是否有不同的方法可以從函數體內引用外部作用域中的clean

回答

2

嘗試:

globals()['clean']() 

全局()

返回表示當前全局符號 表的字典。這總是當前模塊的字典(在 功能或方法中,這是定義它的模塊,而不是調用它的 模塊)。

+0

很好的回答。爲了清楚起見,我最終在函數定義的頂部執行了'clean_func = globals()['clean']'。僅供參考,我會將此標記爲明天回答,它不會讓我標記它。 – jsdalton 2012-02-11 06:45:36

1

嘗試添加一個默認參數,該參數將全局clean函數綁定到局部變量。

def build(clean=True, cleanFn=clean): 
    if clean: 
     cleanFn() 
+0

好的建議。我結束了@Kos給出的答案,因爲他的解決方案不會在函數簽名中添加無關的噪音。 – jsdalton 2012-02-11 06:49:35

相關問題