ああ、これは本当に素晴らしいプログラマーです。ただし、彼はただのいい人であり、偉い人ではありません。優れたプログラマーとはどのようなものでしょうか?彼は都会で隠棲している掃除僧です。
他のことについて話す前に、まずこれらの用語を理解してください:
ループ、 は、条件が満たされたときに同じコード部分を繰り返し実行することを指します。たとえば、while 文です。
反復、 は、リスト内の各項目に特定の順序で 1 つずつアクセスすることを指します。たとえば、for ステートメントです。
再帰、 は、それ自体を継続的に呼び出す関数の動作を指します。たとえば、有名なフィボナッチ数列をプログラムで出力します。
トラバーサル、 は、特定のルールに従ってツリー構造内の各ノードを訪問することを指し、各ノードは 1 回だけ訪問されます。
これら 4 つの不思議な響きの単語については、チュートリアルですでに触れられているループについて説明します。ネットで検索すると、ループと再帰を比較する記事がたくさんあります。さまざまな角度から比較してみます。ここでは今は比較せず、まず Python での反復を理解しましょう。忘れていなかったら、また時期が来たら比較してみます(笑)。
1 つずつ訪問します
Python では、オブジェクト内の各要素にアクセスするには、次のようにすることができます: (リストなど)
この方法に加えて、次のこともできます:
優秀なプログラマーとしての最高の資質は「怠惰」です。もちろん、このように 1 つずつ克服することはできません。
>
>>> True の場合:
... print lst_iter.next()
...
q
私
w
s
私
r
トレースバック (最後の呼び出し): #最後の呼び出しを読み取った後、エラーを報告し、ループを停止します
ファイル「
反復の停止
>>>
全体的な考え方は... (この記事を読んでいる読者の英語レベルは文書を読むレベルに達していると考えられるため、ここではいくつかの単語を意図的に省略しています。胸の谷がない場合は、しないでください)心配しないで、辞書か何かを見つけてください。)
翻訳はしませんが、主な内容を要約したいと思います:
戻り値はイテレータオブジェクトです
パラメータは、反復プロトコルに準拠するオブジェクトまたはシーケンス オブジェクトである必要があります
next()
と一緒に使用します。
「反復可能なオブジェクト」とは何ですか?一般に、for を使用して要素を 1 つずつ読み取ることができるオブジェクトを反復可能オブジェクトと呼ぶことがよくあります。したがって、for は反復ツールとも呼ばれます。いわゆる反復ツールは、反復オブジェクトの各要素を特定の順序 (左から右の順序) でスキャンできることを意味します。当然、for に加えて、リスト解析や in to などの他の反復ツールもあります。要素がシーケンスオブジェクトに属するかどうかを判断します。
それでは、先ほど紹介した iter() 関数はどうでしょうか?これは next() と組み合わせて使用され、上記の反復ツールの実装にも使用されます。 Python では、また他の言語でも、反復という用語は主に名詞の混乱のために比較的わかりにくいです。先ほど、反復を実現できるものは反復ツールと呼ばれると言いましたが、多くのプログラマーが好むのはこれらの反復ツールです。それをイテレータと呼びます。もちろん、これらはすべて中国語訳であり、英語はイテレータです。
上記のすべての例を見ると、for を使用して反復すると、最後に到達したときにエラーを報告せずに自動的に終了することがわかります。 iter()...next() を使用して反復する場合、最後のものが完了しても自動的に終了せず、下方向に継続しますが、その後に要素がないため、StopIteration と呼ばれるエラーが報告されます (このエラーの名前は「反復の停止」です。これはエラーではなく、明らかに警告です)。
読者は、iter()...next() 反復の機能にも注意を払う必要があります。反復オブジェクト lst_iter が最後まで反復されると、つまり各要素が片側で読み取られた後、ポインターは最後の要素の末尾に移動します。再度アクセスすると、ポインタは自動的に最初の位置に戻らず、最後の位置に留まるため、StopIteration が報告されます。再度開始する場合は、反復オブジェクトを再度入力する必要があります。ご覧のとおり、上記の反復オブジェクトを再割り当てした後は、続行できます。これは、for などの反復ツールでは使用できません。
ファイル反復子
現在、次の内容を含む 208.txt という名前のファイルがあります:
このファイルを操作するにはイテレーターを使用します。これは、ファイルに関する知識について説明したときにすでに実行しました。
にすぎません。上記のデモでは、readline() を使用して 1 行ずつ読み取ります。もちろん、実際の運用では、これを自動的に行わせる必要があります。
がより一般的に使用されます。このコードが何も出力しない理由は、前の反復の後、ポインターが最後に移動されたためです。これは反復の特性であるため、ポインタの位置に注意してください。
このメソッドはファイルの読み取りによく使用されます。別の readlines() も使用できます。ただし、注意すべき点がいくつかあります。読者が注意すべき点を思い出せない場合は、ファイルでコースを復習できます。
上記の処理は next() を使って読み込むこともできます。
next()を使用すると、各行の内容を直接読み取ることができます。これは、ファイルが自然な反復可能なオブジェクトであり、 iter() で変換する必要がないことを示しています。
さらに、反復を実装するには for を使用します。本質的には next() を自動的に呼び出しますが、この作業はこの時点で for に行われます。別名: for と呼ばれます。雷峰さん。
前述したように、リスト解析はリストを学習する際に、それをすでに理解している必要があります。それで、ファイルに使用できますか?試してみてください:
この時点で、読者はリスト解析に感動したのではないでしょうか?本当に力強くて強くて大きいです。
実際には、反復子は上記よりもはるかに単純です。Python では、この方法で反復可能なオブジェクトの要素を取得することもできます。
>>> タプル(open('208.txt'))
('qiwsir.n で Python を学ぶ'、'無料の Python コースがあります。n'、'Web サイトは:n'、'http://qiwsir.github.ion'、'言語は中国語です。n')
>>> "$$$".join(open('208.txt'))
「qiwsir で Python を学びましょう。n$$$無料の Python コースがあります。n$$$Web サイトは次のとおりです。n$$$http://qiwsir.github.ion$$$言語は中国語です。n」
>>> a,b,c,d,e = open("208.txt")
>>>
「qiwsir.n で Python を学びましょう」
>>>
「無料のPythonコースがあります。n」
>>>c
「ウェブサイトは次のとおりです」
>>>
'http://qiwsir.github.ion'
>>>
「その言語は中国語です。n」
付け加えると、辞書も反復処理できるので、自分で調べてみるとよいでしょう (実際、以前に for を使用して反復処理を行ったことがあるので、今回は調べて iter()...next() を使用して手動で実行してください。段階的に繰り返します)。