嗨,我如何将这个随机生成的局部变量的最终结果变成全局变量?蟒蛇

时间:2013-02-23 19:40:07

标签: python global-variables global

所以这就是我得到的:

x = ['a', 'b', 'c']

y = ['a', 'b', 'c']


def stuff(this, that):
  this = x[randint(0, 2)]
  that = y[randint(0, 2)]
  while this != 'c' or that != 'c'
     print "some %r stuff here etc..." % (this, that)
     this = x[randint(0, 2)]
     that = y[randint(0, 2)] 

stuff(x[randint(0, 2)], x[randint(0, 2)])

这只是该计划的“要点”。

所以一切正常,就像我希望它在这部分之后直到 我遇到的问题是当我尝试打印或使用成功的最终结果时 while-loop全局,我显然得到一个NameError,当我尝试向函数内部的变量添加全局时,我得到SyntaxError:name'blah'是全局的和本地的。 如果我在函数外部创建随机变量,那么我打印出来的是THAT变量,而不是满足while循环语句的变量。

现在我知道我可以将打印放在功能中,但这只是一个更大的部分 重复上述基本步骤的程序。我想一起打印总结果 如此:

print "blah blah is %r, and %r %r %r etc.. blah blah.." % (x, y, z, a, b, etc)

如何解决这个问题,以便我能准确地收集满足while循环的变量并在整个程序的其他部分使用它们? PS:对不起,我还在学习阶段......

1 个答案:

答案 0 :(得分:3)

使用return语句将结果返回给调用者。这是传递变量的首选方法(global并不理想,因为它会破坏全局命名空间,并且可能会在以后创建名称冲突问题。)

def pick_random(x, y):
    return random.choice(x), random.choice(y)

this, that = pick_random(x, y)

如果您想继续从函数中生成值,可以使用 yield

def pick_random(x, y):
    while True:
        this, that = random.choice(x), random.choice(y)
        if this == 'c' and that == 'c':
            return
        yield this, that

for this, that in pick_random(x, y):
    print this, that