2013-11-03 12 views
0

傢伙,我正在學習Python的最近,我有一個問題,當我寫一些簡單的代碼在Python Shell(在Linux終端命令),並在文件中:Python代碼的作用在不同的文件和終端

在Python Shell中:

>>> def firstn(n): 
...  num, nums = 0, [] 
...  while num < n: 
...   nums.append(nums) 
...   num += 1 
...  return nums 
... sum_of_first_n = sum(firstn(1000000)) 
    File "<stdin>", Line7 
    sum_of_firstn_n = sum(firstn(1000000)) 
       ^
SyntaxError: invalid syntax 

如果打印(SUM(firstn(1000000))),打印將是一個SyntaxError太

但是,當我把代碼到一個文件,並執行它,它是完全好的,沒有SyntaxError,我不知道爲什麼。有沒有人可以解釋這一點? PS:代碼是從https://wiki.python.org/moin/Generators

回答

4

在交互模式下,將空行放到塊結束。

>>> def firstn(n): 
...  num, nums = 0, [] 
...  while num < n: 
...   nums.append(nums) 
...   num += 1 
...  return nums 
... 
>>> sum_of_first_n = sum(firstn(1000000)) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for +: 'int' and 'list' 

BTW,代碼做出以下行循環引用:

nums.append(nums) 

>>> def firstn(n): 
...  num, nums = 0, [] 
...  while num < n: 
...   nums.append(num) # <-- 
...   num += 1 
...  return nums 
... 
>>> sum_of_first_n = sum(firstn(1000000)) 
>>> sum_of_first_n 
499999500000L 
+0

謝謝,第一行「在交互模式下,放空行結束塊。」對於我來說非常有用,我應該在shell中的不同部分中定義每個塊。但是其餘的答案會讓人感到困惑,我沒有像你的TypeError(我正在使用Python 3.2), – CodyChan

+1

@codychan ,看到下面這行:'nums.append(nums)'。這將'nums'添加到'nums'本身! – falsetru

+1

@codychan我會推薦* always *在函數定義之後添加一個空行。它在[PEP8](http://www.python.org/dev/peps/pep-0008/)的某處說你應該這樣做,無論如何,它會讓你更容易複製並粘貼到你的交互式python中會話。 – SethMMorton

0

它時,我直接從Python文檔複製的工作對我罰款。當我嘗試在最後一行(sum_of_first_n)之前添加空格時,我收到了相同的語法錯誤消息。最有可能的複製粘貼錯誤。嘗試複製到文本編輯器來檢查空格,然後粘貼到終端。

+0

無論如何,空間不是問題,缺少一個空白行,就像@falsetru回答。順便說一句,我沒有複製和粘貼代碼到我的終端,我用手輸入,所以沒有「最後一行之前的空間」問題。 – CodyChan

相關問題