【问题标题】:What is the maximum length for an attribute name in python?python中属性名称的最大长度是多少?
【发布时间】:2013-05-31 00:37:46
【问题描述】:

我正在编写一组 python 函数,用于对源代码项目执行某种一致性检查。我想为这些函数指定相当详细的名称,例如:check_5_theVersionOfAllVPropsMatchesTheVersionOfTheAutolinkHeader()

这么长的名字对python来说会是个问题吗?属性名称是否有最大长度?

【问题讨论】:

  • 请不要这样做。长名称并不总是坏事,但它们是一种代码味道。在这种情况下,我会缩短名称并在文档字符串中添加更详细的描述。另外,我要么详细记录结果,要么抛出一个明确的异常解释失败的检查。

标签: python python-2.7


【解决方案1】:

2.3. Identifiers and keywords 来自 Python 语言参考:

标识符的长度没有限制。


但是你很可能会违反PEP-8,这不是很酷:

将所有行限制为最多 79 个字符。

你还会违反PEP-20(Python 之禅):

可读性很重要。

【讨论】:

  • @AlexanderTobiasHeinrich 您的代码将完全不可读。使用docstrings
  • “完全描述”和“可读”是两个不同的东西。长而长的驼色琴弦是前者,而不是后者。
  • @chepner 确实如此。当我在代码中遇到AggregateAccountabilityViewManager<AlternateSetupScrollingLoaderView> aggregateAccountabilityViewManagerForAlternateSetupScrollingLoaderViews = new AggregateAccountabilityViewManager<AlternateSetupScrollingLoaderView>();(作为一个随机的Java示例)之类的东西时,我讨厌它。仅仅因为代码完成使这样的东西更容易编写并不意味着你应该这样做。
  • @AlexanderTobiasHeinrich 因为函数 ThatTellYouExactlyWhatTheyDoInCamelCase(areReallyAnnoyingBecauseItAllRunsTogether)。
  • @chepner:我喜欢 cmets,如果他们记录公共接口的话。如果他们不这样做,我宁愿尝试编写不需要 cmets 的代码。
【解决方案2】:

它们可能对程序员来说是个问题。保持函数名称合理简短,并使用文档字符串来记录它们。

【讨论】:

    【解决方案3】:

    由于属性名称只是在inst.__dict__ 上为您将遇到的 99% 的类进行哈希处理并转换为键,因此对长度没有真正的限制。只要它是可散列的,它就可以用作属性名称。对于其他 1% 的类,它们以破坏任何可哈希值都是有效属性名称的保证的方式摆弄 __setattr__\ __getattr__\ __getattribute__,但前面的不适用。

    当然,正如其他人所指出的那样,您会担心名称较长的属性的代码样式和质量问题。如果您发现自己需要这么长的名称,这可能表明您的程序存在设计缺陷,您可能应该考虑为您的数据提供更多层次结构,并在函数和方法中更好地抽象和划分职责。

    【讨论】:

    • 你真的认为解释器在每次调用时都会对方法名称进行哈希处理?
    • 如果写成the interpreter doesnt hash method names on each invocation, see ...会更有效率
    • 除非您使用 JIT 或其他类型的优化或前瞻解释器(据我所知,CPython 不是),否则是的。
    • 一点也不笨。我的理解是,CPython 解释器被专门设计为尽可能简单地扩展,这意味着要权衡性能优化。因此为什么存在 PyPy 等。
    • @delnan 似乎他们被拘留了......当使用 char* 字符串时。 hg.python.org/cpython/file/tip/Objects/object.c#l816 另一方面,setattr 确实利用 Python 字符串的实习。 hg.python.org/cpython/file/tip/Objects/object.c#l953
    猜你喜欢
    • 2015-11-24
    • 2011-10-09
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2017-11-15
    • 1970-01-01
    相关资源
    最近更新 更多