2019.11.21この記事は約8分で読めます。超初級を脱出したい(自分も同様w)__iter__って何?iterableとiteratorって何が違うのって人?iteratorを理解すると何ができる?今回の記事のゴール今回の記事は何ができるではなく、pythonのiterにおいて何が起きているのかを理解することがメインなので、特に何ができるようになるわけではないかと思います。唯一できるようになることと言えば、自作のイテレータが作成できるようになることくらいでしょうか。そもそも関係性は?iteratorやgeneratorを考えていきますが、そもそもこれまでpythonの型とかを勉強してくるとシーケンスやコンテナ、その他いろんな用語学んできていると思います。その関係性をまずはざくっとイメージしてみます。ラフ図なので厳格ではない、そして抜けている要素もありますが、そこらへんは理解するための概観イメージとしてお許しください。概念イメージ大きくiterable(イテラブル)な要素の中に、これまで学んできている組み込みの基本型(list/tuple/set/dictなど)も含まれています。object(イテラブル・オブジェクト)といいます。他方、iteratorは要素を順番に取り出すことができるオブジェクトのことを指します。for文を作成するときにlistやtuple入れて実行していたと思いますが、listやタプル自体はイテレータではないのですが、イテラブルなので、イテレータ要素に変換されて自動で実行されていました。・・・・・って、日本語として非常にわかりにくいですよね。いうことで、実際にそれぞれの要素がもつdirを確認しながらみていきましょう。listのdirをみてみようさて、以下のコードを実行してみましょう。変数aはリストになっており、aをdir(a)として表示することで、リストのdirが確認できます。[]print("listのdir:",dir(a))こんな感じで表示されていますよね?少しみにくいかと思いますが、ご容赦ください。ここで注目するのは、__iter__という要素が含まれていることです。objectとなります。__iter__って何をしているかというと、for文とかで呼び出されたときに、イテレータを自動生成してくれる要素です。list自体はイテレータではなくて、イテレータの要素を持ったiterableなオブジェクトっていうことになります。list.__iter__のdirをみてみようじゃぁこの__iter__っていうのが、どういう要素を有しているのかもみていきましょう。[]print("list.__iter__のdir:",dir(a.__iter__()))こんな感じで表示されていますよね?少しみにくいかと思いますが、ご容赦ください。これも同様に__iter__要素を保有していますね。いうことで、当たり前ではあるのですが、iteratorのiterableなオブジェクトです。ここで注目する違いは、__next__という要素を保有しているところです。これが要素を順番に取得するために必要な要素となっており、list自体にはなかったけど、list.__iter__は保有する要素です。この要素を持つ物が、iteratorと呼ばれるものになります。なんか回りくどい感じしない?と思ったあなたへなぜlist自体をiteratorとしないのでしょうか?そこを理解するためには、iteratorが全ての要素を実行しおえたあとの動作も勉強する必要があります。シンプルに言ってしまうと、イテレータってリミットまで処理したら、動作を止める処理が含まれていて、何度も再利用しようとしたときには別のオブジェクトを作る必要があります。ことは、リスト自体をイテレータにしてしまった場合、再利用が効かなくなるんですよね。わからない部分もあると思うので、実際に自作イテレータを作成してみましょう。イテレータを自作してみようイテレータの実装はシンプルに作ると以下のようになります。実際のイテレータは”呼び出されたよ”とかはもちろん表示しませんが、呼び出されたことがわかるように、ここでは入れています。self.counterどんな動作が予定されているかというと、一回呼び出されるたびにcounterを1ずつプラスしていくだけのイテレータです。実際に動かしてみましょう。#カウントアップしたため、1が表示されるこんな所作をイメージしています。呼び出すたびに1が足されていくだけですね。実行結果も確認していきましょう。自作イテレータ実行さて、このイテレータがfor文で使えるかも実験です。さっきの続きから処理していきますので、表示されるのはカウントアップされていく数値+”nextが呼び出されたよ”が10まで続きます。print(ci.counter)実行結果です。イテレータとして機能していますね。10(リミット数)までイテレータとして使い終わるとどうなるかという点も確認が必要ですね。print(ci.counter)ci.__next__()stopIteration()関数が動作して、止まるようになっていますね。イテレータ関数は基本上限数(listiteratorの場合は、リストの要素数)まで利用すると再度初期化しない限り、そのオブジェクトでは動作が止まるように設計されています。objectにする要因の一つですね。print(ci.counter)ci.__next__()まとめ長々とiteratorについてみてきましたが、少しは理解の足しになったでしょうか。書きながら回りくどいなぁと思う部分も多かったですが、一つ一つ理解していくことが、脱超初級の目標ですので、悪しからず。次回は、generatorについて勉強していきたいと思います。object自体の理解をある程度形にしていきたいですね。python超初級脱出シリーズpythonの入門編を終えた後に、supper_beginnerクラスを脱出するためのシリーズです。unitテストやフレームワークの使い方に行く前に、少しpythonの知識を深めたい人用の記事です。v4を使ってスプレッドシートにアクセスしてみましょう。スプレッドシートのデータの読み書きや、そもそも前提となる認証のパス方法などを説明していきます。スクレイピングで取得したデータをスプレッドシートにアップできるようになります。Pythonpython/seleniumを使ってtwitterに自動投稿してみるseleniumはスクレイピングを非常に簡易に実装できる機能です。今回は非常にシンプルなtwitterへの自動投稿機能を作成していきます。cron/launchedによるデーモン処理と合わせると実行まで自動化することも可能です。Pythonpython練習問題〜シリーズ1第3回、レベル超初級の初級3〜python3練習問題、ポーカの手役判定ロジックをpythonの練習題材にしています。カード4枚+マークだけなので、非常に簡単なコードでできますが、シンプルなclass作成と利用もしていきます。Pythonpython練習問題〜シリーズ1第5回、レベル超初級の初級5〜python3練習問題、ポーカの手役判定ロジックをpythonの練習題材にしています。5枚で50万回施行して、確率論にどの程度近似するのか試してみました。Pythonpython練習問題〜シリーズ1第3回派生、レベル超初級の初級3+α〜python3練習問題、ポーカの手役判定ロジックをpythonの練習題材にしています。カード4枚+マークだけではありますが、手役の出現確率を計算するロジックを作っていきます。flaskflaskでアプリを作る際のメモ〜configの初期設定値~flaskでapp作った際の、configの初期値を確認するための記事です。app.config等で日頃config設定変更されていると思いますが、そもそも何が設定されているのかを把握するためにテストしてみました。コメントをキャンセルメールアドレスが公開されることはありません。htmlメールの設定とトリガー設定)〜2019.04.242020.01.23。