在我对过度复杂的简单事物的无尽追求中,我正在研究最“ Pythonic”的方法来在Python egg包中的典型“ config.py
”中提供全局配置变量。
传统方式(啊,好吧,# define !)如下:
MYSQL_PORT = 3306
MYSQL_DATABASE = 'mydb'
MYSQL_DATABASE_TABLES = ['tb_users', 'tb_groups']
因此,以下列方式之一导入全局变量:
from config import *
dbname = MYSQL_DATABASE
for table in MYSQL_DATABASE_TABLES:
print table
要么:
import config
dbname = config.MYSQL_DATABASE
assert(isinstance(config.MYSQL_PORT, int))
这是有道理的,但有时可能会有些混乱,尤其是当您尝试记住某些变量的名称时。此外,提供一个以 变量为属性* 的 “配置”对象 可能更灵活。因此,从
bpython config.py文件开始,我 想到 了:
***
class Struct(object):
def __init__(self, *args):
self.__header__ = str(args[0]) if args else None
def __repr__(self):
if self.__header__ is None:
return super(Struct, self).__repr__()
return self.__header__
def next(self):
""" Fake iteration functionality.
"""
raise StopIteration
def __iter__(self):
""" Fake iteration functionality.
We skip magic attribues and Structs, and return the rest.
"""
ks = self.__dict__.keys()
for k in ks:
if not k.startswith('__') and not isinstance(k, Struct):
yield getattr(self, k)
def __len__(self):
""" Don't count magic attributes or Structs.
"""
ks = self.__dict__.keys()
return len([k for k in ks if not k.startswith('__')\
and not isinstance(k, Struct)])
和一个“ config.py”,该类导入该类,内容如下:
from _config import Struct as Section
mysql = Section("MySQL specific configuration")
mysql.user = 'root'
mysql.pass = 'secret'
mysql.host = 'localhost'
mysql.port = 3306
mysql.database = 'mydb'
mysql.tables = Section("Tables for 'mydb'")
mysql.tables.users = 'tb_users'
mysql.tables.groups = 'tb_groups'
并以这种方式使用:
from sqlalchemy import MetaData, Table
import config as CONFIG
assert(isinstance(CONFIG.mysql.port, int))
mdata = MetaData(
"mysql://%s:%s@%s:%d/%s" % (
CONFIG.mysql.user,
CONFIG.mysql.pass,
CONFIG.mysql.host,
CONFIG.mysql.port,
CONFIG.mysql.database,
)
)
tables = []
for name in CONFIG.mysql.tables:
tables.append(Table(name, mdata, autoload=True))
这似乎是在包内存储和获取全局变量的一种更具可读性,表达力和灵活性的方法。
有史以来最大的想法?应对这些情况的最佳实践是什么?什么是 您的 存储和获取全局名称和变量您的包内的方法吗?
我做了一次。最终,我发现简化的basicconfig.py可以满足我的需求。如果需要,您可以将命名空间与其他对象一起传递以供其引用。您还可以从代码中传递其他默认值。它还将属性和映射样式语法映射到同一配置对象。
This is a list of variables that are always implicitly assigned to the . This is handy for making global variables or server variables available to all templates without having to manually assign them
null 我将把所有三个文件转换成标准格式(文件1格式--一个有4列的输出)。要转换为标准格式,我需要引用文件第一行中的头记录。因此,如果我的输入文件是256MB,并且调用了多个映射器,是否有任何方法使每个映射器可以引用一个全局变量(头信息)。 简而言之,是否有一种方法为所有调用我的配置单元UDF的映射器提供一个公共变量? 注意:UDF将在单个列表上运行,读取完整的行,然后将其写入下一个表HDFS
但是我想存储一些复杂的对象,像这样 context-param不可能做到这一点,我还能在Java或Spring中使用什么?
我需要在我所有的idea运行配置中使用一个环境变量。我目前使用run- 我试图设置env变量在我的linux系统使用在各种会话配置文件:,,,但是intellij在运行过程中似乎忽略了这些变量,即使当我从intellij内置终端启动时,它显示了正确的输出。 我也尝试使用intellij. env文件插件,然后设置在文件在项目根。也没起作用。
问题内容: 我只想在多个地方使用a :不仅是视图和控制器,而且还包括和其他配置文件。 我不想要这样的事情:使用Config类加载配置文件;使用CI 等。 我只想声明一个给定的(它可以是一个常数,但我需要将它作为一个变量),并在所有地方绝对使用它。 实际上…我想知道CI引导程序中哪个PHP文件是第一个要解析的文件,因此我可以在其中引入我的全局变量…但不是核心/系统或不适当的文件,而是“最佳”适合此简
本文向大家介绍Lua中的全局变量、非全局变量总结,包括了Lua中的全局变量、非全局变量总结的使用技巧和注意事项,需要的朋友参考一下 前言 Lua将其所有的全局变量保存在一个常规的table中,这个table称为“环境”。这种组织结构的优点在于,其一,不需要再为全局变量创造一种新的数据结构,因此简化了Lua的内部实现;另一个优点是,可以像其他table一样操作这个table。为了便于实施这种操作,L
我使用的是swing,有一个函数(CreateAndShowGUI())可以监听上、左、右键的按下 现在,当我运行程序并按下任意键(向上、向左、向右、向下)时,我可以看到按下的键变量被设置为True。但当我试图在main中访问相同的内容时,按下的这个键的值为false。谁能帮我找出我错的地方吗?
问题内容: 如何在Java中定义全局变量? 问题答案: 要定义全局变量,你可以使用静态关键字 现在你可以通过调用从任何地方访问a和b