yl要考研 2024-04-09 01:29 采纳率: 0%
浏览 3

加了之后为何能跑起来

想问一下,为什么前面一个代码跑起来很慢,运行不出来,但是后面加了一个全局变量,函数加了一个if语句,就会跑起来啊,
,帮帮我吧~~

img

img

  • 写回答

5条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-04-09 01:30
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述:前面一个代码跑起来很慢,运行不出来,但是后面加了一个全局变量,函数加了一个if语句,就会跑起来。 解答: 首先需要看一下前面慢的代码是什么,有什么问题,可能是因为算法问题或者代码实现不够优化等原因导致执行效率低下。 其次,加入全局变量和if语句可能会对代码执行效率有所提高,但也需要具体分析。 下面给出一个案例,示范如何分析问题和进行优化: 代码1:没有全局变量和if语句
    def func1(n):
        res = []
        for i in range(n):
            for j in range(n):
                res.append(i + j)
        return res
    print(func1(1000))
    

    代码2:加入全局变量和if语句

    n = 0
    res1 = []
    def func2(num):
        global n, res1
        if num != n:
            res1 = []
            for i in range(num):
                for j in range(num):
                    res1.append(i + j)
            n = num
        return res1
    print(func2(1000))
    

    对比两个代码,可以发现: 1. func1代码中没有全局变量和if语句,每次调用都会执行两层循环,时间复杂度为O(n^2),在n很大的时候会导致执行时间过长。 2. func2代码中加入全局变量和if语句,可以在第一次调用的时候执行两层循环并将结果存储在全局变量中,后续的调用只需要判断参数是否变化,如果没有变化则直接返回全局变量中存储的结果,时间复杂度可以降为O(1)。 因此,可以得出结论:代码2比代码1执行效率更高,且在参数不变的情况下可以大大减少时间复杂度。 建议代码2可以进一步优化,可以使用装饰器或闭包等方法来避免使用全局变量的缺点。 代码3:加入装饰器的优化代码

    def func3(func):
        res = []
        n = 0
        def wrapper(num):
            nonlocal n, res
            if num != n:
                res = []
                for i in range(num):
                    for j in range(num):
                        res.append(i + j)
                n = num
            return res
        return wrapper
    @func3
    def func4(num):
        pass
    print(func4(1000))
    

    代码3中,使用了装饰器来优化代码2,避免了使用全局变量的缺点,代码更加简洁且可复用性更高。 注意:以上只是一个例子,具体问题需要具体分析,并根据具体情况进行优化,不应该一味地套用以上方法。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月9日

悬赏问题

  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数
  • ¥15 ADS时域 连续相位观察方法