2012-11-16 95 views
1

在模塊中,我有兩個函數,我們稱它們爲fgg採用命名參數f。我想從g內撥打f。如何訪問功能f?不幸的是,由於兼容性問題,我無法更改他們的名字。Python調用與命名參數同名的函數

編輯

要澄清一下,這就是我的意思是:

def f(): 
    ... code ... 

def g(f=1): 
    ... code ... 
    x = f() # error, f doesn't name the function anymore 
    ... code ... 
+0

你有幾個答案 - 如果你可以提供一些示例代碼來澄清你的意思,這將是很好的參考。 –

+0

@JonClements done –

回答

6

雖然globals()似乎是一個簡單的解決方案在這裏,你還可以通過定義內部函數實現內部g()調用全球f同樣的事情:

def f():print "hello" 

def g(f): 
    def call_global_f(): 
     global f 
     f() 
    call_global_f()  #calls the global f 
    print f    #prints the local f 

g('foo') 

輸出:

hello 
foo 
6

你可以爲函數添加一個新的名稱。

E.g:

def f(): 
    pass 

f_alt = f 

def g(f=3): 
    f_alt() 

只是不從模塊輸出f_alt。

+2

它也可以是一個默認參數:'def g(f = 3,f_alt = f)'。 – eryksun

+0

這限制了範圍,更優雅,@eryksun。尼斯。 – JasonFruit

+0

儘管我對'g(4,6)#fail hard'選項不滿意。也就是說 - 這不是函數參數的用途,它指出Python需要更靈活的方法來處理變量作用域。 – JasonFruit

6
使用 globals

基本例如:

def f(): 
    print 'f' 

def g(name): 
    globals()[name]() 

g('f')