def a(something):
return something*something
#Case I - referencing
b = a
#Case II - creating a new function to call the first
def b(something):
return a(something)
哪种风格更好?两者都有缺点吗?
答案 0 :(得分:5)
取决于您的需求。
def a(something):
return something*something
b = a
def a(something):
return something+something
>>> b(3)
9
>>> a(3)
7
然而,如果你这样做了:
b = lambda x:a(x)
b和a将始终返回相同的
如果你想优化额外的函数调用,第一种方式更好,如果你想要b和a总是返回相同的东西,第二种方式更好。
答案 1 :(得分:2)
b = a
表示对b
的调用会更快(没有开销),但内省(例如help(b)
)会显示名称a
和a
的文档。除非后者的问题对于您的特定应用(例如某种教程)是一种杀手,否则速度优势通常会胜出。
考虑,例如在ref.py中:
def a(something):
return something*something
#Case I - referencing
b1 = a
#Case II - creating a new function to call the first
def b2(something):
return a(something)
现在:
$ python -mtimeit -s'import ref' 'ref.a(23)'
1000000 loops, best of 3: 0.716 usec per loop
$ python -mtimeit -s'import ref' 'ref.b1(23)'
1000000 loops, best of 3: 0.702 usec per loop
$ python -mtimeit -s'import ref' 'ref.b2(23)'
1000000 loops, best of 3: 0.958 usec per loop
即,b1
(纯粹引用)的调用与调用a
一样快(实际上在此次运行中显示速度提高2%,但这完全在测量的“噪音”范围内; - ),调用b2
(内部调用a
的全新函数)会产生20%的开销 - 而不是杀手,但通常需要避免的事情,除非性能牺牲会给你带来特别重要的东西。你的用例。
答案 2 :(得分:0)
首先不生成新功能,应该更好。
答案 3 :(得分:0)
函数调用会产生开销。案例我更快。案例II创建了新的功能无关功能。
为什么需要案例II?