1

在一个模块中,我有两个函数,我们称它们fg. g接受一个命名参数f。我想f从里面打电话g。如何访问该功能f?不幸的是,由于兼容性问题,我无法更改它们的名称。

编辑

为了澄清,这就是我的意思:

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

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

3 回答 3

7

您可以为该函数添加一个新名称。

例如:

def f():
    pass

f_alt = f

def g(f=3):
    f_alt()

只是不要从模块中导出 f_alt 。

于 2012-11-16T16:47:09.817 回答
6

使用的基本示例globals

def f():
    print 'f'

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

g('f')
于 2012-11-16T16:47:10.050 回答
5

虽然globals()在这里看起来是一个简单的解决方案,但您也可以通过在内部定义一个g()调用 global的内部函数来实现相同的目的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
于 2012-11-16T17:08:51.433 回答