Python调用与命名参数同名的函数

pyt*_*hor 1 python scope function global-variables local-variables

在模块中,我有两个功能,让我们给他们打电话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 ...
Run Code Online (Sandbox Code Playgroud)

Jas*_*uit 6

您可以为该函数添加新名称.

例如:

def f():
    pass

f_alt = f

def g(f=3):
    f_alt()
Run Code Online (Sandbox Code Playgroud)

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

  • 它也可以是默认参数:`def g(f = 3,f_alt = f)`. (2认同)

Jon*_*nts 6

基本示例使用globals:

def f():
    print 'f'

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

g('f')
Run Code Online (Sandbox Code Playgroud)


Ash*_*ary 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')
Run Code Online (Sandbox Code Playgroud)

输出:

hello
foo
Run Code Online (Sandbox Code Playgroud)