Maison  >  Article  >  développement back-end  >  Résumé de plusieurs erreurs que commettent souvent les novices en Python

Résumé de plusieurs erreurs que commettent souvent les novices en Python

Y2J
Y2Joriginal
2017-04-20 09:11:021749parcourir

Il existe quelques petits pièges dans le langage python, qui sont particulièrement faciles à confondre et à commettre des erreurs. Si les débutants ne font pas attention, il est facile de tomber dans des pièges. Ci-dessous, je vais vous donner une analyse approfondie de certains d'entre eux. ces pièges. J'espère que cela sera utile aux débutants, les amis dans le besoin peuvent s'y référer, jetons un coup d'œil ci-dessous.

Avant-propos

Cet article résume principalement plusieurs erreurs courantes commises par les novices qui apprennent Python. Il y a quatre erreurs faciles au total. Faites une erreur. , jetons un œil à l'introduction détaillée ci-dessous.

1. i+=1 n'est pas égal à ++i

Les débutants qui ne connaissent pas grand-chose au langage Python, et cela arrive avoir c++, java Avec le contexte du langage, il est facile de confondre ++i et i+=1

Regardons d'abord un petit exemple :


i=0
mylist=[1,2,3,4,5,6]
while i <len(mylist):
 print(mylist[i])
 ++i

Ce code tiendra pour acquis qu'il n'y a pas de problème. C'est une sortie en boucle et je garde +1, ce qui est tout à fait vrai. En fait, ce n'est pas vrai. continuez à afficher 1,Une boucle infinie Parce que l'interpréteur Python fonctionnera ++i comme +(+i)


Maintenant, je comprends que bien que ++i soit légal dans la syntaxe Python, ce n'est pas une opération d'
print(+1)
>>>1
print(++1)
>>>1
print(+++1)
>>>1
incrémentation

telle que nous la comprenons.

2. Distinguer l'utilisation de == et isLorsqu'ils jugent si les chaînes sont égales, les débutants confondront particulièrement is et ==, ce qui résultats dans différents programmes. Le comportement est différent selon les circonstances :

Par exemple, regardons d'abord un exemple simple :


a=&#39;Hi&#39;
b=&#39;Hi&#39;
print(a is b)
>>>True
print(a==b)
>>>True #看起来is和==好像是一样的
Regardons-le à nouveau Deuxième exemple :


str1=&#39;Wo shi yi ge chi huo&#39;
str2=&#39;Wo shi yi ge chi huo&#39;
print(str1 is str2)
>>>False#is的结果是False
print(str1==str2)
>>>True #==的结果为True,看二者不一样了吧
Troisième exemple :


C'est là qu'il est facile de confondre les débutants. Cela semble étrange. Pourquoi les résultats de is et == sont-ils parfois les mêmes et parfois différents ?
str3=&#39;string&#39;
str4=&#39;&#39;.join([&#39;s&#39;,&#39;t&#39;,&#39;r&#39;,&#39;i&#39;,&#39;n&#39;,&#39;g&#39;])
print(str3)
>>>string
print(str3 is str4)
>>>False #is的结果是False
print(str3==str4)
>>>True #==的结果为True,看二者不一样了吧
Nous utilisons La fonction

intégrée est utilisée pour renvoyer l'adresse mémoire de l'objet Si vous la vérifiez, elle sera claire. est l'identifiant de l'objet, utilisé pour comparer deux Si l'

espace mémoire

de l'objet est le même, s'il utilise la même adresse d'espace, et id()==

est de comparer

si le contenu des deux objets Résumé de plusieurs erreurs que commettent souvent les novices en Python est égal.

3 Pour connecter des chaînes, en particulier des chaînes à grande échelle, il est préférable d'utiliser join au lieu de +Lors du traitement des chaînes, la clé est la connexion. La chaîne en Python est un peu différente des autres langages. C'est un objet immuable et ne peut pas être modifié une fois créé. Cette fonctionnalité affectera directement. l'efficacité de la connexion de chaînes en Python.

Utilisez + pour connecter des chaînes :

Utilisez join pour connecter des chaînes


Mais si vous connectez des chaînes à grande échelle, par exemple, lorsque vous souhaitez connecter environ 100 000 chaînes, la jointure La méthode sera beaucoup plus rapide (même cent fois différente). Par exemple Les 100 000 connexions de chaînes suivantes
str1,str2,str3=&#39;test&#39;,&#39;string&#39;,&#39;connection&#39;
print(str1+str2+str3)
>>>test string connection

La raison est que pour connecter des chaînes : S1+S2. +S3+....+SN, car les caractères sont des objets immuables. Un nouveau morceau de mémoire doit être demandé une fois exécuté. Dans ce cas, lors du processus de connexion de N chaînes, N-1 résultats intermédiaires seront générés. Chaque fois qu'un résultat intermédiaire est généré, la mémoire doit être appliquée une fois. De cette façon, cela affectera sérieusement l'efficacité de l'exécution.

Mais la jointure est différente, elle s'applique à la mémoire totale en une seule fois, puis. copie chaque élément de la chaîne dans la mémoire, donc la jointure sera beaucoup plus rapide.
str1,str2,str3=&#39;test &#39;,&#39;string &#39;,&#39;connection&#39;
print(&#39;&#39;.join([str1,str2,str3]))
>>>test string connection

Par conséquent, pour la concaténation de chaînes,

en particulier pour le traitement de grandes chaînes, il est préférable d'utiliser la jointure


long_str_list=[&#39;This is a long string&#39; for n in range(1,100000)]

4. N'écrivez pas après les boucles for et while else block

Python fournit une fonctionnalité que de nombreux langages de programmation ne prennent pas en charge, c'est-à-dire vous pouvez écrire un bloc else directement après le bloc d'instructions à l'intérieur de la boucle. Par exemple :

Ce bloc else s'exécutera

immédiatement après l'exécution de la boucle entière. Si oui, pourquoi s'appelle-t-on autrement ? Pourquoi ne pas l'appeler et ? Dans l'instruction if/else, else signifie : si le bloc if précédent n'est pas exécuté, alors le bloc else est exécuté.


Il en va de même pour try/sauf/else. La signification de else dans cette structure est : si le bloc try précédent n'échoue pas, alors exécutez le bloc else.

for i in range(3):
 print(&#39;Loop %d&#39;%i)
else:
 print(&#39;Else block&#39;)
>>>Loop 0
>>>Loop 1
>>>Loop 2
>>>Else block
  • try/finally est également très intuitif. Le enfin signifie ici : après avoir exécuté le bloc try précédent, le bloc enfin est toujours exécuté quoi qu'il arrive.

    Voici le problème. Les programmeurs qui débutent avec Python peuvent interpréter le bloc else dans la structure for/else comme :
  • Si la boucle ne termine pas son exécution normalement, exécutez-la. sinon Bloquer
  • .

    En fait, c'est tout le contraire - L'utilisation de l'instruction break dans la boucle pour sauter plus tôt empêchera le programme d'exécuter le bloc else , ce qui est un peu déroutant pour ceux qui ne sont pas familiers. avec for/else, ce sera assez déroutant pour les personnes qui lisent le code.

    Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn