Python代码在文件和终端中的行为不同

Python代码在文件和终端中的行为不同,python,Python,伙计们,我最近在学习Python,当我在Python Shell(Linux终端中的命令)和文件中编写一些简单代码时,我遇到了一个问题: 在Python Shell中: >>> def firstn(n): ... num, nums = 0, [] ... while num < n: ... nums.append(nums) ... num += 1 ... return nums ... sum_of_fir

伙计们,我最近在学习Python,当我在Python Shell(Linux终端中的命令)和文件中编写一些简单代码时,我遇到了一个问题:

在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
>>def firstn(n):
...     num,nums=0,[]
...     当num
如果是print(sum(firstn(1000000)),则该打印也将是一个语法错误

但是当我把代码放入一个文件并执行它时,它是完全正确的,没有语法错误,我不知道为什么。有人能解释这一点吗?
PS:代码来自

在交互模式下,将空白行置于块的末尾

>>> 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'

>>def firstn(n):
...     num,nums=0,[]
...     当num>sum_of_first_n=sum(firstn(1000000))
>>>第一个的和
49999500000升

在交互模式下,将空白行置于块的末尾

>>> 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'

>>def firstn(n):
...     num,nums=0,[]
...     当num>sum_of_first_n=sum(firstn(1000000))
>>>第一个的和
49999500000升

当我直接从Python文档中复制时,它对我来说效果很好。当我尝试在最后一行(第一行的和)之前添加空格时,我收到了相同的语法错误消息。很可能是复制粘贴错误。尝试复制到文本编辑器以检查空格,然后粘贴到终端

当我直接从Python文档中复制时,它对我来说效果很好。当我尝试在最后一行(第一行的和)之前添加空格时,我收到了相同的语法错误消息。很可能是复制粘贴错误。尝试复制到文本编辑器以检查空格,然后粘贴到终端

谢谢,第一行“在交互模式下,用空行结束块。”对我来说非常有用,我应该在shell的不同部分定义每个块。但是你的其余答案让人困惑,我没有像你的(顺便说一句,我使用的是Python3.2)、@codychan那样得到类型错误,请看这行:
nums.append(nums)
。这将
nums
添加到
nums
本身@codychan我建议总是在函数定义后添加一个空行。它在某种程度上说你应该这样做,不管怎样,它将使你更容易复制和粘贴到交互式python会话中。谢谢,第一行“在交互式模式下,将空白行放在块的末尾。”对我来说非常有用,我应该在shell的不同部分定义每个块。但是你回答的其余部分令人困惑,我没有像您(顺便说一句,我使用的是Python 3.2)那样得到类型错误,@codychan,请看这行:
nums.append(nums)
。这将
nums
添加到
nums
本身@codychan我建议总是在函数定义后添加一个空行。它在某种程度上说你应该这样做,不管怎样,它将使你更容易复制和粘贴到你的交互式python会话中。无论如何,谢谢你,空间不是问题,缺少一个空行,就像@falsetru回答的那样。顺便说一句,我没有把代码复制粘贴到我的终端上,我是手工输入的,所以没有“最后一行之前有空格”的问题。无论如何,谢谢你,空格不是问题,没有空行是问题,就像@falsetru回答的那样。顺便说一句,我没有复制和粘贴代码到我的终端,我用手键入,所以没有“最后一行前的空格”的问题。
>>> 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