相关疑难解决方法(0)

什么是字典dict键常量的Python最佳实践?

在Python中使用字典(dict)键时,似乎有一些通用的方法:

  1. some_dict['key_name'] # string constants everywhere

  2. some_dict[KeyConstants.key_name] # where class KeyConstants: key_name: 'key_name'

  3. some_dict[KEY_NAME] # with from some_module import KEY_NAME # a module level constant

    1. 'key_name'的缺点是你在整个代码中重复常量.这不是干的.更糟糕的是,如果您要发布您的API(从最广泛的意义上说),您将让API的消费者在任何地方重复这些常量,如果您想要将'key_name'更改为'better_key_name',那将是一个重大变化.

    2. 这是键入的语言DRY方法,常量合并在一个地方.它唯一的缺点是它丑陋,可读性稍差,而且更冗长.Pythonic原则主要禁止这样做.它允许您轻松更改表示键的常量,因为每个人都在对变量KeyConstants.key_name进行编码.它也适用于IDE进行重构.

    3. PEP 8样式指南中建议使用模块级常量.ALL_CAPS_ARE_LOUD并且难以输入.这具有选项1和2的一些优点.

dict键常量有哪些其他最佳实践?以上哪种方法是首选的,何时?

python coding-style

16
推荐指数
1
解决办法
7379
查看次数

以编程方式在Python中创建变量

可能重复:
如何以编程方式设置全局(模块)变量?

我有一个名为Variable的类定义如下:

class Variable():
    def __init__(self, name):
        self.name = name
        self._value = None
    def value(self):
        return self._value
    def __repr__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

我想创建26个大写的单字母变量实例,如下所示:

A = Variable('A')
B = Variable('B')
...
Z = Variable('Z')
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试了各种解决方案,我提出的最好的解决方案是:

from string import uppercase
for char in uppercase:
    exec "%s = %s" % (char, Variable(str(char))) in None
Run Code Online (Sandbox Code Playgroud)

但是,这不会运行并给我这个错误:

Traceback (most recent call last):
  File "C:\Users\Administrator\Dev\python\truthtable\truthtable.py", line 7, in <module>
    exec "%s = %s" % (char, Variable(str(char))) in None
  File "<string>", line 1, in <module>
NameError: name …
Run Code Online (Sandbox Code Playgroud)

python

11
推荐指数
2
解决办法
1万
查看次数

停止模块内的评估

我已经习惯了编写像这样工作的函数:

def f():
  if sunny:
    return
  #do non-sunny stuff
Run Code Online (Sandbox Code Playgroud)

我试图找出在模块中使用的等效语法.我想做这样的事情:

if sunny:
  import tshirt
  #do something here to skip the rest of the file
import raincoat
import umbrella
#continue defining the module for non-sunny conditions
Run Code Online (Sandbox Code Playgroud)

我知道我可以把它写成一个,if/else但是缩进模块的其余部分似乎很愚蠢.

我可以将其余的代码移动到一个单独的模块中并有条件地导入它,但这看起来很痛苦.

python module

10
推荐指数
1
解决办法
2287
查看次数

标签 统计

python ×3

coding-style ×1

module ×1