使用"设置"模块创建常量?

Lar*_*ark 75 python

我已经在谷歌和Stackoverflow上进行了搜索,但找不到我想要的内容.

我对Python比较陌生.我希望创建一个"设置"模块,其中将存储各种特定于应用程序的常量.

这是我想要设置我的代码的方式

settings.py

CONSTANT = 'value'
Run Code Online (Sandbox Code Playgroud)

script.py

import settings

def func():
    var = CONSTANT
    # do some more coding
    return var
Run Code Online (Sandbox Code Playgroud)

我收到一条Python错误说明:"全局名称'CONSTANT'未定义.

我注意到Django的源代码,他们的settings.py文件有像我一样命名的常量.我对如何将它们导入脚本并通过应用程序引用感到困惑.

编辑

谢谢你的所有答案!我尝试了以下方法:

import settings

print settings.CONSTANT
Run Code Online (Sandbox Code Playgroud)

我得到相同的错误:ImportError:无法导入名称CONSTANT

aar*_*ing 134

最简单的方法是将设置作为模块.

(settings.py)

CONSTANT1 = "value1"
CONSTANT2 = "value2"
Run Code Online (Sandbox Code Playgroud)

(consumer.py)

import settings

print settings.CONSTANT1
print settings.CONSTANT2
Run Code Online (Sandbox Code Playgroud)

导入python模块时,必须使用模块名称为从中提取的变量添加前缀.如果您确切地知道要在给定文件中使用它的值,并且您不担心它们在执行期间会发生变化,那么您可以执行

from settings import CONSTANT1, CONSTANT2

print CONSTANT1
print CONSTANT2
Run Code Online (Sandbox Code Playgroud)

但我不会被最后一个带走.这使得阅读代码的人很难分辨出值来自哪里.如果另一个客户端模块更改了这些值,则排除这些值的更新.最后一种方法是

import settings as s

print s.CONSTANT1
print s.CONSTANT2
Run Code Online (Sandbox Code Playgroud)

这样可以节省您的输入,传播更新,并且只需要读者记住s来自设置模块的任何内容.

  • 我虽然常量的想法是它不能在运行时更改? (3认同)

小智 16

步骤1:在同一目录中创建新文件settings.py以便于访问.

#database configuration settings

database = dict(
    DATABASE = "mysql",
    USER     = "Lark",
    PASS     = ""
)

#application predefined constants

app = dict(
    VERSION   = 1.0,
    GITHUB    = "{url}"
)
Run Code Online (Sandbox Code Playgroud)

第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
Run Code Online (Sandbox Code Playgroud)

如果你不喜欢使用像s这样的别名,你可以使用不同的语法

from settings import database, app

print(database['DATABASE'])   # should output mysql

print(app['VERSION'])         # should output 1.0
Run Code Online (Sandbox Code Playgroud)

关于第二种导入方法的注意事项,您可以直接使用dict名称

一个小技巧,你可以使用*导入设置文件中所有代码,以防你有一个大文件,你将在你的应用程序上使用它上面的大部分设置

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
Run Code Online (Sandbox Code Playgroud)

我希望有所帮助.


小智 5

当你import settings,一个module被调用的对象settings被放置在全局命名空间中 - 并且这个对象带有settings.py属于的属性.即在settings.py你之外,你指的CONSTANTsettings.CONSTANT.