Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

みんなのはんなりPython勉強会

244 views

Published on

2019年12月6日開催、みんなのはんなりPython勉強会の発表資料

Published in: Engineering
  • Be the first to comment

みんなのはんなりPython勉強会

  1. 1. Python中級者への道しるべ みんなのはんなりPython勉強会 2019/12/6@スプーキーズ by あっきー
  2. 2. 自己紹介 ● 京都のIT会社で働いてます ● 業務では主に、AWS、Openblocks、SORACOM などを使ってサービスを提供してます ● PythonはAWS Lambdaでバリバリ書いてます ちなみに、AWS Lambdaは11月18日に Python 3.8に対応しました🎉 2
  3. 3. 本日お話しさせて頂く内容 ● 入門書籍にはあまり載っていないテクニック ● 実際の業務でPythonを使った経験からのノウハウ ● 自分が初級者の時に、知っておきたかった内容 基本的には初級者~中級者の方を対象にしております。 上級者以上の方は、温かく見守って頂けるとありがたいです。 3
  4. 4. その他 スライドは共有しますので、写真等をとって頂く必要はありません。 最後に質疑応答の時間を設ける予定ですので、質問はその時にして頂け ればと思います。 (もちろん、発表途中に質問頂いても問題ありません) 4
  5. 5. では、本編スタート!! 5
  6. 6. Pythonicなコードとは Pythonのガイドラインに沿った、読みやすい・副作用の少ない・ 変更しやすいコードのこと 具体的な定義は明確にはないが、Pythonistaの共通認識として、 良いコードのことをPythonicなコードと呼ぶ 6
  7. 7. 変数の代入 7 普通に代入 1行で代入 意味のあるグループ単位で、 複数の変数を1行で宣言すると可読性が向上
  8. 8. 変数の代入 8 同じ値を複数の変数に代入 2行目の代入の仕方は危険です なぜでしょう?
  9. 9. 変数の代入 9 同じ値を複数の変数に代入 2行目の代入の仕方は危険です なぜでしょう? listはミュータブルオブジェクトであり、 x,y,zそれぞれが同じオブジェクトを参照するため 正しくはこっち
  10. 10. そもそも変数とは何か? 10 139974500313648 x 10 139974500313648 20 139974500313968 xの箱に直接10や20という値が 入っているわけではない
  11. 11. そもそも変数とは何か? 11 139974500313968 x 10 139974500313648 20 139974500313968 xの箱に直接10や20という値が 入っているわけではない
  12. 12. イミュータブル、ミュータブル? イミュータブルとは、参照先の値を書き換えることができない、 ということです。 Pythonにおけるイミュータブルオブジェクトには下記があります。 ● float ● int ● str など。。。 12
  13. 13. イミュータブル、ミュータブル? 13 139974500313968 x 10 139974500313648 20 139974500313968 ここの値を明示的に 変えることはできない ここの値を明示的に 変えることはできない
  14. 14. イミュータブル、ミュータブル? ミュータブルとは、参照先の値を書き換えることができる、 ということです。 Pythonにおけるミュータブルオブジェクトには下記があります。 ● list ● dict ● class など。。。 14
  15. 15. イミュータブル、ミュータブル? 15 140694230121984 x [10] 140694230121984
  16. 16. イミュータブル、ミュータブル? 16 140694230121984 x [20] 140694230121984 参照先の内容を変更する ことができる
  17. 17. 変数の代入(再掲) 17 同じ値を複数の変数に代入 2行目の代入の仕方は危険です なぜでしょう? listはミュータブルオブジェクトであり、 x,y,zそれぞれが同じオブジェクトを参照するため 正しくはこっち
  18. 18. 変数の入れ替え 18 普通に入れ替え スマートに入れ替え 一時変数を定義しなくていいので、 シンプルに書ける
  19. 19. 変数の展開(リスト) 19 extendをつかう? ただ、extendを使うと元の変数の内容が変わってしまうし、、、
  20. 20. 変数の展開(リスト) 20 プログラムにおいて、元の変数の内容が変更される、 ということは、多くの場合で好まれない
  21. 21. 変数の展開(リスト) listにアスタリスクをつけることで、配列をばらした状態で 代入することが可能 21
  22. 22. 変数の展開(リスト) ちなみに、配列の結合に関してはプラス(+)演算子でも同じことが できちゃいます。 22
  23. 23. 変数の展開(辞書) 辞書はアスタリスク2つで、ばらして代入することができます 23
  24. 24. 短絡評価 短絡評価とは、左辺を評価した段階で、式全体の値が決定しない 場合のみ、右辺を評価する、という評価方法のこと Pythonでは、「and」と「or」演算子を使うことで短絡評価を 行うことが可能 24
  25. 25. 短絡評価 辞書に「age」というキーがない場合は、エラーになるので、 キーの存在を確認している ただし、そのせいでIF文のネストが2段階になっている 25 普通に書く場合 プログラムにおいては、 ネストが浅い方が好まれる
  26. 26. 短絡評価 andの左側が偽である場合は、右の式が評価されないため、 IF文が1つで済む 26 短絡評価を使って書く場合
  27. 27. 比較演算子の組み合わせ 27 普通に書く場合 スマートに書く場合 右側の書き方の方が直感的に 理解しやすい
  28. 28. 三項演算子 Pythonにも三項演算子はありますが、他の言語と書き方が少し異なります。 28 (変数) = (条件が真のときの値) if (条件式) else (条件が偽のときの値)
  29. 29. 三項演算子 29 普通に書く場合 三項演算子で 書く場合
  30. 30. is演算子 is演算子は、変数の参照先が同じかどうかを比較する 参照先の値の比較ではないので注意 30 testとtest2には同じ文字列が 入っているが、is演算子では 同じものとは判断されない
  31. 31. is演算子 31 139938641179552 test my name is taro. 139938641179552 my name is taro. 139938641179712 139938641179712 test2
  32. 32. ==演算子 参照先の値が等しいかどうかを比較する 32 testとtest2には同じ文字列が 入っているので、同じものだ と判断される
  33. 33. ==演算子 ==演算子は、配列、辞書の要素も確認して比較する 33 非常に便利だが、諸刃の剣となりえる 配列や辞書の中身が非常に大きい 場合、全ての要素を比較して一致を 判断するので、処理速度が線形的に 増加する
  34. 34. 辞書のキーの存在確認 辞書の中に、特定のキーが存在するかどうかを判断するために、inを 使用することが多いかと思います。 34
  35. 35. 辞書のキーの存在確認 個人的には、inでキーの存在比較をするよりも、辞書オブジェクトの メンバー関数であるget関数を使って条件分岐する方が、コードが奇麗 に書けるように思います。 35 get関数は、指定したキーが無ければ、 Noneを返し、指定したキーがある場合 は、そのキーの値を返します。
  36. 36. 関数における引数の参照渡し 下記の関数は配列の要素を2乗した結果を返す関数です。 一つ大きな問題がありますが、どこでしょうか? 36
  37. 37. 関数における引数の参照渡し 正解はtestという引数の中身を直接変更している部分です。 list_valueとtestは同じものを参照しているため、list_valueを変更すると、 関数の呼び出し元にあるtestの中身まで書き変わってしまいます 37
  38. 38. 関数における引数の参照渡し 正しくは下記のようになります。 関数の呼び出し前と呼出し後で、引数の値が変わる様な関数は、 不必要なバグを生む可能性があるので避けるのが望ましいです。 38
  39. 39. 小数点の計算 突然ですが、下記コードの実行結果はどうなるでしょうか。 39
  40. 40. 小数点の計算 突然ですが、下記コードの実行結果はどうなるでしょうか。 40 残念ながら0.3にはなりません
  41. 41. 小数点の計算 理由は、0.1と0.2ともに、2進数で表現できない数字であるため、 float型で表現する場合は、値が丸められるため、計算結果に誤差が 発生するからです。 (小数の2進数表現の詳細は省略しますが、小数部分を2倍した値が 循環する場合は、プログラムで正確に小数値を表現できません) この誤差を回避するためには、decimalモジュールを使います。 41
  42. 42. 小数点の計算 Decimalを使えば、正確に小数の計算を行うことが可能です。 42
  43. 43. 小数点の計算 Decimalを使えば、正確に小数の計算を行うことが可能です。 ただし、割り算が含まれる場合は、Decimalでも正確に計算できない 可能性があるので、その場合はfractionsモジュールを使います。 43
  44. 44. 奇麗なコードを書くためには リントを有効活用しましょう VSCode+Pylintの構成では、実際に書いたコードのどこが良くないのかを 警告してくれるので、コードを書きながら良いコードはどのようなもの かを学ぶことができます。 Pylint https://www.pylint.org/ 44
  45. 45. 勉強方法について Python チュートリアル https://docs.python.org/ja/3.6/tutorial/index.html 公式のチュートリアル 非常によく作られているので、一通り目を通しておくと 良いかと思います。 基本的な内容から中級的な内容まで、幅広く書かれています。 45
  46. 46. 勉強方法について teratail https://teratail.com/ 最初はプログラムを1行書くだけでも、 苦戦することが多いかと思います。 オンライン質問サイトで質問すると、 1日程度で回答が返ってきますので、 うまく使うと学習がはかどります。 46
  47. 47. 勉強方法について MENTA https://menta.work/ プログラミングのメンターを探す サービスもあります。 独学で勉強するのは大変ですので、 プロのプログラマーから学ぶことで、 効率よく上達することができます。 47
  48. 48. ご清聴ありがとうございました 48

×