2013-03-15 84 views
2

我是Python新手。我一直在努力使自己熟悉Numpy,Scipy和Matplotlib,因爲我有科學背景,並且希望讓自己成爲神經科學實驗室工作中更有競爭力的候選人。Python中的函數2.7 vs 3.x

我一直在瀏覽Matplotlib文檔,試圖通過示例來學習。我將參考以下URL中的示例:http://matplotlib.org/users/pyplot_tutorial.html

我感覺這些示例是用Python 3.x編寫的,而且由於我使用的是Python 2.7而遇到了問題。我使用2.7,因爲我想要的某些庫不適用於3.x.

該網站給出了一個使用子圖的例子。他們的代碼如下:


import numpy as np 
import matplotlib.pyplot as plt 

def f(t): 
    return np.exp(-t) * np.cos(2*np.pi*t) 

t1 = np.arange(0.0, 5.0, 0.1) 
t2 = np.arange(0.0, 5.0, 0.02) 

plt.figure(1) 
plt.subplot(211) 
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k') 

plt.subplot(212) 
plt.plot(t2, np.cos(2*np.pi*t2), 'r--') 

這應該返回這樣一個圖:http://i.stack.imgur.com/ejNDu.png


當我複製相同的代碼進入IDLE,它給了我一個錯誤。在線

t1 = np.arange(0.0, 5.0, 0.1) 

,IDLE告訴我「t1」是無效的語法。

我的第一個問題:使用t1作爲變量有什麼問題?

如果我複製類似的代碼,但有一些東西調整,我可以避免這個錯誤。但是,然後我又出現了另一個錯誤。當我行相當於增加

plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k') 

,IDLE送給我的錯誤:


Traceback (most recent call last): 
    File "<pyshell#9>", line 1, in <module> 
    plt.plot(ty, f(tx), 'bo', ty, f(ty), 'k') 
NameError: name 'f' is not defined 

我不知道Python的希望我定義的 「F」 分開來自函數「f(t)」。

我的第二個和主要問題:有人請解釋爲什麼「f」必須單獨定義?如何在Python 2.7中正確使用這樣的函數?

如果有人需要我解釋這裏使用的Numpy/Matplotlib機制,我將盡我所能解釋它們如何工作來實現圖形。

+2

你粘貼的代碼在Python 2.7中對我很好。你確定你沒有犯一些小錯誤嗎?有時候捨棄括號或類似的東西可能會在程序後面導致令人費解的語法錯誤。另外,你如何將代碼輸入IDLE?我不認爲你可以將多行代碼片段直接粘貼到IDLE中。您是否嘗試使用這些命令創建文件,然後運行它? – BrenBarn 2013-03-15 06:04:52

回答

5

對於語法錯誤,請在之前檢查一行或兩行t1是一個完全有效的變量名稱(規則類似於各種其他語言:變量名稱可以包含字母,數字和_,但不能以數字開頭) - 但是如果您忘記了上面的近似括號或類似內容,那麼解釋器會感到困惑,並告訴你不能在那裏有一個賦值語句(如果它們在(),{}[]之內,或者換行符之前的最後一個字符是\)。

定義函數確實在該名稱空間中給出該變量名稱 - 您不需要單獨定義f。如果沒有看到確切的代碼很難說,但是可能發生的事情是您將其定義在不同的作用域中(因此名稱不可見),或者您已將該函數重命名爲f以外的其他名稱。

0

嘗試在新窗口中再次輸入所有內容。 'f'不應該單獨定義。

0

由於缺少新行和意外縮進,會出現無效語法接縫出現的錯誤。

在IDLE中,在定義函數f(t)後,您必須再次按下<return>才能完成f(t)的聲明 - 在聲明f(t)後放置一個空行。 如果你沒有在IDLE中添加額外的新行,你會得到一個語法錯誤,因爲意外的縮進和f(t)的定義不會完成,所以你還會得到下一個錯誤, f'沒有定義。