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

时间:2012-09-02 02:17:19

标签: python variables global

我需要创建和引用大量变量,例如diceOutCome2,diceOutCome4 ... diceOutCome12,diceOutComeHornHigh,diceOutComeHornFive等等,我一直需要引用它们,所以我希望将它们存储为全局变量而不是将它们作为参数传递。

最重要的是,我也尝试不用引号引用它们,而是使用名称或属性如counter.diceOutCome2 ... 2这里不是数字2的结果但是结果用骰子滚动1和1,四会存储骰子总数为2,2,3,3等信息。

创建它们的最有效方法和正确的语法是什么?

def setGlobalVariables():
    counter=[]
    for i in range (0, 12):
        global counter["count_"+i]=0

1 个答案:

答案 0 :(得分:3)

对于像“diceOutCome2”这样的属性,实际上最好使用带有索引号的列表,例如counter.diceOutCome[2]。这使您可以轻松地遍历所有diceOutcomes列表,或者在n为5时将第5个骰子结果之前的结果称为counter.diceOutCome[n-1]

Horn bets可以作为对象的方法计算,或者你之前引用的计数器对象(counter.highHorn(5)可以评估counter.diceOutcome[5]上的高角投注的赢或输),或者在用于表示掷骰结果的对象上,其列表保存在diceOutCome中,如counter.diceOutcome[5].highHorn()中所示。或HighHorn可以是Bet的子类; HighHorn的实例是使用DiceOutcome构造的,HighHorn将实现wins()方法,在Bet上以抽象方式定义,在子类中实现 - 将其评估为{ {1}}。由于diceOutcomes都附加到HighHorn(counter.diceOutCome[5]).wins(),因此这可能是传递给相关方法的逻辑项,或者是用于定义这些方法的逻辑项。

通常,如果您开始考虑使用尾随数字来定义变量名称,例如countersomething1something2将在您的程序中使用,必须立即停止并替换为名为something3的列表,并使用somethings等列表索引访问它们。

注意 - 为了便于沟通,我使用基于1的索引来对应描述 - 实际上,序列中项目的索引是从0开始的,因此第5项实际上会被引用为somethings[2],它之前的项是sequence[4] sequence [0]`。重点是,这是索引有意义的情况,而不是数字后缀关于变量名。)