2013-08-07 123 views
4

我想完全理解"Stack Diagram" principle。有人可以檢查我是否正確嗎?堆棧圖 - Python

到目前爲止,我的理解是使用堆棧圖來跟蹤代碼中函數中使用的變量

但是我不知道是否在某個函數內創建了一個新的變量,是否應該包含在堆棧圖中。

例如,我們應該在堆棧圖中包含變量「p」嗎?比方說:

def g(y): 
    p = A(y, y) 
    print z, p 
    return p 

def A(x, y): 
    x = x + 1 
    return x * y 

x = 1 
y = x + 2 

我想我的籌碼應該是這個樣子:

<module> x --> 1 
      y --> 3 (Should I put 3 or x + 2 here) 

fct g  y --> 3 (should I stop here or should I include a line for the variable p) 


fct A  x --> 4 
      y --> 3 

的最後一個問題是:我們應該提到關於功能做什麼其他的事情什麼。就像函數A的情況一樣,它返回x * y = 12。我們是否應該將其包含在堆棧圖中,還是該圖正確地表達了它的方式?

由於

+0

我不熟悉「*'堆棧圖原理*」。你能提供一個參考嗎? –

+0

[鏈接](http://www.openbookproject.net/thinkcs/python/english2e/ch03.html#stack-diagrams) – Quester

+1

有可能沒有硬和設置規則,但函數變量通常在堆棧上創建,所以我會把p放在那裏與fct g。 – JoelWilson

回答

3

作爲每棧圖的定義:

各功能通過一幀表示。框架是一個框,它旁邊有一個函數名稱 以及其中的 函數的參數和變量。

這意味着你還需要考慮內函數定義變量。這是更好Ÿ作爲y=3而不是y=x+2保持的價值 - 因爲我們跟蹤變量值和通常不關心這些價值觀是如何獲得

要回答你的第二個查詢 - 它從描述看來,堆棧圖用於主要跟蹤變量到函數名稱映射。但是,請記住,當開發語言處理器和運行時時,它們確實對所提出的堆棧圖原理進行了必要的添加,從而使處理變量或識別錯誤變得簡單或高效。

希望這篇文章能夠澄清你的疑問