引用函数还是创建一个只调用另一个函数的新函数?

时间:2010-01-03 22:58:04

标签: python function coding-style

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)

哪种风格更好?两者都有缺点吗?

4 个答案:

答案 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))会显示名称aa的文档。除非后者的问题对于您的特定应用(例如某种教程)是一种杀手,否则速度优势通常会胜出。

考虑,例如在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?