PEP8,locals()和插值

A. *_*son 2 python pep8

这是一些代码:

foo = "Bears"
"Lions, Tigers and %(foo)s" % locals()
Run Code Online (Sandbox Code Playgroud)

我的PEP8 linter(SublimeLinter)抱怨这个,因为foo是"未引用的".我的问题是PEP8是否应该将这种类型的字符串插值计为"引用",或者是否有充分的理由考虑这种"坏的风格".

Bre*_*arn 5

好吧,它没有被引用.可疑样式的部分locals()用于访问变量而不是仅通过名称访问它们.看到上一个问题,为什么这是一个可疑的想法.这不是一件可怕的事情,但对于你想要长期维护的程序来说,这不是一个好的风格.

编辑:当你使用文字格式字符串时,它似乎更明确.但前一篇文章的部分内容是,在较大的程序中,您可能最终不会使用文字格式字符串.如果它是一个小程序,你不在乎,继续使用它.但警告可能导致可维护性问题的事情也是风格指南和短信的一部分.

此外,locals不是在文字中明确引用的名称的规范表示.它是本地命名空间中所有名称的规范表示.如果你愿意的话,你仍然可以这样做,但它基本上是一个宽松/草率的替代方案,明确地使用你正在使用的名字,这也就是那种短信应该警告你的东西.