0

我有一个绘制形状并记录点位置之一的函数。假设那个点是 (2,1) 所以 x = (2,1)

如何在我的 main 中使用 x?

def shape():
    t.forward(10)
    x = t.position()

t.goto(x)

我怎样才能使它工作?

4

2 回答 2

1

您提供的代码孤立地没有意义(即使除了范围规则)。您定义一个函数,调用该函数时将创建x. 然后你想使用x. 但是您从未调用过该函数,因此x甚至不存在!您可能在其他地方调用过该函数,但您可能多次调用过它,在这种情况下x可能存在多个版本。你想要哪一个?

这就是您不能简单地引用在该函数之外的函数中定义的变量的原因。这不仅仅是惹恼你的限制;作为一个概念,它没有意义。

要遵循的经验法则是,您通过将信息传递函数的参数来将信息传递给函数,然后通过返回函数将信息函数传递回其调用者。这意味着您的函数应该如下所示:

def shape(t):
    t.forward(10)
    return t.position

然后你会这样做:

x = shape(t)
t.goto(x)

可以作为非局部变量访问t(全局或外部函数范围;不清楚您使用的是哪个)。但除非你有充分的理由,否则通常最好不要这样做;显式传递信息往往会使您的代码更具可读性,使更改更加独立,并且更有可能在多个上下文中可用(毕竟这是创建函数的重点)。如果不返回它就无法访问x(如果你唯一要做的就是返回它,那么即使在函数内部给它一个名称也没有多大意义,因为没有其他人可以使用该名称)。

使用全局变量(或其他非局部变量)有很多帮助,但是当您将它们视为一般规则的例外时,生活通常会更容易,所以当您这样做时,您会故意使用这些技术;你的习惯应该是避免全局和非本地。

于 2012-06-07T01:18:01.737 回答
1

为了访问x主程序中的值,从函数(通过return x)返回它,在这种情况下shape()设置/更改它。

于 2012-06-07T01:08:28.217 回答