変数
1 |
a = 1 |
コメント
1 |
# コメントです。 |
出力
print関数
1 2 3 4 |
a = 1 print(a) print('a',a) # a 1 |
複数出力
1 2 3 |
a = 2 b = 3 print(a,b) # 2 3 |
辞書を出力(pprint)
辞書をprintするとそのままでは改行されず非常に見づらいです。その場合はpprintを使ってあげると自動でいい感じに改行してくれるのでデバッグが楽です。
1 2 3 4 5 |
from pprint import pprint pprint(list[0]) {'address': '東京都', 'age': '25年'} |
演算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
a = 1 + 2 print(a) b = 2 - 1 print(b) c = 2 * 2 print(c) d = 4 / 2 print(d) # 2.0 # 4 ÷ 3 の商を計算 print(4 // 3) # 5 ÷ 3 の余りを計算 print(5 % 3) |
文字列
「ダブルクオート」と「シングルクオート」の違い
基本的には、文字列を囲むという用途ではどちらも違いはありません。
ただ、「文字列の中にダブルクオートを使いたい場合は、シングルクオートを使う」、「文字列の中にシングルクオートを使いたい場合は、ダブルクオートを使う」という様な使い分けをします。どちらを使っても変わりない場合はシングルクオートを優先して使うことが一般的です。
例
1 2 3 4 5 6 7 8 |
#文字列の中にダブルクオートを使いたい場合は、シングルクオートを使う print('おはよう"ございます。') #文字列の中にシングルクオートを使いたい場合は、ダブルクオートを使う print("おはよう'ございます。") #文字列の中にシングルクオート、ダブルクオートをどちらも使いたい場合 print("おはよう\'ござい\"ます。") |
また、「文字列の中にシングルクオート、ダブルクオートをどちらも使いたい場合」は、\にてエスケープします。
変数に代入して特定の文字だけ取得
1 2 3 4 5 6 7 8 |
s = 'abcd' print(s[0]) # a a = 'abcd' print(a[0:2]) # ab print(a[2:]) #cd print(a[:3]) #abc print(a[-1]) #d |
特に後者の範囲指定は、0から1ではなく0から2になるので注意しましょう。
比較演算子
1 2 3 |
2 == 2 # True 3 == 2 # False 3 >= 2 # True |
型
1 2 3 4 5 6 7 8 |
type(2) # int type(3.14) # float type('テキスト') # str type(False) # bool type([1, 2, 3, 4, 5]) # list type((1, 2, 3)) # tuple type({'スイカ': 80, 'メロン': 100}) # dict type({1, 2, 3}) # set |
キャスト(型変換)
1 2 |
str(3) # '3' int('3') # 3 |
条件分岐
1 2 |
if 2 < 4: print('あってます') |
半角スペースは4つが良いです。
elif
1 2 3 4 |
if 2 < 0: print('ゼロより小さいです。') elif 2 > 0: print('ゼロより大きいです') |
普通の言語でいうelse ifです。
else:
1 2 3 4 |
if 0 != 0: print('ゼロではないです') else: print('ゼロです') |
for文
1 2 3 4 5 6 |
for i in range(3): print(i) 1 2 3 |
開始位置を指定
1 2 3 4 5 |
for i in range(1, 3): print(i) 1 2 |
一つ飛ばす
1 2 3 4 5 |
for i in range(1, 5, 2): print(i) 1 3 |
listを回す。
1 2 3 4 5 6 7 |
list = ['メロン', 'スイカ', 'いちご'] for v in list: print(v) メロン スイカ いちご |
while文
1 2 3 4 5 6 7 |
while i < 3: i = i + 1 print(i) 1 2 3 |
break
1 2 3 4 5 6 7 8 9 |
while i < 5: print(i) i += 1 if i == 3: break 0 1 2 |
continue
1 2 3 4 5 6 7 8 9 |
for i in range(5): if i == 3: continue print(i) 0 1 2 4 |
関数
組み込み関数
これ以外にも非常にたくさんの関数があります。公式ドキュメントで都度調べましょう。
- len
- type
- id
- range
- enumerate
- min
- max
len
長さを取得できる。
1 2 |
str('こんにちは') 5 |
min、max
リストの中の最大値、最小値を取得できる。
1 2 3 4 5 6 |
list= [1, 2, 3] print(max(list)) print(min(list)) 3 1 |
自作関数
1 2 3 4 |
def aaa(): print('Hello World') aaa() # Hello World |
戻り値を返す関数
1 2 3 4 |
def aaa(): return 'Hello World' print(aaa()) # Hello World |
引数
1 2 3 4 |
def aaa(x): print(x) aaa('Hello World') # 'Hello World' |
キーワード引数
引数名を指定すれば、順番は順不同でもいけるというもの。
1 2 3 4 |
def get_full_name(first, name): return first + name full_name = get_full_name(name='太郎', first='佐藤') print(full_name) |
lambda(ラムダ)式、無名関数
関数を短くかけます。
1 2 |
aaa = lambda x: x - 2 print(aaa(4)) |
条件分岐
1 2 |
aaa = lambda x: x if x == 2 else 0 print(aaa(2)) # 2 |
lambdaのユースケース
- 関数名をつけるまでもない簡単な処理の場合に使う。
- また、今後Pythonでデータ分析を行なっていきたい場合は頻出になるのでしっかり抑えましょう。
例外処理
1 2 3 4 5 6 |
try: a =1+'2' except TypeError as e: print(e) # unsupported operand type(s) for +: 'int' and 'str' print('例外処理完了') # これは普通に実行される。 |
なおtryを抜けた後の後続は普通に実行されます。もし例外処理を実行しないと実行時エラーが発生して後続処理は実行されないです。
例外型の種類
TypeError | 変数のデータ型に誤りがある場合のエラー。例えば、intとstrの値を結合させようとした場合に発生します。 |
MemoryError | メモリが枯渇している場合に発生 |
AttributeError | |
NameError | 変数が定義されていない場合のエラー |
Exception | 全ての例外を捕捉したい場合に記述(Errorは全てErrorを派生しているため) |
ZeroDivisionError | ゼロで割った際のエラー |
ValueError | 変数の値に問題がある場合に発生します。 |
RuntimeError | 実行時の例外。かなり汎用的な例外です。どの例外にも当てはまらない場合に使います。例えば、通信エラーなどはこれに含めてしまって問題ないと思います。 |
ExceptionとErrorの違い
XXXErrorクラスはExceptionクラスを継承して作られたクラスになります。
複数かける
なお、例外はどれか一つしか書けないというわけではなく以下のように複数記述することも可能です。
1 2 3 4 |
except TypeError as e: print('例外が発生しました',e) except NameError as e: print('変数定義の際に例外が発生しました',e) |
正常に終わった場合の処理、finally
1 2 3 4 5 6 7 8 9 |
try: # a =1+'2' a = 1 + 2 except TypeError as e: print('例外が発生しました',e) else: print('正常です。') finally: print('正常でも異常でもどちらも通る') |
例外処理のユースケース
- スクレイピングプログラムでURLが変わる場合
意図的に例外を発生させる。
1 |
raise 例外オブジェクト(メッセージ) |
メッセージを指定すればトレースバックに出力されます。
ユースケース
では何のためにraiseさせるのかというと以下のようなケースが該当します。
バリデーション目的
例えば、ファイルから読み込んだCSVデータが意図と違っていた場合は意図的に例外を発生させます。
通信障害捕捉目的
例えば、WebAPIでエラーレスポンスとして500(サーバーダウン)などが返ってきた場合にステータスコードを確認してraiseしてあげたりします。
自作の例外クラスに変えたい場合
例外クラスはPython標準以外にも自分で自作することも可能です。自作の例外クラスを呼び出い場合などもraiseを使って呼ぶ必要があります。
retry目的
retryというライブラリは例外が発生したら自動的に再実行するのですが、一旦try ~ exceptで捕捉したうえでログ出力してraiseでretryを実行させる。
class
1 2 3 4 5 6 7 8 9 10 11 |
class Printer(object): def __init__(self,title): self.title = title def output(self): print(self.title +'を印刷します。') printer = Printer('請求書') printer.output() 請求書を印刷します。 |
self
オブジェクト自身を指しています。(上の例で言えばPrinterオブジェクト)
インスタンス変数
1 2 3 |
class Printer(object): def __init__(self,title): self.title = title |
初期値を固定するなら以下の書き方もできます。
1 2 |
class Printer(object): title = "初期値" |
継承
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class Printer(object): def __init__(self,title): self.title = title def output(self): print(self.title +'を印刷します。') printer = Printer('請求書') printer.output() class SubPrinter(Printer): pass printer = SubPrinter('発注書') printer.output() 請求書を印刷します。 発注書を印刷します。 |
この記事へのコメントはありません。