使用“设置”模块创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
,一个叫做settings
的module
对象被放置在全局命名空间中,而这个对象所携带的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,产品…)