通过“设置”模块创建常量?
我最近刚接触Python,想创建一个“设置”模块,用来存储一些特定于应用程序的常量。
这是我想要设置的代码结构:
settings.py
CONSTANT = 'value'
script.py
import settings
def func():
var = CONSTANT
# do some more coding
return var
但是我遇到了一个Python错误,提示:
global name 'CONSTANT' is not defined.
我注意到Django的源代码中,他们的settings.py
文件里也有和我一样的常量。我有点困惑,为什么他们可以在脚本中导入这些常量,并在应用程序中使用。
编辑
感谢大家的回答!我尝试了以下方法:
import settings
print settings.CONSTANT
但我还是得到了同样的错误
ImportError: cannot import name CONSTANT
10 个回答
当你使用 import settings
这行代码时,系统会在全局范围内创建一个叫做 settings
的模块对象。这个对象里面包含了 settings.py
文件里定义的内容,作为它的属性。也就是说,在 settings.py
文件外面,你可以通过 settings.CONSTANT
来引用里面的 CONSTANT
这个内容。
步骤 1:在同一个文件夹里创建一个新的文件 settings.py,这样更方便访问。
#database configuration settings
database = dict(
DATABASE = "mysql",
USER = "Lark",
PASS = ""
)
#application predefined constants
app = dict(
VERSION = 1.0,
GITHUB = "{url}"
)
步骤 2:把设置模块导入到你的应用文件里。
import settings as s # s is aliasing settings & settings is the actual file you do not have to add .py
print(s.database['DATABASE']) # should output mysql
print(s.app['VERSION']) # should output 1.0
如果你不喜欢用像 s 这样的别名,你可以使用不同的语法。
from settings import database, app
print(database['DATABASE']) # should output mysql
print(app['VERSION']) # should output 1.0
注意:在第二种导入方法中,你可以直接使用字典的名称。
小贴士:如果你的设置文件很大,并且你会在应用中使用大部分设置,可以通过使用 * 来导入所有代码。
from settings import * # * represent all the code on the file, it will work like step 2
print(database['USER']) # should output lark
print(app['VERSION']) # should output 1.0
希望这对你有帮助。
最简单的方法就是把设置放在一个模块里。
(settings.py)
CONSTANT1 = "value1"
CONSTANT2 = "value2"
(consumer.py)
import settings
print settings.CONSTANT1
print settings.CONSTANT2
当你导入一个Python模块时,你需要在使用它的变量前加上模块的名字。如果你知道在某个文件里具体想用哪些值,并且不担心这些值在运行过程中会改变,那么你可以这样做:
from settings import CONSTANT1, CONSTANT2
print CONSTANT1
print CONSTANT2
不过我不建议过于依赖这种方式。这样会让阅读你代码的人很难知道这些值是从哪里来的,而且如果其他模块改变了这些值,你的代码就不会更新了。还有一种方法是:
import settings as s
print s.CONSTANT1
print s.CONSTANT2
这种方法可以减少你输入的内容,能够自动更新,并且只需要读代码的人记住,任何在s
后面的东西都是来自设置模块的。