如何在python中有效地创建全局变量

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


对于像"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上,所以这可能是一个逻辑项,可以传递给相关的方法,或者是一个逻辑项,用于定义这些方法。

一般来说,如果您开始考虑用尾随数字定义变量名,例如something1something2something3将在您的程序中使用,则必须立即停止并替换为名为somethings的列表,并使用somethings[2]等列表索引访问它们。

(注-为了便于沟通,我使用基于1的索引来对应描述-事实上,序列中项目的索引是基于0的,因此第5个项目实际上会被引用为sequence[4],它之前的项目是sequence[4-1], the 1st item being found at序列[0]。关键是,这是索引有意义的情况,而不是变量名的数字后缀。)