web-dev-qa-db-fra.com

Quelle est la différence entre <class 'str'> et <type 'str'>

Je suis nouveau sur python. Je suis confus par le <class 'str'>. J'ai obtenu un str en utilisant:

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

Le type de "réponse" est <class 'str'>, ne pas <type 'str'>. Quand j'essaye de manipuler cette chaîne dans 'for loop':

for ID in response: 

La "réponse" n'est pas lue par ligne, MAIS par caractère. J'ai l'intention de mettre chaque ligne de "réponse" en élément individuel d'une liste. Maintenant, je dois écrire la réponse dans un fichier et utiliser 'open' pour obtenir une chaîne de <type 'str'> que je peux utiliser dans 'for loop'.

8
dom free

Comme mentionné par les commentateurs. En python3:

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

Mais en python2:

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

Le comportement que vous voyez est donc tout à fait attendu. En ce qui concerne le bouclage sur une chaîne, une boucle for sur une chaîne itérera sur la chaîne caractère par caractère. Si vous voulez parcourir chaque ligne de la chaîne, vous faites généralement quelque chose comme split sur \n ou une expression régulière conçue pour se diviser sur les séparateurs de ligne dans la réponse URL. Ci-dessous, une simple boucle for sur la liste résultant de split

response = urllib.request.urlopen(req).read().decode()
lines = response.split('\n')
for x in lines:
    st = x.strip()
    # do some processing on st
6
2ps

Il n'y a pas de différence. Python a changé la représentation textuelle des objets type entre python 2 ( Les types sont écrits comme ceci: <type 'int'>. ) et python 3 ( Les types sont écrits comme ceci: <class 'int'>. ). Dans les deux python 2 et 3, le type de l'objet type est, euh, type:

python 2

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

python 3

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

Et c'est la raison du changement ... la représentation sous forme de chaîne indique clairement que le type est une classe.

Quant au reste de votre problème,

for ID in response:

response est une chaîne et son énumération donne les caractères de la chaîne. Selon le type de réponse que vous souhaitez utiliser et HTML, JSON ou autre analyseur pour le transformer en objets python.

12
tdelaney