【发布时间】:2014-12-08 17:41:00
【问题描述】:
请善待我,我是 Python 初学者 :-)
现在,我发现编写 Python 程序的“最佳实践”是将主代码包装在“主”函数中,并执行 if "__main__" == __name__: 测试以调用“主”函数。
这当然需要在“main”函数中使用一系列global 语句来访问全局变量。
我想知道将全局变量收集到自定义类中是否更合适(或者“Pythonic”,如果你愿意的话),比如_v,并使用_v. 前缀来引用变量?
另外,作为一个必然的问题,这会对性能或异常处理产生负面影响吗?
编辑:以下是程序的一般结构:
paramset = {
0: { ...dict of params... }
1: { ...dict of params... }
2: { ...dict of params... }
}
selector = 0
reset_requested = False
selector_change = False
def sighup_handler(signal,frame):
global reset_requested
logger.info('Caught SIGHUP, resetting to set #{0}'.format(new_selector))
reset_requested = True
selector = 0
def sigusr1_handler(signal,frame):
global selector
new_selector = (selector + 1) % len(paramset)
logger.info('Caught SIGHUP, changing parameters to set #{0}'.format(new_selector))
selector = new_selector
selector_change = True
signal.signal(signal.SIGHUP, sighup_handler)
signal.signal(signal.SIGUSR1, sigusr1_handler)
def main():
global reset_requested
global selector
global selector_change
keep_running = True
while keep_running
logger.info('Processing selector {0}'.format(selector))
for stage in [process_stage1, process_stage2, process_stage3]
err, result = stage(paramset[selector])
if err is not None:
logger.critical('Stage failure! Err {0} details: {0}'.format(err, result))
raise SystemError('Err {0} details: {0}'.format(err, result))
else:
logger.info('Stage success: {0}'.format(result))
if reset_requested:
stage_cleanup()
reset_requested = False
else:
inter_stage_pause()
if selector_change:
selector_change = False
break
selector = (selector + 1) % len(paramset)
【问题讨论】:
-
@John1024 我已经编辑了我的问题,只添加了相关的逻辑。
-
谢谢。这不是minimal working example,但看看是什么激发了这个问题非常有帮助。
标签: python global-variables class-variables