2016-02-03 23 views
1

我正在开发一个小应用程序来管理我最喜欢的食谱。我有两个班级 - 成分食谱。 A 食谱组成和一些额外的数据(准备等)。我有一个成分类的原因是,我想保存一些额外的信息(适当的技术等)。 配料是独一无二的,所以不能有两个同名的。是否使用字符串作为对象标识符不良做法?

目前,我在“大”字典中使用成分的名称作为关键所有成分。这是有用的,因为我可以问我的模型,如果一种成分已经注册并且使用它(包括所有它的其他数据)用于新创建的配方。我回想起当我开始编程时(Java/C++),我总是读到,使用字符串作为标识符是不好的做法。 “魔术字符串”是我经常阅读的关键字(但我认为这描述了另一个问题)。我真的很喜欢字符串方式,因为它现在是。我也没有编码问题,因为所有的字符串生成/比较都是在我的程序中完成的(如果我没有弄错,Python3会使用UTF-8),但我不确定我所做的是否是正确的方法做到这一点。

是否使用字符串作为对象标识符不良做法?不同语言之间有差异吗?如果数据量增加,字符串是否会成为性能问题?有什么选择?

回答

3

否 - Python中的实际标识符总是字符串。无论你自己保存在字典中(你说你正在使用“大字典”),还是使用programmaticaly对象,并将其名称硬编码到源代码中。在后面这种情况下,Python会在其自动处理的内部字典之一中创建名称(可以作为globals()locals()的返回来检查)。

此外,Python在内部不使用“utf-8”,它使用“unicode” - 这意味着它仅仅是文本,您不应该担心该文本如何以实际字节表示。

+0

我总是忘记Python有多少内部使用字典,很好的答案!我得到Python3使用unicode(Python2有一个类,如果我没有错),但不是实际编码使用UTF-8? –

+1

不,由于性能原因,文本的内部编码必须具有每个字符的固定大小。它是“UCS4”编码,但根据每个字符串使用更紧凑的编码进行优化。 – jsbueno

1

Python的许多核心功能都依赖于字典。由于这个原因,pythonic默认dict已经有了一个相当有效的“从工厂”,体面散列等快速实现。

考虑到字典性能本身不应该是你需要的关注(最终调用虽然你处理/存储它的方式(以python文件,json,pickle,gzip等)可能会影响加载/访问时间等。

也许如果你提供一些代码行向我们展示了如何处理字典,我们可以提供具体的细节。

关于字符串标识符,请检查jsbueno's answer, he gave a much better explanation then I could do

+2

我使用字典很直截了当。只是{“name”:actual_obj,..}在类似工厂的对象中监督我的所有对象,以便不会有两次创建具有相同名称的对象。 –

+2

听起来像你,我不会担心。在我自己的一个项目中,我会处理一个包含数千个条目的词典,每个条目都包含列表和词典,还有一个用于文本描述的巨大多行字符串。 困扰我的唯一原因是它的磁盘大小,但我设法用'pickle'和'gzip'来解决这个问题。 –

相关问题