プログラムとか 思ったこととか 徒然ブログ 投稿一覧へ戻る

タグ "Python" が付いている投稿一覧

【 Effective Python, 2nd Edition 】引数として受け取った値を関数内で複数回「消費」する場合には要注意! イテレータ ( iterator ) とコンテナ ( container ) の違いをちゃんと認識しよう!

Tags: Python , generator , iterable , iterator , Effective , container , protocol

Published 2020年6月29日20:44 by T.Tsuyoshi

関数が引数としてリストをとる場合、そのリストを関数内部で複数回参照することはよくあります。 例えば、台湾旅行に行った日本人が訪れた観光地ごとの訪問者数のリストがあるとします (千人/年)。 そして人気度をみるために、それぞれの観光地が占める割合を計算したいとしましょう。 そのためには、まず訪問者数の合計を求め、続けて、それぞれの観光地の訪問数をその合計で割ることになりますね。 def normalize(numbers): total = sum(numbers) print(f"合計訪問者数: {total}") result = [] for value in numbers: percent …

【 Effective Python, 2nd Edition 】リストを返す関数を作るなら、ジェネレータを返しちゃダメか1回立ち止まって考えよう、の巻

Tags: Python , generator , iterator , Effective

Published 2020年6月27日19:16 by T.Tsuyoshi

結果としてシーケンスを返す関数を作成する場合、最も一般的な選択肢は「リストを返す」ということでしょう。 次の例は、受け取った文字列について、文字列中の各単語の先頭インデックス番号と該当する単語のタプルからなるリストを返すものです。 sentence = "Nana is cute and very popular among my friends." def index_words(text): result = [] prev_index = …

【 Effective Python, 2nd Edition 】assignment expression (walrus operator, :=) を利用して内包表記におけるサブ書式の重複を回避しよう!

Tags: Python , comprehension , Effective , assignment , walrus , expression

Published 2020年6月26日16:57 by T.Tsuyoshi

内包表記内の複数の箇所で同じ計算結果を参照したい、ということはよくあることです。 例えば、文房具を扱う会社の受注プログラムを作成するとします。 注文がきた時点で、発送可能な出荷単位以上の在庫があるかどうかを確認し、顧客に表示できるようにしましょう。 # 在庫 stock = { 'stapler': 99, 'notebook': 252, 'marker': 8, 'post-it': 43, } # 各商品の出荷単位 ship_unit …

【 Effective Python, 2nd Edition 】内包表記に含める for 文や if 文の数は2つ位までに抑えておかないと読解性が極端に悪くなりますよ、という話

Tags: Python , comprehension , Effective

Published 2020年6月25日19:11 by T.Tsuyoshi

内包表記 (comprehension) には複数の for 文を含めることができます。 例えば、for ステートメントを2つ含んだリスト内包表記で matrix をフラットなリストに変換しようと思います。 同じレベルで並んでいる for 文は左から右へと処理されます。 matrix = [[1, 2, 3], [4, 5, 6], …

【 Effective Python, 2nd Edition 】再帰関数の実行順序をトレースするデコレータを実装しよう - デバック用途にも重宝します!

Tags: Python , Effective , decorator , recursive

Published 2020年6月24日21:04 by T.Tsuyoshi

今回もデコレータに関連する話題ですが、デコレータの詳細については 前回 取り上げましたので、 今回は復習も兼ねながらちょっと面白いプログラムをご紹介します。 このプログラムは、再帰関数 (recursive function) のネスト呼び出し時における実行過程を、各時点の引数と返却値と共に表示するものです。 fibonacci(4) を実行した際の表示は次のようになります。 (フィボナッチ数については wikipedia を参考にしてください ) fibonacci((0,), {}) -> 0 fibonacci((1,), {}) …