【问题标题】:how to efficiently create global variables in python如何在python中高效地创建全局变量
【发布时间】:2012-08-27 07:27:38
【问题描述】:

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

最重要的是,我也尝试不使用索引号来引用它们,而是使用名称或属性,例如 counter.diceOutCome2... 2 这里不是 2 号结果,而是骰子掷出 1 和 1 的结果,四个将存储骰子总数为 2,2, 1,3 信息等。

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

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

【问题讨论】:

  • 别这样。制作列表,或者可能是字典,并使用索引。
  • 谁说您需要创建大量变量?这听起来需要大量的工作来实现自动化、调试等。在编码之前进行一些额外的计划是否可以减少必要的工作量和复杂性?
  • @Paul - 对于 OP,我认为问题不在于计划不足,而在于教育不足。使用尾随数字“索引”命名变量是新程序员的常用策略 - 事实上,一些教程在早期课程中“教授”它,以便将受训者引导到不可避免的死胡同,以便呈现索引到集合的主题作为摆脱这种混乱的整洁方式。我认为 user1518600 在学习基本的编程工具和技术之前太快进入复杂的应用程序,之后他/她的计划将会更好地了解。

标签: python variables global


【解决方案1】:

对于像“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 的抽象中定义,将在子类中实现 - 将其评估为 HighHorn(counter.diceOutCome[5]).wins()。由于 diceOutcomes 都附加到 counter,因此这可能是传递给相关方法的逻辑项,或者是定义这些方法的逻辑项。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多