使用“设置”模块创build常量?

我已经完成search谷歌和在这里在Stackoverflow,但无法find我在找什么。

我对Python比较陌生。 我正在创build一个“设置”模块,其中将存储各种应用程序特定的常量。

这是我想如何设置我的代码

settings.py

CONSTANT = 'value' 

script.py

 import settings def func(): var = CONSTANT --- do some more coding --- return var 

我得到一个Python错误,指出:“全球名称”恒定“没有定义。

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

编辑

谢谢你所有的答案! 我尝试了以下内容:

 import settings print settings.CONSTANT 

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

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

(settings.py)

 CONSTANT1 = "value1" CONSTANT2 = "value2" 

(consumer.py)

 import settings print settings.CONSTANT1 print settings.CONSTANT2 

当你导入一个python模块时,你必须在模块名称的前面加上你从中提取的variables。 如果你确切地知道你想在给定的文件中使用什么值, 并且你不担心它们在执行期间改变,那么你可以做

 from settings import CONSTANT1, CONSTANT2 print CONSTANT1 print CONSTANT2 

但是我不会被最后一个带走。 这让读取你的代码的人很难知道值来自哪里。 并阻止那些值被更新,如果另一个客户端模块改变它们。 最后一种方法是

 import settings as s print s.CONSTANT1 print s.CONSTANT2 

这样可以节省你input的时间,而且会传播更新,只需要读者记住s之后s任何内容来自设置模块。

第1步:在同一个目录下创build一个新的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 

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

 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 

我希望帮助。

当你import settings ,一个叫做settingsmodule对象被放置在全局命名空间中,而这个对象所携带的settings.py中的属性是属性。 也就是说,在settings.py之外,你把CONSTANT称为settings.CONSTANT

把你的settings.py保持原样,然后你可以像Django一样使用它:

 import settings def func(): var = settings.CONSTANT 

查看我发布的答案是否可以阻止修改Python中的对象? 它可以做你想做的事情(也可以强制使用大写标识符)。 对于这个问题,这个问题实际上可能比另一个问题更好。

…或者,如果你真的想将settings.py中的所有常量导入到全局命名空间中,可以运行

 from settings import * 

…但是另外使用settings.CONSTANT ,正如其他人在这里提到的,是非常正确的。

我是新的python,但如果我们定义一个像setings.pyfunction的常量

 def CONST1(): return "some value" 

main.py

 import setings print setings.CONST1() ##take an constant value 

在这里,我只看到一个,价值不能改变,但它的工作像一个function..

尝试这个:

在settings.py中:

 CONSTANT = 5 

在你的主文件中:

 from settings import CONSTANT class A: b = CONSTANT def printb(self): print self.b 

我认为你的上面的错误是来自导入的设置文件来不及。 确保它在文件的顶部。

另外值得一提的是simple-settings项目,该项目允许您在runtim中将设置提供到脚本中,从而允许特定于环境的设置(思考开发,testing,产品…)