0

我最近开始学习 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

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

4

6 回答 6

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.

有关更多详细信息,请阅读:strrepr之间的区别 Python 中

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

>>> print(movies[0])
dragon
>>> print(movies[0].__str__())
dragon
>>> for movie in movies:
...     print(str(movie))
...     
dragon
dragon warrior
kungfu
kungfu panda
于 2013-08-15T18:43:35.923 回答
1

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

于 2013-08-15T18:43:41.417 回答
1

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

于 2013-08-15T18:43:54.373 回答
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
>>>
于 2013-08-15T18:43:55.340 回答
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>>> 
于 2013-08-15T18:56:38.983 回答
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 步,每部电影都有自己的台词。

于 2013-08-15T19:13:49.470 回答