gpt4 book ai didi

python - 将函数绑定(bind)到局部作用域中的名称有什么好处?

转载 作者:行者123 更新时间:2023-12-01 09:19:05 26 4
gpt4 key购买 nike

我大约一天前读过一些东西,不记得在哪里了,该帖子的作者指出,最好将函数调用绑定(bind)到本地空间中的名称,而不是创建 访问调用。

例如:

def foo():
a = math.cos
b = math.sin
x = a(1) * b(0)

对比

def foo():
x = math.cos(1) * math.sin(0)

现在这是在性能的背景下,如果这些调用不止一次,但这让我想知道为什么它的性能更好,什么时候应该这样使用?这样做不会让命名空间变得困惑吗?

最佳答案

我做了一些分析来了解它们之间的实际区别是什么。您可以find the REPL here从 timeit 导入 timeit

import math
from math import sin

x = 10_000_000


def from_import():
for _ in range(x):
sin(100)


def import_module():
for _ in range(x):
math.sin(100)


def local_var():
s = math.sin
for _ in range(x):
s(100)


def local_import():
from math import sin
for _ in range(x):
sin(100)


funcs = (from_import, import_module, local_var, local_import)

for func in funcs:
print("{:<15} {}".format(
func.__name__, timeit(
func.__name__ + '()', number=1, globals=globals())))

结果:

from_import     4.354339323996101
import_module 5.608195230990532
local_var 3.982630196987884
local_import 3.9956486110022524

令我惊讶的是,本地名称比全局名称的性能要好得多。两者都远远优于附加属性查找。

关于python - 将函数绑定(bind)到局部作用域中的名称有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50956798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com