所以这就是我得到的:
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)])
这当然只是程序的"要点"
所以一切都很好,就像我希望的那样,直到这部分结束。我遇到的问题是,当我试图打印或使用成功的最终结果时当全局循环时,我显然会得到一个NameError,当我试图向函数内的变量添加global时,我会得到SyntaxError:name‘blah’是全局的和局部的。如果我在函数外创建随机变量,那么我打印出的是那个变量,而不是满足while循环语句的那个变量。
现在我知道我可以把打印放在函数中,但这只是一个更大的重复上述基本步骤的程序。我想把总结果一起打印出来因此:
print "blah blah is %r, and %r %r %r etc.. blah blah.." % (x, y, z, a, b, etc)
如何弥补这一点,以便我能够准确地收集满足while循环的变量,并在整个程序的其他部分中使用它们?PS:很抱歉搞砸了,我还在学习阶段。。
使用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