我已经在谷歌和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
来自设置模块的任何内容.
小智 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
你之外,你指的CONSTANT
是settings.CONSTANT
.