gpt4 book ai didi

Python:默认参数值与全局变量

转载 作者:太空宇宙 更新时间:2023-11-03 15:14:26 24 4
gpt4 key购买 nike

我在 Python 的 Queue 中看到了这个默认值的用法模块:

def _put(self, item, heappush=heapq.heappush):
heappush(self.queue, item)

def _get(self, heappop=heapq.heappop):
return heappop(self.queue)

我想知道为什么变量在这里用作函数参数?这只是品味问题还是某种优化?

最佳答案

这是一个微优化。默认值仅在函数定义时计算一次,局部变量(包括参数)访问起来比全局变量快一点,它们被实现为 C 数组查找而不是 dict 查找。它还允许避免重复查找 heapqheappushheappop 成员,而不会通过直接拉入它们来污染命名空间。

Timeit 片段:

python -mtimeit --setup "import heapq" --setup "def f(q,x,p=heapq.heappush): p(q,x)" "f([], 1)"
1000000 loops, best of 3: 0.538 usec per loop

python -mtimeit --setup "import heapq" --setup "def f(q,p=heapq.heappop): p(q)" "f([1])"
1000000 loops, best of 3: 0.386 usec per loop

python -mtimeit --setup "import heapq" --setup "def f(q,x): heapq.heappush(q,x)" "f([], 1)"
1000000 loops, best of 3: 0.631 usec per loop

python -mtimeit --setup "import heapq" --setup "def f(q): heapq.heappop(q)" "f([1])"
1000000 loops, best of 3: 0.52 usec per loop

关于Python:默认参数值与全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22700203/

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