在下面的代码中解释打印策略

时间:2013-08-15 18:41:56

标签: python for-loop python-3.x

我最近开始学习Python,在使用列表时遇到了这个问题。

这里我将一些电影名称分配给变量movies

>>> movies = ["dragon","dragon warrior","kungfu","kungfu panda"]

分配后,我使用print命令执行它:

>>> print(movies)

输出如下:

['dragon', 'dragon warrior', 'kungfu', 'kungfu panda']

同样地,当我开始在具有相同print命令的列表中使用for循环时,输出完全不同。由于for循环,我无法理解它是如何改变的:

>>> for fav_movie in movies:
          print(fav_movie)

输出:

dragon
dragon warrior
kungfu
kungfu panda

为什么相同的打印命令的工作方式不同?

6 个答案:

答案 0 :(得分:2)

print(movies)打印列表对象的str版本,而在循环中,您将在列表中打印单个项目的str版本。

>>> print(movies)
['dragon', 'dragon warrior', 'kungfu', 'kungfu panda']

相当于:

>>> print(movies.__str__())   #or simply print(str(movies))
['dragon', 'dragon warrior', 'kungfu', 'kungfu panda']

请注意,您在列表元素中看到了引号,这是因为使用的表示形式是这些对象的repr版本。列表的repr版本也会包含引号。

>>> repr(movies)
"['dragon', 'dragon warrior', 'kungfu', 'kungfu panda']"

repr是一个计算机友好的输出,str是人类友好的,一个很好的例子就是花车:

>>> x = 1.1 + 2.2
>>> print repr(x)
3.3000000000000003
>>> print str(x)
3.3

另请注意,repr返回的字符串可以使用eval重新生成该对象。

有关详情,请阅读:Difference between str and repr in Python

在循环内部,您打印的是每个项目的str版本:

>>> print(movies[0])
dragon
>>> print(movies[0].__str__())
dragon
>>> for movie in movies:
...     print(str(movie))
...     
dragon
dragon warrior
kungfu
kungfu panda

答案 1 :(得分:1)

您正在打印实际列表对象的第一个命令,第二个命令循环遍历列表的元素并逐个打印。

答案 2 :(得分:1)

第一个打印语句是打印列表;而第二个是打印字符串。

答案 3 :(得分:1)

这就是Python的工作方式。使用print(movies)打印整个列表movies的字符串表示形式,其中:

for fav_movie in movies:
      print(fav_movie)

一次打印movies个项目。

>>> l = [1, 2, 3]
>>> print(l)
[1, 2, 3]
>>> for i in l: print(i)
...
1
2
3
>>>

答案 4 :(得分:1)

除了iCodez的回答,值得注意的是print会引入换行符。例如:

>>> import sys
>>> l = ["a", "b", "c"]
>>> print l
['a', 'b', 'c']
>>> for i in l: print i
... 
a
b
c
>>> for i in l: sys.stdout.write(i)
... 
abc>>> 

答案 5 :(得分:0)

print(x)执行以下操作:

1。)如果x不是字符串,请通过调用x.__str__()将其转换为此字符串。

>>> 'Hello!'.__str__()
'Hello!'
>>> [1,2,3].__str__()
'[1, 2, 3]'

2。)输出该字符串

3。)开始一个新行(你实际上可以关掉它)。


print(movies)实际上会print(movies.__str__()),而

for movie in movies:
    print(movie)

将浏览电影,并分别打印每部电影。由于电影已经是字符串,因此不需要转换步骤。由于第3步,每部电影都有自己的路线。