gpt4 book ai didi

javascript - 关于简单键值存储的字典与对象的 Python 最佳实践是什么?

转载 作者:太空狗 更新时间:2023-10-30 01:41:43 26 4
gpt4 key购买 nike

在使用 Javascript 编程一段时间后,我有点喜欢对象和关联数组(字典)之间的二元性:

//Javascript
var stuff = { a: 17, b: 42 };

stuff.a; //direct access (good sugar for basic use)
stuff['a']; //key based access (good for flexibility and for foreach loops)

在 python 中,基本上有两种方法可以做这种事情(据我所知)

字典:

stuff = { 'a': 17, 'b':42 };

# no direct access :(
stuff['a'] #key based access

或对象:

#use a dummy class since instantiating object does not let me set things
class O(object):
pass

stuff = O()
stuff.a = 17
stuff.a = 42

stuff.a #direct access :)
getattr(stuff, 'a') #key based access

编辑:一些回复还提到 namedtuples 作为一种为不可变对象(immutable对象)创建轻量级类的内置方法。


所以我的问题是:

  1. 关于我应该使用字典还是对象来存储简单的、无方法的键值对,是否有任何既定的最佳实践?

  2. 我可以想象有很多方法可以创建小的辅助类来使对象方法不那么难看(例如,在构造函数上接收字典然后覆盖 __getattribute__ 的东西)。这是个好主意还是我想多了?

    • 如果这是一件好事,最好的方法是什么?另外,是否有任何使用上述方法的优秀 Python 项目可供我从中汲取灵感?

最佳答案

不确定“已建立的最佳实践”,但我所做的是:

  1. 如果值类型是同类的——即映射中的所有值都是数字,则使用字典。
  2. 如果值是异构的,并且如果映射始终具有给定的或多或少的常数键集,请使用对象。 (最好使用实际的类,因为这闻起来很像数据类型。)
  3. 如果值是异构的,但映射中的键发生变化,则掷硬币。我不确定这种模式多久出现一次 Python,像这样的字典特别出现在 Javascript 中以“伪造”带有关键字参数的函数。 Python 已经有了这些,**kwargs 是一个字典,所以我会选择字典。

或者换句话说,用对象表示数据类型的实例。用字典表示临时或临时映射。 Swallow 不得不使用 ['key'] 语法——让 Python 感觉像 Javascript 对我来说只是感觉被强制了。

关于javascript - 关于简单键值存储的字典与对象的 Python 最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9142050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com