__iter__ , __next__の使い方(python)



Python
Pythonとは
基本的な使い方
IDLE
Jupyter Notebook
Markdown
コマンドプロンプトで実行
仮想環境の構築
仮想環境でIDLEを実行
ライブラリのインストール
pipの使い方
numpy , matplotlib等
graphviz
pytorch
Mecab
Pythonの関数:一覧
共通関数
append , extend
class
copy
csv.reader
csv.writer
def , return
dict , defaultdict
enumerate
exit
for
if
import
in
input
lambda
len
list
min/max
OrderedDict
open/close
os
pickle
print
range
re.split
read/readline
round/floor/ceil
split
sys.argv
time
while
write
zip
・特殊メソッド
 ・__name__
 ・__iter__ , __next__
正規表現、メタ文字
データの型の種類
四則演算 (+ , - , * , /)
コメントアウト (# , ''')
numpy
append
arange
argmax/argmin
array
asfarray
astype , dtype
digitize
dot
hstack/vstack
linalg.solve
linspace
mean
meshgrid
mgrid
ndim
ndmin
pad
poly1d
polyfit
prod
random
reshape
savetxt/loadtxt
shape
std
transpose
where
zeros/zeros_like
scipy
expit
imread
interpolate
matplotlib
imshow
figure
pcolormesh
plot
scatter
scikit-learn
GaussianNB
KMeans
KNeighborsClassifier
SVC
tree
keras
chainer
chainerrl
pytorch
BCELoss , MSELoss
Embedding
device
Sequential
Dataset, Dataloader
RNN, LSTM
OpenAI gym
Blackjack-v0
CartPole-v0
tkinter
frame, grid
画像表示
画像を切り取り表示
画像を保存
目的別
ステップ関数
1 of K 符号化法
線形補間
配列に番号をつける

公開日:2021/7/30         

■説明
特殊メソッドとは、特殊な動作をする関数です。__iter__と、__next__について説明します。

__iter__
反復処理を実施します。通常、反復処理はforを使うと思いますが、forは対象がリスト形式である必要があります。一方__iter__はリスト形式ではなくても、反復処理が可能です。

class calc_Iter:
    def __init__(self, *nums):
        self.ans = nums
        self.nn = 0
        print("init実行")

    def __iter__(self):
        print("iter実行")
        return iter(self.ans)

test = calc_Iter(10,20,30)   #① __init__を実行
print(vars(test))                 #② varsはオブジェクトの中を出力

for i in test:                 #③ __iter__を実行
    print(i)

   ⇒ init実行      #①の実行結果
      {'ans': (10, 20, 30), 'nn': 0}      #②の実行結果
      iter実行      #③の実行結果
      10
      20
      30


__next__
複雑な処理を実施した結果を反復処理させたい場合に、__iter__と組み合わせて使用します。赤字が追加修正部分です。 注意が必要なのは、終了条件を定義(raise StopIterationの部分)しないと処理が終わらずにループし続けます。

class calc_Iter:
    def __init__(self, *nums):
        self.ans = nums
        self.nn = 0
        print("init実行")

    def __iter__(self):
        print("iter実行")
        return self

    def __next__(self):
        if self.nn == len(self.ans):raise StopIteration()
        value = self.ans[self.nn]
        self.nn += 1
        print("next実行")
        return value


test = calc_Iter(10,20,30)    
print(vars(test))      

for i in test:
    print(i)

⇒    init実行
      {'nums': (10, 20, 30), 'nn': 0}
      iter実行
      next実行
      10
      next実行
      20
      next実行
      30










サブチャンネルあります。⇒ 何かのお役に立てればと

関連記事一覧



Python
Pythonとは
基本的な使い方
IDLE
Jupyter Notebook
Markdown
コマンドプロンプトで実行
仮想環境の構築
仮想環境でIDLEを実行
ライブラリのインストール
pipの使い方
numpy , matplotlib等
graphviz
pytorch
Mecab
Pythonの関数:一覧
共通関数
append , extend
class
copy
csv.reader
csv.writer
def , return
dict , defaultdict
enumerate
exit
for
if
import
in
input
lambda
len
list
min/max
OrderedDict
open/close
os
pickle
print
range
re.split
read/readline
round/floor/ceil
split
sys.argv
time
while
write
zip
・特殊メソッド
 ・__name__
 ・__iter__ , __next__
正規表現、メタ文字
データの型の種類
四則演算 (+ , - , * , /)
コメントアウト (# , ''')
numpy
append
arange
argmax/argmin
array
asfarray
astype , dtype
digitize
dot
hstack/vstack
linalg.solve
linspace
mean
meshgrid
mgrid
ndim
ndmin
pad
poly1d
polyfit
prod
random
reshape
savetxt/loadtxt
shape
std
transpose
where
zeros/zeros_like
scipy
expit
imread
interpolate
matplotlib
imshow
figure
pcolormesh
plot
scatter
scikit-learn
GaussianNB
KMeans
KNeighborsClassifier
SVC
tree
keras
chainer
chainerrl
pytorch
BCELoss , MSELoss
Embedding
device
Sequential
Dataset, Dataloader
RNN, LSTM
OpenAI gym
Blackjack-v0
CartPole-v0
tkinter
frame, grid
画像表示
画像を切り取り表示
画像を保存
目的別
ステップ関数
1 of K 符号化法
線形補間
配列に番号をつける