栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

全局变量与局部变量的性能

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

全局变量与局部变量的性能

当地人应该更快

根据此页面上的本地人和全球人:

当一行代码要求输入变量x的值时,Python将在所有可用的名称空间中按以下顺序搜索该变量:

  • 本地名称空间 -特定于当前函数或类方法。如果函数定义了局部变量x或具有参数x,Python将使用该变量并停止搜索。
  • 全局名称空间 -特定于当前模块。如果模块定义了名为x的变量,函数或类,Python将使用该变量,函数或类并停止搜索。
  • 内置名称空间 -所有模块都是全局的。作为最后的选择,Python将假定x是内置函数或变量的名称。

基于此,我假设局部变量通常更快。我的猜测是,您所看到的是脚本的某些特定之处。

当地人更快

这是一个使用局部变量的简单示例,这在我的机器上大约需要0.5秒(Python 3中为0.3秒):

def func():    for i in range(10000000):        x = 5func()

而全局版本大约需要0.7(Python 3中为0.5):

def func():    global x    for i in range(1000000):        x = 5func()

global
对已经是全局变量的变量做了一些奇怪的事情

有趣的是,此版本的运行时间为0.8秒:

global xx = 5for i in range(10000000):    x = 5

尽管此版本在0.9中运行:

x = 5for i in range(10000000):    x = 5

您会注意到,在这两种情况下,

x
都是全局变量(因为没有函数),并且它们都比使用局部变量慢。我不知道为什么
global x
在这种情况下声明有所帮助。

这种怪异在Python 3中不会发生(两个版本大约需要0.6秒)。

更好的优化方法

如果要优化程序,最好的方法是分析程序。这将告诉您花费最多的时间,因此您可以专注于此。您的过程应类似于:

  1. 启用概要分析后运行程序。
  2. 查看KCacheGrind或类似程序中的配置文件,以确定哪些功能花费的时间最多。
  3. 在这些功能中:
    • 寻找可以缓存函数结果的位置(因此您不必做太多工作)。
    • 寻找算法上的改进,例如用闭式函数替换递归函数,或用字典替换列表搜索。
    • 重新配置文件,以确保该功能仍然存在问题。
    • 考虑使用多重处理。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638518.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号