Table des matières
回复内容:
Maison développement back-end Tutoriel Python Python for 循环中 in 关键字含义是什么?

Python for 循环中 in 关键字含义是什么?

Jun 06, 2016 pm 04:23 PM
for in print range

最常用的情况下,我理解,比如

<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">5</span><span class="p">):</span>
    <span class="k">print</span> <span class="n">i</span>
Copier après la connexion

回复内容:

关键词:迭代器

简单来说,for in 语句是一个语法糖,具体是这样的:
  • 调用一个对象的 __iter__ 方法,方法会返回一个迭代器,所谓迭代器就是实现了 __next__ 方法的对象,如果一个对象本身就实现了 __next__(Python 2 中是直接 “next” 方法,没有下划线) ,可以直接返回自身。
  • 调用迭代器的 __next__ 返回迭代器中的“下一个”元素,比如说第一次调用会返回 0,第二次会返回 1,如此这般。
  • 最后没有元素了,迭代器抛出一个异常来表明自己没有元素了。for 语句会捕获这个异常并停下来。
我建议你独立写一个斐波那契的迭代器。
Python for 循环中 in 关键字含义是什么?Mac 怎么让截图变正常大小啊 QAQ

另外,还有一个销魂的东西叫做生成器,演示一下如何优雅地斐波那契:
(此后的代码为了简洁我都用 Python 3 来写,用 Python 2 能运行但是性能糟糕。)
<span class="k">def</span> <span class="nf">fib</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
   <span class="n">a</span> <span class="o">=</span> <span class="mi">0</span>
   <span class="n">b</span> <span class="o">=</span> <span class="mi">1</span>
   <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
       <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="o">+</span><span class="n">b</span>
       <span class="k">yield</span> <span class="n">a</span>
Copier après la connexion
谢邀。刚看到问题以为楼主要问in是什么意思。
这个for实际上就是迭代,使用的是迭代器(Iterator)。
<span class="c"># 以下代码在Python 2中运行</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span>
    <span class="k">print</span> <span class="n">row</span>

<span class="c"># 完全等价于</span>

<span class="n">itr</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">__iter__</span><span class="p">()</span> <span class="c"># 获得新的迭代器</span>
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
    <span class="k">try</span><span class="p">:</span>
        <span class="n">row</span> <span class="o">=</span> <span class="n">itr</span><span class="o">.</span><span class="n">next</span><span class="p">()</span>
    <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
        <span class="k">break</span>
    <span class="k">print</span> <span class="n">row</span>
Copier après la connexion
迭代器。

Python for 循环中 in 关键字含义是什么?
用dis转成虚拟机的指令
Python for 循环中 in 关键字含义是什么?发现就是GET_ITER, FOR_ITER之类 这都是把range(1:5)和f当成容器来看。文件f既然有行,那row自然是字符串了。 就个人理解:
in 关键字实现了一套python中的遍历协议.
  • 协议A: __iter__ + next
循环时, 程序先使用__iter__ (相当于iter(instance))获取具有next方法的对象, 然后通过其返回的对象, 不断调用其next方法, 直到StopIteration错误抛出.

<span class="k">class</span> <span class="nc">A</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">limit</span> <span class="o">=</span> <span class="mi">4</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">times</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">init</span> <span class="o">=</span> <span class="mi">1</span>
        <span class="k">return</span> <span class="bp">self</span>

    <span class="k">def</span> <span class="nf">next</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">times</span> <span class="o">>=</span> <span class="bp">self</span><span class="o">.</span><span class="n">limit</span><span class="p">:</span>
            <span class="k">raise</span> <span class="ne">StopIteration</span><span class="p">()</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">init</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">times</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="bp">self</span><span class="o">.</span><span class="n">init</span> <span class="o">+=</span> <span class="mi">1</span>
            <span class="k">return</span> <span class="n">x</span>

<span class="k">print</span> <span class="s">'A>>>>>>'</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">A</span><span class="p">():</span>
    <span class="k">print</span> <span class="n">x</span>
Copier après la connexion
Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

17 façons de résoudre l'écran bleu kernel_security_check_failure 17 façons de résoudre l'écran bleu kernel_security_check_failure Feb 12, 2024 pm 08:51 PM

Kernelsecuritycheckfailure (échec de la vérification du noyau) est un type de code d'arrêt relativement courant. Cependant, quelle qu'en soit la raison, l'erreur d'écran bleu rend de nombreux utilisateurs très angoissés. Laissez ce site présenter soigneusement 17 types de solutions aux utilisateurs. 17 solutions à l'écran bleu kernel_security_check_failure Méthode 1 : Supprimer tous les périphériques externes Lorsqu'un périphérique externe que vous utilisez est incompatible avec votre version de Windows, l'erreur d'écran bleu Kernelsecuritycheckfailure peut se produire. Pour ce faire, vous devez débrancher tous les périphériques externes avant d'essayer de redémarrer votre ordinateur.

Conseils pour utiliser i18n pour implémenter la commutation multilingue dans Vue Conseils pour utiliser i18n pour implémenter la commutation multilingue dans Vue Jun 25, 2023 am 09:33 AM

Avec le développement continu de l’internationalisation, de plus en plus de sites Web et d’applications doivent prendre en charge des fonctions de commutation multilingue. En tant que framework frontal populaire, Vue fournit un plug-in appelé i18n qui peut nous aider à réaliser une commutation multilingue. Cet article présentera les techniques courantes d'utilisation d'i18n pour réaliser une commutation multilingue dans Vue. Étape 1 : Installer le plug-in i18n Tout d'abord, nous devons utiliser npm ou Yarn pour installer le plug-in i18n. Entrez la commande suivante sur la ligne de commande : npminst

Que signifient les interfaces out et in ? Que signifient les interfaces out et in ? Sep 28, 2021 pm 04:39 PM

L'interface de sortie fait référence à l'interface de sortie et l'interface d'entrée fait référence à l'interface d'entrée. L'interface de sortie représente généralement l'interface de sortie de ligne de source audio, qui est utilisée pour connecter des charges, telles que des haut-parleurs, des écouteurs, etc., tandis que l'interface d'entrée représente généralement l'interface d'entrée de ligne de source audio, qui est utilisée pour connecter des lecteurs de CD, des appareils mobiles. téléphones, lecteurs MP3, ordinateurs, etc.

Comment désinstaller Skype Entreprise sur Win10 ? Comment désinstaller complètement Skype sur votre ordinateur Comment désinstaller Skype Entreprise sur Win10 ? Comment désinstaller complètement Skype sur votre ordinateur Feb 13, 2024 pm 12:30 PM

Win10 Skype peut-il être désinstallé ? C'est une question que de nombreux utilisateurs veulent savoir, car de nombreux utilisateurs constatent que cette application est incluse dans le programme par défaut de leur ordinateur et craignent que sa suppression affecte le fonctionnement du système. ce site aide les utilisateurs Examinons de plus près comment désinstaller Skype Entreprise dans Win10. Comment désinstaller Skype Entreprise dans Win10 1. Cliquez sur l'icône Windows sur le bureau de l'ordinateur, puis cliquez sur l'icône des paramètres pour entrer. 2. Cliquez sur "Appliquer". 3. Entrez « Skype » dans la zone de recherche et cliquez pour sélectionner le résultat trouvé. 4. Cliquez sur "Désinstaller". 5

Comment utiliser for pour trouver la factorielle de n en JavaScript Comment utiliser for pour trouver la factorielle de n en JavaScript Dec 08, 2021 pm 06:04 PM

Comment utiliser for pour trouver n factorielle : 1. Utilisez l'instruction "for (var i=1;i<=n;i++){}" pour contrôler la plage de parcours de la boucle sur "1~n" 2. Dans la boucle ; body, utilisez "cj *=i" Multipliez les nombres de 1 à n et attribuez le produit à la variable cj 3. Une fois la boucle terminée, la valeur de la variable cj est la factorielle de n, puis affichez-la.

PHP renvoie toutes les valeurs du tableau pour former un tableau PHP renvoie toutes les valeurs du tableau pour former un tableau Mar 21, 2024 am 09:06 AM

Cet article expliquera en détail comment PHP renvoie toutes les valeurs d'un tableau pour former un tableau. L'éditeur pense que c'est assez pratique, je le partage donc avec vous comme référence. J'espère que vous pourrez gagner quelque chose après avoir lu cet article. . Utilisation de la fonction array_values() La fonction array_values() renvoie un tableau de toutes les valeurs d'un tableau. Il ne conserve pas les clés du tableau d'origine. $array=["foo"=>"bar","baz"=>"qux"];$values=array_values($array);//$values ​​​​sera ["bar","qux"]Utilisation une boucle peut utiliser une boucle pour obtenir manuellement toutes les valeurs du tableau et les ajouter à un nouveau

Quelle est la différence entre les boucles foreach et for Quelle est la différence entre les boucles foreach et for Jan 05, 2023 pm 04:26 PM

Différences : 1. for parcourt chaque élément de données via l'index, tandis que forEach parcourt les éléments de données du tableau via le programme sous-jacent JS ; 2. for peut terminer l'exécution de la boucle via le mot-clé break, mais forEach ne le peut pas ; .for peut contrôler l'exécution de la boucle en contrôlant la valeur de la variable de boucle, mais forEach ne peut pas ; 4. for peut appeler des variables de boucle en dehors de la boucle, mais forEach ne peut pas appeler des variables de boucle en dehors de la boucle ; est supérieur à forEach.

Comment utiliser la fonction Range en Java Comment utiliser la fonction Range en Java Apr 19, 2023 pm 11:49 PM

Préface En Java, la méthode Range est disponible dans les classes IntStream et LongStream. Dans la classe IntStream, il est utile de renvoyer la valeur séquentielle de IntStream dans la portée du paramètre de fonction. Dans la méthode, startInclusive(inclusive) et endExclusive(exclusive) sont les deux paramètres utilisés avec la taille du pas d'incrément, comme mentionné précédemment, la valeur de début sera incluse et la valeur de fin sera exclue. Dans le cas de LongStream, la seule différence est l'ajout de la valeur LongStream. Syntaxe de plage Voyons la syntaxe de la méthode range en Java. Plage IntStream

See all articles