Python:如何从导入中打印所有常量的值?
Python : how to print values of all constants from an import?
我将常量(可以是字典)分组并存储在单独的 python 文件中。例如。 parameters.py :
HARD_COPY=True
BOOKS={
2018:{"author":"Hugo"}
}
etc.
在源文件中,我写:
import parameters as para
当然,我可以使用知道其名称的变量(para.BOOKS,等等)。
但我希望显示他们的名字和价值,不管这些名字是什么。
如果我写 dir(para),我可以看到这些名称的列表。
但是如何打印它们的值?
我想展示:
My defined variables in parameters.py :
HARD_COPY : True
BOOKS : {2018:{"author":"Hugo"}}
etc.
如果您正在考虑存储常量(或配置变量),您应该考虑以 json
格式存储它们。
假设您有一个名为 config.json
的配置文件,它具有以下值
{
"HARD_COPY": true,
"BOOKS": {
"2018": {
"author": "Hugo"
}
}
}
您可以使用以下
从 .py
文件加载这些值
import json
with open('config.json') as f:
data = json.load(f)
然后要迭代这些值,您可以执行以下操作
Python 2.7
for key, val in my_books.iteritems():
print(key, val)
>>>('HARD_COPY', True)
>>>('BOOKS', {2018: {'author': 'Hugo'}})
Python 3
for key, val in my_books.items():
print(key, val)
>>> HARD_COPY True
>>> BOOKS {2018: {'author': 'Hugo'}}
试试这个:
import parameters as para
for name in dir(para):
if not name.startswith('__'):
myvalue = eval('para.%s'%name)
print(name,"is",myvalue)
输出:
BOOKS is {2018: {'author': 'Hugo'}}
HARD_COPY is True
假设这是一个 "normal" 模块,您可以使用 __dict__
:
import parameters as para
for k, v in para.__dict__.items():
if k.isupper():
print("name:", k, "value:", v)
我使用了 isupper()
,因为这是常量的约定(尽管它们不是真的)。
给出:
name: HARD_COPY value: True
name: BOOKS value: {2018: {'author': 'Hugo'}}
编辑感谢@Aran-Fey
使用 getattr
按名称访问其值。
import parameters as para
print('My defined variables in parameters.py : ')
for variable in dir(para):
if not variable.startswith('__'):
print(variable, ':', getattr(para, variable))
输出:
My defined variables in parameters.py :
BOOKS : {2018: {'author': 'Hugo'}}
HARD_COPY : True
我将常量(可以是字典)分组并存储在单独的 python 文件中。例如。 parameters.py :
HARD_COPY=True
BOOKS={
2018:{"author":"Hugo"}
}
etc.
在源文件中,我写:
import parameters as para
当然,我可以使用知道其名称的变量(para.BOOKS,等等)。 但我希望显示他们的名字和价值,不管这些名字是什么。
如果我写 dir(para),我可以看到这些名称的列表。 但是如何打印它们的值?
我想展示:
My defined variables in parameters.py :
HARD_COPY : True
BOOKS : {2018:{"author":"Hugo"}}
etc.
如果您正在考虑存储常量(或配置变量),您应该考虑以 json
格式存储它们。
假设您有一个名为 config.json
的配置文件,它具有以下值
{
"HARD_COPY": true,
"BOOKS": {
"2018": {
"author": "Hugo"
}
}
}
您可以使用以下
从.py
文件加载这些值
import json
with open('config.json') as f:
data = json.load(f)
然后要迭代这些值,您可以执行以下操作
Python 2.7
for key, val in my_books.iteritems():
print(key, val)
>>>('HARD_COPY', True)
>>>('BOOKS', {2018: {'author': 'Hugo'}})
Python 3
for key, val in my_books.items():
print(key, val)
>>> HARD_COPY True
>>> BOOKS {2018: {'author': 'Hugo'}}
试试这个:
import parameters as para
for name in dir(para):
if not name.startswith('__'):
myvalue = eval('para.%s'%name)
print(name,"is",myvalue)
输出:
BOOKS is {2018: {'author': 'Hugo'}}
HARD_COPY is True
假设这是一个 "normal" 模块,您可以使用 __dict__
:
import parameters as para
for k, v in para.__dict__.items():
if k.isupper():
print("name:", k, "value:", v)
我使用了 isupper()
,因为这是常量的约定(尽管它们不是真的)。
给出:
name: HARD_COPY value: True
name: BOOKS value: {2018: {'author': 'Hugo'}}
编辑感谢@Aran-Fey
使用 getattr
按名称访问其值。
import parameters as para
print('My defined variables in parameters.py : ')
for variable in dir(para):
if not variable.startswith('__'):
print(variable, ':', getattr(para, variable))
输出:
My defined variables in parameters.py :
BOOKS : {2018: {'author': 'Hugo'}}
HARD_COPY : True