使用字符串作为对象标识符的不良做法?

时间:2016-02-03 19:19:50

标签: python string

我正在开发一个小应用程序来管理我最喜欢的食谱。我有两个班级 - 成分食谱食谱成分和一些其他数据(准备等)组成。我有一个 Ingredient 类的原因是,我想在其中保存一些额外的信息(适当的技术等)。 成分是唯一的,因此不能有两个具有相同名称。

目前,我将所有成分保存在“大”字典中,使用成分的名称作为关键字。这是有用的,因为我可以问我的模型,是否已经注册了一种成分并使用它(包括所有它的其他数据)用于新创建的配方。

但回想起当我开始编程(Java / C ++)时,我总是读到,使用字符串作为标识符是不好的做法。 “魔术字符串”是我经常阅读的关键字(但我认为这描述了另一个问题)。我现在非常喜欢字符串方法。我也没有编码问题,因为所有的字符串生成/比较都是在我的程序中完成的(Python3在任何地方使用UTF-8,如果我没有记错的话),但我不确定我正在做的是正确的方法做到这一点。

使用字符串作为对象标识符的不良做法?不同语言之间是否存在差异?如果数据量增加,字符串是否会成为性能问题?有哪些替代方案?

2 个答案:

答案 0 :(得分:3)

不 - 实际上Python中的标识符总是字符串。您是否自己保留在字典中(您说您使用的是#34;大字典")或者该对象是使用programmaticaly,其名称硬编码到源代码中。在后一种情况下,Python在其自动处理的内部字典之一中创建名称(可以作为globals()locals()的返回进行检查)。

此外,Python不使用" utf-8"在内部,它确实使用" unicode" - 这意味着它只是文本,你不应该担心该文本是如何用实际字节表示的。

答案 1 :(得分:1)

Python的许多核心功能都依赖于字典。出于这个原因,pythonic默认dict已经带来了一个非常有效,快速的实现"来自工厂",体面的哈希等。

考虑到这一点,字典性能本身不应该是你需要的东西(最终调用它来读取和写入),尽管你处理它/存储它的方式(在python文件,json,pickle,gzip中)等)可能会影响加载/访问时间等。

也许如果您提供几行代码向我们展示您如何处理字典,我们可以提供具体的详细信息。

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