一个函数可以有多个名称吗?

时间:2016-06-02 03:18:41

标签: python function

我正在使用Python开发一个机器人(2.7,3.4)。我定义了大约30多个基于bot命令使用的动态函数。在开发时,由于并非所有函数都已完成,我必须为它们定义一个空函数(如果我没有定义那么代码将不会运行),如下所示:

def c_about():
    return
def c_events():
    return
def c_currentlocation():
    return

等。许多虚拟函数。

问题:
在Python中以某种方式可以定义相同的函数,但有多个名称?
像这样:

def c_about(), c_events(), c_currentlocation():
    return

3 个答案:

答案 0 :(得分:5)

是的,完全可以,因为定义的函数存储在其他所有变量中。

help(bar)

仍然有一些与原始功能相关的元数据(foo仍然会提到lambda),但它不会影响功能。

另一个选择是将foo = bar = baz = lambda: None 用于单行:

window.parent.document 

答案 1 :(得分:2)

函数不实习(即自动共享multiple references到同一个不可变对象),但可以共享相同的名称:

>>> def a(): pass
... 
>>> a
<function a at 0x101c892a8>
>>> def b(): pass
... 
>>> b
<function b at 0x101c89320>
>>> c=a
>>> c
<function a at 0x101c892a8>  # note the physical address is the same as 'a'

很明显你可以做到:

>>> c=d=e=f=g=a
>>> e
<function a at 0x101c892a8>

对于尚未定义的函数,可以通过捕获try/catch

来使用NameError
def default():
    print "default called"

try:
    not_defined()
except NameError:
    default()

或者使用func的dict并捕获KeyError

funcs={"default": default}

try:
    funcs['not_defined']()
except KeyError:
    funcs['default']()      

或者,如果你喜欢带有func的dict的语法,你可以funcs.get(not_defined, default)()

答案 2 :(得分:1)

是的,它是可能的,甚至可以使用循环将它们存储在列表中。例如:

l = []
for i in range(10):
    l.append(lambda: None)

您可以通过l[index]()

等索引引用其中任何一个

例如:

c_events = 0
c_about = 1
l[c_events]()
相关问题