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

Más contenido relacionado

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

プログラミング学習とScratch raspi python
プログラミング学習とScratch raspi pythonプログラミング学習とScratch raspi python
プログラミング学習とScratch raspi pythonYoshitaka Shiono
 
Pyladies tokyo 20150123
Pyladies tokyo 20150123Pyladies tokyo 20150123
Pyladies tokyo 20150123Ai Makabi
 
OSS Study#19_LT
OSS Study#19_LTOSS Study#19_LT
OSS Study#19_LTNaoY-2501
 
ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会sekikazu
 
Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17Shinya Okano
 
PredictionIOのPython対応計画
PredictionIOのPython対応計画PredictionIOのPython対応計画
PredictionIOのPython対応計画Shinsuke Sugaya
 
Pythonで自動化した話1
Pythonで自動化した話1Pythonで自動化した話1
Pythonで自動化した話1Masato Fujitake
 
Python入門者の集い #6 Lightning Talk
Python入門者の集い #6 Lightning Talk Python入門者の集い #6 Lightning Talk
Python入門者の集い #6 Lightning Talk Katayanagi Nobuko
 
Python3と向かい合ってみる
Python3と向かい合ってみるPython3と向かい合ってみる
Python3と向かい合ってみるAtsuo Ishimoto
 
PythonのインストールからHello Worldまで
PythonのインストールからHello WorldまでPythonのインストールからHello Worldまで
PythonのインストールからHello WorldまでKioto Hirahara
 
こわくないPython
こわくないPythonこわくないPython
こわくないPythonKatsuya Arai
 
S10 t1 spc_by_nowfromnow
S10 t1 spc_by_nowfromnowS10 t1 spc_by_nowfromnow
S10 t1 spc_by_nowfromnowTakeshi Akutsu
 
みんなのPython勉強会#43 Pyladies x Stapy ジョイントミートアップ #2
みんなのPython勉強会#43 Pyladies x Stapy ジョイントミートアップ #2みんなのPython勉強会#43 Pyladies x Stapy ジョイントミートアップ #2
みんなのPython勉強会#43 Pyladies x Stapy ジョイントミートアップ #2ManPingHe
 
Pythonで作る自作デバッガLT資料
 Pythonで作る自作デバッガLT資料 Pythonで作る自作デバッガLT資料
Pythonで作る自作デバッガLT資料Yuya Masumura
 

Similar a みんなのはんなりPython勉強会 (20)

プログラミング学習とScratch raspi python
プログラミング学習とScratch raspi pythonプログラミング学習とScratch raspi python
プログラミング学習とScratch raspi python
 
Pyladies tokyo 20150123
Pyladies tokyo 20150123Pyladies tokyo 20150123
Pyladies tokyo 20150123
 
OSS Study#19_LT
OSS Study#19_LTOSS Study#19_LT
OSS Study#19_LT
 
ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会
 
Hannari python#27
Hannari python#27Hannari python#27
Hannari python#27
 
Pythonでpdfをいじってみる
PythonでpdfをいじってみるPythonでpdfをいじってみる
Pythonでpdfをいじってみる
 
Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17
 
S15 t0 introduction
S15 t0 introductionS15 t0 introduction
S15 t0 introduction
 
PredictionIOのPython対応計画
PredictionIOのPython対応計画PredictionIOのPython対応計画
PredictionIOのPython対応計画
 
Pythonで自動化した話1
Pythonで自動化した話1Pythonで自動化した話1
Pythonで自動化した話1
 
Python入門者の集い #6 Lightning Talk
Python入門者の集い #6 Lightning Talk Python入門者の集い #6 Lightning Talk
Python入門者の集い #6 Lightning Talk
 
S18 t0 introduction
S18 t0 introductionS18 t0 introduction
S18 t0 introduction
 
S09 t0 orientation
S09 t0 orientationS09 t0 orientation
S09 t0 orientation
 
Introduction
IntroductionIntroduction
Introduction
 
Python3と向かい合ってみる
Python3と向かい合ってみるPython3と向かい合ってみる
Python3と向かい合ってみる
 
PythonのインストールからHello Worldまで
PythonのインストールからHello WorldまでPythonのインストールからHello Worldまで
PythonのインストールからHello Worldまで
 
こわくないPython
こわくないPythonこわくないPython
こわくないPython
 
S10 t1 spc_by_nowfromnow
S10 t1 spc_by_nowfromnowS10 t1 spc_by_nowfromnow
S10 t1 spc_by_nowfromnow
 
みんなのPython勉強会#43 Pyladies x Stapy ジョイントミートアップ #2
みんなのPython勉強会#43 Pyladies x Stapy ジョイントミートアップ #2みんなのPython勉強会#43 Pyladies x Stapy ジョイントミートアップ #2
みんなのPython勉強会#43 Pyladies x Stapy ジョイントミートアップ #2
 
Pythonで作る自作デバッガLT資料
 Pythonで作る自作デバッガLT資料 Pythonで作る自作デバッガLT資料
Pythonで作る自作デバッガLT資料
 

Más de hiroya akita

KyotoLT_Online_27.pdf
KyotoLT_Online_27.pdfKyotoLT_Online_27.pdf
KyotoLT_Online_27.pdfhiroya akita
 
はんなりPython #45
はんなりPython #45はんなりPython #45
はんなりPython #45hiroya akita
 
Python 3.10の新機能を 俯瞰してみる
Python 3.10の新機能を 俯瞰してみるPython 3.10の新機能を 俯瞰してみる
Python 3.10の新機能を 俯瞰してみるhiroya akita
 
KyotoLT(Online) 第26回
KyotoLT(Online) 第26回KyotoLT(Online) 第26回
KyotoLT(Online) 第26回hiroya akita
 
AppSync導入のすすめ
AppSync導入のすすめAppSync導入のすすめ
AppSync導入のすすめhiroya akita
 
みんなのPython勉強会#62
みんなのPython勉強会#62みんなのPython勉強会#62
みんなのPython勉強会#62hiroya akita
 
はんなりpython#32
はんなりpython#32はんなりpython#32
はんなりpython#32hiroya akita
 
変数の重要度ってどうやったらわかるん?
変数の重要度ってどうやったらわかるん?変数の重要度ってどうやったらわかるん?
変数の重要度ってどうやったらわかるん?hiroya akita
 
Pythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だったPythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だったhiroya akita
 
Lt debian 20190526
Lt debian 20190526Lt debian 20190526
Lt debian 20190526hiroya akita
 

Más de hiroya akita (10)

KyotoLT_Online_27.pdf
KyotoLT_Online_27.pdfKyotoLT_Online_27.pdf
KyotoLT_Online_27.pdf
 
はんなりPython #45
はんなりPython #45はんなりPython #45
はんなりPython #45
 
Python 3.10の新機能を 俯瞰してみる
Python 3.10の新機能を 俯瞰してみるPython 3.10の新機能を 俯瞰してみる
Python 3.10の新機能を 俯瞰してみる
 
KyotoLT(Online) 第26回
KyotoLT(Online) 第26回KyotoLT(Online) 第26回
KyotoLT(Online) 第26回
 
AppSync導入のすすめ
AppSync導入のすすめAppSync導入のすすめ
AppSync導入のすすめ
 
みんなのPython勉強会#62
みんなのPython勉強会#62みんなのPython勉強会#62
みんなのPython勉強会#62
 
はんなりpython#32
はんなりpython#32はんなりpython#32
はんなりpython#32
 
変数の重要度ってどうやったらわかるん?
変数の重要度ってどうやったらわかるん?変数の重要度ってどうやったらわかるん?
変数の重要度ってどうやったらわかるん?
 
Pythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だったPythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だった
 
Lt debian 20190526
Lt debian 20190526Lt debian 20190526
Lt debian 20190526
 

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

Notas del editor

  1. この宣言の仕方は、関数から複数の値が返ってくる場合にも利用しますので、 覚えておくと損はないかと思います。