Python中文
首页
教程
问答
标签
搜索
登录
注册
Python:用类变量替换全局变量“合适”吗
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>请善待我,我是Python初学者:-)</p> <p>现在,我看到编写Python程序的“最佳实践”是将主代码包装在“main”函数中,并执行<code>if "__main__" == __name__:</code>测试来调用“main”函数。在</p> <p>这当然会导致在“main”函数中使用一系列<code>global</code>语句来访问全局变量。在</p> <p>我想知道,将全局变量收集到一个自定义类中,比如<code>_v</code>,并使用<code>_v.</code>前缀引用变量,是否更合适(或者说是“Pythonic”)?在</p> <p>另外,作为一个必然的问题,这会对性能或异常处理产生任何负面影响吗?在</p> <hr/> <p><strong>编辑:</strong>程序的总体结构如下:</p> <pre><code>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) </code></pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>通常,最佳实践是避免全局变量,而是通过方法调用将变量传递给需要它们的类/方法。例如:如果你在做一个计算器,那么做一个加法方法,它接受2个整数并返回一个整数。这与将2个输入整数和1个输出整数作为全局变量,并让add方法处理这些变量相反。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
Kivy:在屏幕管理器中使用on_press even更改屏幕
4 回答
kivy:在幻灯片转换开始时播放声音,按下按钮后停止播放
3 回答
KIVY:在应用程序初始化期间添加小部件
1 回答
Kivy:在我的应用程序中添加工具栏
6 回答
Kivy:在排序ListAdapter d时无法更新ListView
7 回答
kivy:在根控件中用on-unpress-even更改嵌套按钮的颜色
6 回答
Kivy:在桌面上隐藏鼠标光标
9 回答
Kivy:在每次触摸之后(在触摸屏上)在FloatLayout中添加图像,但是所有以前的图像都消失了
10 回答
KIVY:在油漆应用程序中更改线条颜色
3 回答
Kivy:在简单的“Hello World”脚本中出现未知类<WindowManager>错误?
10 回答
Kivy:在网格中分配操作/分类按钮
8 回答
Kivy:在视图滚动时保持绘图说明在视图中
6 回答
Kivy:在重新进入的屏幕上将切换按钮重置为“正常”
5 回答
Kivy:基于基线更新标记中心位置
1 回答
Kivy:增加BoxLayout所需的空间?
8 回答
Kivy:声音开始播放,但在Android上是“不可阻挡的”,但在Windows上却可以
2 回答
Kivy:处理事件
10 回答
Kivy:多个屏幕和菜单项没有实现
1 回答
Kivy:如何为python创建的小部件使用画布
3 回答
Kivy:如何从kvlang中的任何屏幕访问嵌套的screenmanager
10 回答