<class'str'=“”>和<type'str'=“”>之间有什么区别?

时间:2017-02-05 02:59:47

标签: python types decode urllib

我是python的新手。我对<class 'str'>感到困惑。 我使用了一个str:

response = urllib.request.urlopen(req).read().decode()

“回复”的类型为<class 'str'>,而不是<type 'str'>。 当我试图在'for loop'中操纵这个str:

for ID in response: 

“响应”不是按行读取,而是按字符读取。 我打算将每一行“响应”放入列表的单个元素中。现在我必须在一个文件中编写响应并使用'open'来获取一个<type 'str'>字符串,我可以在'for循环'中使用它。

2 个答案:

答案 0 :(得分:11)

没有区别。 Python在python 2(Types are written like this: <type 'int'>.)和python 3(Types are written like this: <class 'int'>.)之间更改了type个对象的文本表示。在python 2和3中,类型对象的类型是,嗯,键入:

python 2

>>> type(type('a'))
<type 'type'>

python 3

>>> type(type('a'))
<class 'type'>

这就是改变的原因......字符串表示清楚表明类型是一个类。

至于你的其余问题,

for ID in response:

response是一个字符串,枚举它会给出字符串中的字符。根据您可能想要使用的响应类型以及HTML,JSON或其他解析器将其转换为python对象。

答案 1 :(得分:5)

评论者提到。在python3中:

>>>st = 'Hello Stack!'
>>>type(st)
<class 'str'>

但是在python2中:

>>>st = 'Hello Stack!'
>>>type(st)
<type 'str'>

所以你所看到的行为是完全可以预期的。对于循环遍历字符串,字符串上的for循环将逐字符遍历字符串。如果要迭代字符串中的每一行,通常会执行类似于\n上的拆分或一些设计用于拆分URL响应中的行分隔符的正则表达式。以下是split

生成的简单for循环
response = urllib.request.urlopen(req).read().decode()
lines = response.split('\n')
for x in lines:
    st = x.strip()
    # do some processing on st