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

Python 一个函数可以有多个名称吗?,python,function,Python,Function,我正在Python(2.7、3.4)上开发一个机器人。我定义了大约30多个动态函数,这些函数将基于bot命令使用。在开发过程中,由于不是所有函数都完成了,我必须为它们定义一个空函数(如果我没有定义,那么代码就不会运行),如下所示: def c_about(): return def c_events(): return def c_currentlocation(): return def c_about(), c_events(), c_currentlocation

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

def c_about():
    return
def c_events():
    return
def c_currentlocation():
    return
def c_about(), c_events(), c_currentlocation():
    return
等等。许多虚拟函数

问题:
在Python中,定义同一个函数但有多个名称是可能的?
大概是这样的:

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

是的,这是完全可能的,因为定义的函数和其他所有函数一样存储在变量中

def foo():
    pass

baz = bar = foo
仍然存在一些与原始函数相关的元数据(
help(bar)
仍将提到
foo
),但它不会影响功能

另一个选项是对一个行程序使用
lambda
s:

foo = bar = baz = lambda: None

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

>>> 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'
或者使用funcs命令并捕获
键错误

def default():
    print "default called"

try:
    not_defined()
except NameError:
    default()
funcs={"default": default}

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

或者,如果您喜欢使用funcs dict的语法,可以执行
funcs.get(未定义,默认值)(

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

l = []
for i in range(10):
    l.append(lambda: None)
您可以通过
l[index]()

例如:

c_events = 0
c_about = 1
l[c_events]()

或者,您可以定义函数映射字典:
cmd={'about':c_about,…}
。这允许您分离命令名和函数名,在类和包上组织函数,并执行类似于
cmds.get('mycommand',dummy_function)
的操作,如果函数不存在(尚未存在),该操作将返回dummy。在开发过程中没有编码样式的标记。如果您需要在代码完成之前与其他人共享代码,请在这些方法上方添加注释,告知其他人它们是稍后开发代码的占位符函数。如果您只是希望随机函数名在之前未定义的情况下默认不返回任何内容。。。python可以做到这一点。。。所以,如果您想创建一个自动响应未命名方法调用的对象,请问这个问题。