我正在使用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
答案 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]()