我应该使用类还是字典?

2024-03-19

我有一个只包含字段而不包含方法的类,如下所示:

class Request(object):

    def __init__(self, environ):
        self.environ = environ
        self.request_method = environ.get('REQUEST_METHOD', None)
        self.url_scheme = environ.get('wsgi.url_scheme', None)
        self.request_uri = wsgiref.util.request_uri(environ)
        self.path = environ.get('PATH_INFO', None)
        # ...

这可以很容易地翻译成字典。该类对于未来的添加更加灵活,并且可以快速__slots__。那么使用 dict 会有好处吗?字典会比类更快吗?并且比带插槽的课程更快?


除非您需要类的额外机制,否则请使用字典。您还可以使用namedtuple http://docs.python.org/dev/library/collections.html#collections.namedtuple对于混合方法:

>>> from collections import namedtuple
>>> request = namedtuple("Request", "environ request_method url_scheme")
>>> request
<class '__main__.Request'>
>>> request.environ = "foo"
>>> request.environ
'foo'

这里的性能差异将是最小的,尽管如果字典不是更快的话我会感到惊讶。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该使用类还是字典? 的相关文章

随机推荐

  • THREE.js 正交相机缩放到鼠标点

    我正在为我们的 THREE js 应用程序开发正交相机 本质上 该相机将以 2D 方式向用户呈现场景 用户可以选择在 2D 和 3D 相机之间切换 该相机将允许平移和缩放到鼠标点 我可以进行平移 也可以进行缩放 但不能缩放到鼠标点 这是我的
  • 如何将数字加 1 到 NSMutableArray

    如何将 1 和变化的数字之间的每个数字添加到 NSMutableArray 中 以便它可以显示在 UITableView 中 例如 如果当前变化的数字是 8 则数组应包含 1 2 3 4 5 6 7 8 谢谢 我推荐以下方法 不需要数组 给
  • 广播联系人添加/更改?

    有没有我可以注册的标准广播意图BroadcastReceiver每当添加或更改联系人时都会触发该操作 我已经浏览文档有一段时间了 但没有找到任何东西 也许它隐藏在某个深处 而你们中的一个人知道在哪里 我在这里回答我自己的问题 如果有人有更好
  • 为什么“unbounded_array”比“vector”更有效?

    这里说 http www boost org doc libs 1 42 0 libs numeric ublas doc unbounded array htm that 无界数组类似于 std vector 可以在其中生长 大小超出任何
  • Android GridView 缺陷,如何删除右侧多余的空白

    我有一个基于 GridView 的日历 我有以下 XML 布局 其中选择器设置为 nullandroid listSelector null 根据我从这个网站得到的建议 现在我在 GridView 右侧得到了几个像素宽的条带 为什么 我已尽
  • Matlab bar:使用颜色图(jet)将颜色设置为条形高度的函数

    我有 4 组不同的多个酒吧 我想 对于每个组 用颜色绘制每个条形 该颜色是其高度值 即相关条形的值 的函数colormap jet 目前 我已经做了 h bar xpoints 1 4 bpcombined 1 4 grouped BarW
  • ffmpeg FLAC 24 位 96khz 至 16 位 48khz

    试图弄清楚 ffmpeg 目前正在努力将 24bit 96khz FLAC 文件转换为 16bit 48khz 基本示例 ffmpeg i input flac sample fmt s16 ar 48000 output flac 列出示
  • 导航控制器中的中心搜索栏 swift

    我需要更改导航控制器中搜索栏的方向以设置为中心 我使用以下代码以编程方式创建了搜索栏 lazy var searchBar UISearchBar UISearchBar frame CGRectMake 100 40 440 40 在 v
  • 引起原因:android.database.sqlite.SQLiteException:没有这样的表:strings:,编译时:SELECT id,string FROM strings WHERE id =?

    我收到此错误 07 16 20 58 27 299 E AndroidRuntime 14005 Caused by android database sqlite SQLiteException no such table strings
  • android studio 9补丁编辑器突然黑屏

    任何有在 AS 中使用 9 补丁编辑器的经验的人突然开始使用黑色背景的图像 我使用它没有任何问题 现在突然我无法进行任何编辑 下图应该有透明背景 如果我尝试拖动可拉伸补丁 则不会发生任何变化 可以这么说 它会不断重置自身 此更改也发生在同一
  • 在 Django 模型中存储和转义 Django 标签和过滤器

    我将模型中的内容输出到模板 但是某些模型字段调用存储在其他模型中的数据 这种情况只发生在少数领域 我想知道是否使用if与在模型中存储 django 标签相比 使用 django 标签来评估这一点会更有效 答复这个问题 https stack
  • Haskell 中的基因编程

    有 GenProg http hackage haskell org package genprog http hackage haskell org package genprog 例如 但这仅涉及数值优化 在本例中找到描述数据的方程 但
  • 具有固定标题和固定列的可滚动 HTML 表格

    我想创建一个包含可滚动数据的表 我必须冻结表格的第一行和第一列 表格的第一行和第一列必须自动调整宽度和高度 以适应表格内容区域中的可变单元格尺寸 因为用户将添加具有可变内容量的新表格单元格 有人问了一个相关问题 如何在滚动时锁定表格的第一行
  • 当(深度)克隆时,使用 String.Copy 还是 str1 = str2?

    当 深度 克隆自定义对象时 我应该使用clone str1 String Copy obj str1 or clone str1 obj str1 我更喜欢后者 更短 更快 但它 安全 吗 我会指出这个线程 https stackoverf
  • ODP.NET 托管库确实可以解析别名,但 32 位库可以

    我的机器上安装了 32 位驱动程序 它们是由一些 DBA 安装和配置的 我编写了一个简单的脚本来测试驱动程序 大致如下 using DataTable table new DataTable using OracleConnection c
  • 我收到此错误“无模块:ngResource”

    尝试使用 Angular resource 但它返回的不是一种方法 浏览稀疏的文档 我发现了这一点 angular module productServices ngResource 您应该将其包含在您的应用程序模块中 公平地说 我把它放进
  • 如何根据定时器改变div的内容

    jquery 有没有办法根据计时器更改 div 的内容 假设我有提供 提示 的模块 提示内容应每 5 秒更改一次 Thanks 制定一系列提示 然后做一个interval5秒改变div的内容 我假设您想要随机提示 请参阅 jsFiddle
  • SVG 内的链接图像

    想象一下以下 SVG
  • Android NDK - NativeActivity 与 JNI 库

    两年前 我开发了一个增强现实框架android 7 闪电泡芙 http developer android com about versions android 2 1 html 由于 AR 应用程序是计算密集型任务 因此我开发了一个 JN
  • 我应该使用类还是字典?

    我有一个只包含字段而不包含方法的类 如下所示 class Request object def init self environ self environ environ self request method environ get R