KathyLJQ 2020-02-24 13:29 采纳率: 0%
浏览 592
已采纳

timeit,Timer 传入带多参数函数,提示参数未定义

from timeit import Timer

def back_sort(lis):
    n= len(lis)
    if n == 1:
        return (lis)
    mid = n//2
    left_sorted = back_sort(lis[:mid])
    right_sorted = back_sort(lis[mid:])
    n_left = len(left_sorted)
    n_right = len(right_sorted)
    left_start = 0
    right_start = 0
    merged_lis = []   
    while left_start < n_left and right_start <n_right:
        if left_sorted[left_start] <= right_sorted[right_start]:
            merged_lis.append(left_sorted[left_start])
            left_start += 1    
        else: 
            merged_lis.append(right_sorted[right_start])
            right_start += 1

    merged_lis += left_sorted[left_start:]             
    merged_lis += right_sorted[right_start:]
    return merged_lis 

def merge_sort(lis,start,end):
    if start == end:
        return [lis[start]]
    mid = (start+end)//2
    right_sorted = merge_sort(lis,mid+1,end)   
    left_sorted = merge_sort(lis,start,mid)
    n_left = len(left_sorted)
    n_right = len(right_sorted)
    left_start = 0
    right_start = 0
    merged_lis = []   
    while left_start < n_left and right_start <n_right:
        if left_sorted[left_start] <= right_sorted[right_start]:
            merged_lis.append(left_sorted[left_start])
            left_start += 1    
        else: 
            merged_lis.append(right_sorted[right_start])
            right_start += 1          
    merged_lis += left_sorted[left_start:]             
    merged_lis += right_sorted[right_start:]
    #print(merged_lis)
    return merged_lis 


if __name__ == "__main__":
    lis = [49,38,65,97,76,13,27,49]
    n = len(lis)-1
    print(back_sort(lis))
    print(merge_sort(lis,0,n))
    t1 = Timer('back_sort(lis)', 'from __main__ import back_sort')
    t2 = Timer('merge_sort(lis,0,n)', 'from __main__ import merge_sort')
    print(t1.timeit(number=1000))
    print(t2.timeit(number=1000))

为什么会提示lis未定义呢?
请大神指点!

  • 写回答

1条回答 默认 最新

  • 代码的灵魂是bug! 2020-02-24 15:13
    关注

    你这样传参是错误,python会认为那是个字符串,而不是你定义的lis,应该这样传

    t1 = Timer('back_sort(%s)'%lis, 'from __main__ import back_sort')
    t2 = Timer('merge_sort(%s,%s,%s)'%(lis,0,n), 'from __main__ import merge_sort')
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上