how to efficiently create global variables in python
我有很多需要创建和引用的变量,例如diceoutcome2、diceoutcome4…DicOutcome12、DicOutcomeHornHigh、DicOutcomeHornFive等,我始终需要引用它们,因此我希望将它们存储为全局变量,而不是将它们作为参数传递。
最重要的是,我也不想用索引编号来引用它们,而是用名称或属性(如counter)来引用它们。2这里不是数字2的结果,而是掷骰子1和1的结果,4将存储骰子总数和2、2、1、3信息等。
创建它们最有效的方法和正确的语法是什么?
1 2 3 4
| def setGlobalVariables():
counter=[]
for i in range (0, 12):
global counter["count_"+i]=0 |
- 只是不要。列个清单,或者听写,然后使用索引。
- 谁说你有很多需要创建的变量?这听起来像是许多自动化、调试等工作。在编码之前,一些额外的计划可以减少必要的工作和复杂性吗?
- python的可能副本:使用vars()将字符串赋给变量
- @保罗-对于OP,我认为问题不是计划不够充分,而是教育不足。在新的程序员中,用数字"索引"命名变量是一种常见的策略——事实上,一些教程在早期的课程中"教"它,以便引导导师走到不可避免的死胡同,以便将索引到集合中的主题作为摆脱这种混乱的一种整齐的方式呈现出来。我认为用户1518600在学习基本的编程工具和技术之前太快地进入了一个复杂的应用程序,之后他/她的计划将得到更好的了解。
对于像"diceoutcome2"这样的属性,您最好使用带有索引号的列表,比如counter.diceOutCome[2]。这允许您轻松地遍历所有骰子结果列表,或者在n为5时将第5个骰子结果之前的结果称为counter.diceOutCome[n-1]。
号角下注可以计算为一个对象上的方法,可以是您之前引用的计数器对象(counter.highHorn(5)可以评估在counter.diceOutcome[5]上高号角下注的胜负),也可以是用于表示骰子结果的对象上的方法,如counter.diceOutcome[5].highHorn()中所示,骰子结果中保存有一个列表。或者,HighHorn可以是Bet的一个子类;HighHorn的一个实例是使用diceoutcome构造的,HighHorn将实现wins()方法,该方法在Bet的摘要中定义,将在子类中实现,并将其评估为HighHorn(counter.diceOutCome[5]).wins()。由于diceoutcomes都附加在counter上,所以这可能是一个逻辑项,可以传递给相关的方法,或者是一个逻辑项,用于定义这些方法。
一般来说,如果您开始考虑用尾随数字定义变量名,例如something1、something2、something3将在您的程序中使用,则必须立即停止并替换为名为somethings的列表,并使用somethings[2]等列表索引访问它们。
(注-为了便于沟通,我使用基于1的索引来对应描述-事实上,序列中项目的索引是基于0的,因此第5个项目实际上会被引用为sequence[4],它之前的项目是sequence[4-1], the 1st item being found at序列[0]。关键是,这是索引有意义的情况,而不是变量名的数字后缀。)