pythonループ解惑

1631 ワード

要旨:多くの人がC/C++シリーズ言語からpython言語に移行する過程で、サイクル方式に大きな疑問が長期にわたって存在し、結局この2つのサイクルカテゴリには大きな違いがある.サイクルを書くとき、どんな相手がサイクルを持ってきて、どんな相手がサイクルできないのか疑問に思うかもしれません.本文は主にpythonにおけるループを検討し,C言語におけるループとの違いを比較する.
1.Cとpythonサイクルの違い
多くの人がC/C++シリーズ言語からpython言語に移行する過程で、サイクル方式に大きな疑問が長期にわたって存在し、結局この2つのサイクルカテゴリには大きな違いがある.
C言語では、このように書くサイクルがあります.
for(i=0;i<10;i++){
	sum+=i;
}

pythonでは、次のように書きます.
for i in range(10):
	sum+=i;

慣れていないのではないでしょうか.もし2の増加が必要なら?
C言語:
for(i=0;i<10;i+=2){
	sum+=i;
}

python:
for i in range(0,10,2):
	sum+=i

Note:C言語では、初期値、増分、サイクル境界の3つの要素があります.pythonでは、ループは1つだけ必要です.反復可能なタイプです.
2.反復器とiter()関数
pythonの反復はシーケンスオブジェクトをシームレスにサポートし、シーケンスオブジェクトではないがシーケンス動作を示すオブジェクト、辞書のkey、ファイルの行などを反復することもできます.
根本的には、反復器はインデックスでカウントするのではなくnextメソッドのあるオブジェクトです.nextの取得が完了すると、StopIteration異常が発生し、エラーが発生したことを示すのではなく、呼び出しが完了したことを示す.
> mytuple=(12, 'xyz',34)
> i=iter(mytuple)
> i.next()
12
> i.next()
'xyz'
> i.ntext()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  AttributeError: 'tupleiterator' object has no attribute 'ntext'

反復器の内部には、nextの次の要素を指す隠れた非表示のポインタがあります.任意のforまたはwhileサイクルは、実際には反復タイプによって実現される.
上記では、シーケンスタイプが反復器として使用される場合を見てみました.次に、他の2つのデータタイプが反復器として使用される場合を見てみましょう.
2.1辞書
辞書の反復器はそのkeyを遍歴します.for eachkey in mydic.keys()は省略可能:for eachekey in mydic.
2.2ファイル
ファイルオブジェクトジェネレータはreadlineメソッドを自動的に呼び出します