2012-06-07 29 views
0

我有一個繪製形狀並記錄點的位置之一的函數。假設這個點是(2,1)所以x =(2,1)如何在函數中使用一個變量在Python中的主?

如何在我的main中使用x?

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

t.goto(x) 

我該如何做到這一點?

+0

''在形狀()中返回x'並將其更改爲...'t.goto(shape())'? – birryree

+0

我想出來了,在'shape(x)'和主''x = shape(x)''t.goto(x)''中加入'return x'' –

+0

@ user67784你的解決方案是什麼? – robert

回答

1

爲了在主程序中訪問x的值,從函數返回它(通過return x),在這種情況下,它設置/更改它的值爲shape()

1

你提出的代碼沒有意義孤立(即使除了範圍規則)。你定義了一個被調用的函數將會創建x。那麼你想用x。但你從來沒有打過這個功能,所以x甚至不存在!您可能在其他地方調用了該函數,但您可能已多次調用該函數,在這種情況下,可能會存在許多版本的x。你想要哪一個?

這就是您不能簡單地引用該函數外部函數中定義的變量的原因。這不僅僅是限制你煩惱,它作爲一個概念是沒有意義的。

拇指遵循的規則是,你通過將其在函數的參數信息傳達給一個功能,您可以通過它返回信息返回一個函數調用者。這意味着你的函數大概應該是這樣的:

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

然後,你會怎麼做:

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

可以訪問t爲非本地變量(全局或外部功能範圍;它不是清除你正在使用的)。但除非你有充分的理由,否則最好不要那樣做;明確地傳遞信息往往會使你的代碼更具可讀性,使更改更加孤立,並且更有可能在多個上下文中使用(畢竟這是製作函數的關鍵)。你沒有返回它不能訪問x(如果你唯一要做的就是返回它,那麼即使在函數內給它一個名字也沒什麼意義,因爲沒有其他人可以使用這個名字)。

在使用全局變量(或其他非本地人)有幫助的情況下有很多例外情況,但是當您將它們視爲一般規則的例外情況時,生活通常會更容易,因此您在使用時會故意使用這些技術;你的習慣應該是避免全局和非本地人。

+0

我使用的是烏龜圖形,t是對象的名字't = turtle.Turtle()'對不起,應該澄清一下 –

相關問題