我有一个绘制形状并记录点位置之一的函数。假设那个点是 (2,1) 所以 x = (2,1)
如何在我的 main 中使用 x?
def shape():
t.forward(10)
x = t.position()
t.goto(x)
我怎样才能使它工作?
您提供的代码孤立地没有意义(即使除了范围规则)。您定义一个函数,调用该函数时将创建x
. 然后你想使用x
. 但是您从未调用过该函数,因此x
甚至不存在!您可能在其他地方调用过该函数,但您可能多次调用过它,在这种情况下x
可能存在多个版本。你想要哪一个?
这就是您不能简单地引用在该函数之外的函数中定义的变量的原因。这不仅仅是惹恼你的限制;作为一个概念,它没有意义。
要遵循的经验法则是,您通过将信息传递给函数的参数来将信息传递给函数,然后通过返回函数将信息从函数传递回其调用者。这意味着您的函数应该如下所示:
def shape(t):
t.forward(10)
return t.position
然后你会这样做:
x = shape(t)
t.goto(x)
您可以作为非局部变量访问t
(全局或外部函数范围;不清楚您使用的是哪个)。但除非你有充分的理由,否则通常最好不要这样做;显式传递信息往往会使您的代码更具可读性,使更改更加独立,并且更有可能在多个上下文中可用(毕竟这是创建函数的重点)。如果不返回它就无法访问x
(如果你唯一要做的就是返回它,那么即使在函数内部给它一个名称也没有多大意义,因为没有其他人可以使用该名称)。
使用全局变量(或其他非局部变量)有很多帮助,但是当您将它们视为一般规则的例外时,生活通常会更容易,所以当您这样做时,您会故意使用这些技术;你的习惯应该是避免全局和非本地。
为了访问x
主程序中的值,从函数(通过return x
)返回它,在这种情况下shape()
设置/更改它。