gpt4 book ai didi

python - 使用 timeit 时无法将列表传递给此 Python 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:56:37 24 4
gpt4 key购买 nike

我编写了一个小脚本来生成具有不同输入的函数的运行时间。我的目的是绘制数字并向自己证明该函数确实具有二次运行时间。这是代码:

import timeit

seq = [875011, 549220, 400865, 913974, 699921, 108386, 328934, 593902, 805659, 916502, 597662]

subseq = []
num = 1000000 # How many times the algorithm must run

# Quadratic running time
def quad (S):
n = len(S)
A = [0] * n

for j in range(n):
total = 0
for i in range(j+1):
total += S[i]
A[j] = total / (j+1)

return A

def plot_func (name):
print('\n')
for i in range(len(seq)):
subseq = seq[0:i+1]
t = timeit.Timer('{}(subseq)'.format(name), 'from __main__ import {}, subseq'.format(name))
print(t.timeit(number=num))

plot_func('quad')

问题是运行时间没有变化,这是因为每次运行时,函数 quad 都引用全局 subseq,它是空的。我怎样才能将这个子序列正确地传递给这个函数?

P.S.:我也可以使用其他工具来完成这项工作,只要它能为我提供函数每次迭代的确切运行时间(根据使用的 CPU 时间)。

最佳答案

默认情况下,Python 认为 subseq 是函数的局部变量。此局部名称隐藏了您将参数传递给 timeit 计时器的全局变量。

要使赋值操作全局可见,需要在函数中使用之前将 subseq 变量声明为 global:

def plot_func (name):
global subseq
print('\n')
for i in range(len(seq)):
subseq = seq[0:i+1]

关于python - 使用 timeit 时无法将列表传递给此 Python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34638261/

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