Python中访问类变量的性能

2023-12-01

我想知道访问类变量(字典)时性能是否有任何差异在同一个类的方法内 using:

self.class_variable_dict.add(some_key, some_value)

and

ClassName.class_variable_dict.add(some_key, some_value)

显然,只要没有同名的实例变量,两者都可以工作,但是是否有任何原因/用例我们应该选择其中一个而不是另一个?


通过访问它ClassName而不是通过selfslightly更快,因为如果您通过以下方式访问它self它必须首先检查实例名称空间。但我认为差异根本不会很大,除非您有分析信息表明差异很大。

因此,我建议使用您认为作为人类更容易阅读/理解的一种。

从语义上讲,只有当class_variable_dict变量在某处被遮蔽——特别是,如果 (a)self定义一个同名变量;或 (b)self是一个子类的实例ClassName,以及该子类(或其基类之一,仍然是ClassName) 定义了一个同名的变量。如果这两者都不正确,那么它们在语义上应该是相同的。

Edit:

delnam有一个很好的观点:有些因素可能会使两者更快。我坚持我的观点,除非是在一个非常非常紧密的循环中,否则差异是微不足道的。为了测试它,我创建了我能想到的最紧密的循环,并用它计时timeit。结果如下:

  • 通过类 var 访问:20.226秒
  • 通过 inst var 访问:23.121秒

根据几次运行,看起来误差线大约为 1 秒——也就是说,这是一个统计上显着的差异,但可能不值得担心。这是我的测试代码:

import timeit

setup='''
class A:
    var = {}
    def f1(self):
        x = A.var
    def f2(self):
        x = self.var

a = A()
'''
print 'access via class var: %.3f' % timeit.timeit('a.f1()', setup=setup, number=100000000)
print 'access via inst var: %.3f' % timeit.timeit('a.f2()', setup=setup, number=100000000)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python中访问类变量的性能 的相关文章

随机推荐

  • 在多线程应用程序中使用 GeckoFX

    我在使用 GeckoFX 时遇到了如何准确处理线程的问题 当尝试在其他线程中使用 GeckoWebBrowser 时 它似乎不断抛出错误 具体来说 我在此测试应用程序中尝试执行的操作是生成网页的缩略图并将其显示在表单上 而不是 WebBro
  • Delphi - 使用表单在应用程序内安装、启动、停止服务[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我有 Delphi 应用程序 我添加了service对此 我如何安装并启动和停止它主表格
  • PreferenceActivity 中的自定义标题栏?

    我在所有活动中使用自定义标题栏 但我可以在 PreferenceActivity 中使用它 我在 PreferenceActivity 中能做的就是 Override protected void onCreate Bundle saved
  • Java中的重叠继承

    我有一个重叠的继承层次结构 系统了解可以是客户 提供商和代理的人员 一个人必须属于这些类别之一 但可以属于两个或三个 即一个人可以同时是客户和提供者 在数据库中 我认为问题已经解决 每个类一个表 人员 客户端 提供者和代理表 以及从子类表的
  • 从 Font Awesome 中提取 SVG

    我想从中获取 SVG 路径数据字体真棒字形 以便我可以在 HTML 中直接将它们用作 SVG 我认为这就像复制粘贴路径数据一样简单fontawesome webfont svg 但是当我在 HTML 中使用它时 符号全部呈现颠倒 有人知道为
  • LINQ to Entities - 如何在调用 SaveChanges() 后最好地获取 IDENTITY 值

    该网站上提出了许多与执行插入后检索 IDENTITY 相关的问题 我们获取身份的方法是在调用 SaveChanges 之后立即进行以下调用 context MyClass OrderByDescending c gt c Id FirstO
  • Angular7输入类型文件上传不起作用

    目前我正在工作 Angular Angular 7 输入类型 文件 不工作 Angular6 工作正常 Angular 6提交输入文件类型数据 我会得到这样的字段列表 但 Angular 7 只能得到这样的图像路径 只有我将 Angular
  • 使用 odeint 函数定义

    很菜鸟的问题 所以请耐心听我说 我按照这里给出的例子 gt http www codeproject com Articles 268589 odeint v2 Solving ordinary Differential equations
  • gensim - Doc2Vec:在英语维基百科上训练时出现 MemoryError

    我从英语维基百科转储中提取了 145 185 965 个句子 14GB 我想根据这些句子训练 Doc2Vec 模型 不幸的是我 只有 32GB RAM 并且得到了内存错误当尝试训练时 即使我将 min count 设置为 50 gensim
  • 未定义的类“FirebaseUser”

    我是颤振新手 我有一个问题Firebase 身份验证 Google 身份验证 The Firebase用户没有定义 代码 FirebaseAuth auth FirebaseAuth instance GoogleSignIn google
  • 字符串是不可变的,那么replace()是如何工作的呢?

    我试图用最后一个字母 字符替换字符串的第一个字母 字符 用第一个字母 字符替换最后一个字母 字符 例如 abcd gt dbca Java 中的字符串是不可变的 那么我们如何解释这个程序的行为呢 请看一下最终输出 str1 没有字符 a 但
  • R 中的分层随机抽样

    我正在努力使用具有 3078 个观察值的分层随机抽样来创建大小为 100 的分层样本 分层随机抽样必须满足的条件是 FARMS92600 为 分层 并采用比例分配 当我遵循分层函数时 我不明白如何继续 https gist github c
  • 如何在 SwiftUI 中检测点击手势位置?

    适用于 SwiftUI 而不是普通 UIKit 非常简单的示例代码 例如在灰色背景上显示红色框 struct ContentView View State var points CGPoint CGPoint x 0 y 0 CGPoint
  • 如何应用将向量返回到每个 numpy 数组元素的函数(并获取更高维度的数组)

    我们直接用代码写吧 注意 我将映射器 原始示例使用 x gt x 2 x 3 x 仅作为示例 编辑为通用黑盒函数 这导致了麻烦 import numpy as np def blackbox fn x I can t be changed
  • 将 Symfony2 缓存存储在其他地方?

    有没有办法将 symfony 2 缓存 应用程序 缓存 存储在文件系统以外的其他地方 Memcache S3 还是其他什么 有内置选项吗 您只能通过重载 AppKernel 类中的 getCacheDir 方法将其移出项目目录 将其移至 M
  • 为 UIWebView 请求设置 Cookie

    我想嵌入一个UIWebView进入我的 MonoTouch 应用程序中尚未本地实现的区域 为了对网站进行身份验证 我想设置一个包含当前会话密钥的 cookie 我尝试创建一个NSDictionary与 Cookie 的属性 然后创建一个新的
  • 是否可以修补 File::Find::Rule 以自动处理文件名字符编码/解码?

    假设我有一个名为 UNICODE 0xE6 UTF8 0xC3 0xA6 在当前目录中 然后 我想用File Find Rule找到它 use feature qw say use open qw std utf8 use strict u
  • CMake:在静态库中包含库依赖项

    我正在构建一个staticCMake 中的库 它依赖于许多其他静态库 我希望它们全部包含在输出 lib a 文件中 这样我就可以向客户发送一个大的 lib 文件 在 Visual Studio 2010 中有一个选项 链接库依赖关系 它正是
  • 根据滚动逐渐改变背景颜色

    我有一个滚动视图 当它向下滚动时 背景颜色会改变 我知道我可以使用 UIView 动画来实现此自动化 但我想根据滚动的百分比设置颜色 我想设置 0 和 100 颜色 并且当前颜色将被计算并设置为scrollViewDidScroll 0 5
  • Python中访问类变量的性能

    我想知道访问类变量 字典 时性能是否有任何差异在同一个类的方法内 using self class variable dict add some key some value and ClassName class variable dic