加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

什么是数据对象可接受的样式python

发布时间:2020-12-16 21:30:05 所属栏目:Python 来源:网络整理
导读:参见英文答案 python: list vs tuple,when to use each? 7个 python中数据对象的正常样式是什么.假设我有一个方法可以从某个地方(net,DB,….)获取客户应返回的对象类型.我看到几个选择: 一个元组 一本字典 一个类实例(数据类’正常’) 我相信还有其他人.做
参见英文答案 > python: list vs tuple,when to use each? 7个
python中数据对象的正常样式是什么.假设我有一个方法可以从某个地方(net,DB,….)获取客户应返回的对象类型.我看到几个选择:

>一个元组
>一本字典
>一个类实例(数据类’正常’)

我相信还有其他人.做我的第一个大python项目,所以想开始使用最佳实践

哇 – 对这个问题的负面反应感到惊讶.也许不清楚

我有很多不同的数据项,我想传递给我的代码.用户,产品,客户,订单……(实际上它们不是那样的,但它更简单,有明显类型的东西).所以我有

def get_user():
  return x

x应该是什么.一个名为user,dict,一个元组的类的实例……

没有与对象相关的方法,纯数据

看起来像命名元组是要走的路

编辑:作为一种风格如何

class product:
   pass

...

def get_product():
   ... db read stuff
   pr = product()
   pr.name = dbthing[0]
   pr.price = dbthing[1]
   return pr

是barf诱导或完善的风格或奇怪或什么?有用.从消费者的角度来看,它可以实现可读代码

def xxx():
  pr = get_product()
  total = amount * pr.price

解决方法

对于简单的数据记录,您通常应首先考虑collections.namedtuple,如果不适合任何原因,请使用其他选项之一.一旦你知道为什么它不适合通常建议使用哪些其他人.您可以将collections.namedtuple视为快速定义不可变“数据类”的快捷方式.

以数据库为例,如果你正在使用ORM,那么即使是最简单的记录也会被表示为对象[*],并且有充分的理由,因为它们都可以共同执行一些可以对它们执行的操作,例如存储更改回到数据库. ORM的教程/文档将指导您.如果您直接使用Python db API,那么SQL查询中的行将(最初)作为元组返回,但是当您拥有它们时,您当然可以使用它们执行您喜欢的操作.此外,数据库连接器可以在调用execute()之前提供操作它们的方法,例如在sqlite3中设置行工厂.

以“网”为例 – 嗯,有许多数据交换方法,但一个常见的例子是访问返回JSON数据的API.在这种情况下,没有太多选择,只能最初在程序中以与JSON结构相同的方式表示此数据:作为包含列表,字典,字符串和数字的列表和字典.再一次,一旦拥有它,你可以用你喜欢的东西做.按原样使用它是相当正常的,将它重新组织成其他东西也是很正常的.个人偏好和特定情况都会影响您实际选择的内容.

您当然应该将所有这些事情都视为可用选项.一般来说,你会使用:

>每个职位都有自己意义的元组.这就是为什么Python通过返回一个元组从函数返回“多个值”的原因,因为不同的东西可能是完全不同的类型,具有不同的含义.
>当可用键因记录而异时的字典.
>每个记录的键相同时的数据类.您可以将namedtuple用于不可变记录.
>当订单很重要但位置都相同时,列表或元组.观察到“元组是不可变的,列表是可变的”与“元组用于异构数据,列表用于同类数据”之间存在一点张力.我个人倾向于前者,但我已经看到后者的合理论据,所以如果你问人们一般如何做出选择,你就不能忽视这一点.

[*]好吧,元组和词典当然也是对象,我指的是除了这些数据结构之外的对象;-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读