-
Notifications
You must be signed in to change notification settings - Fork 0
Python覚書
名前をつけるもの | 命名規則 | 例 |
---|---|---|
変数 | スネークケース | variable_name |
定数 | 全部大文字のスネークケース | CONSTANT_NAME |
グローバル変数 | スネークケース | global_variable_name |
関数 | スネークケース | function_name |
関数の引数 | スネークケース | function_parameter_name |
クラス | パスカルケース | ClassName |
インスタンス変数 | スネークケース | instance_variable_name |
メソッド | スネークケース | method_name |
パッケージ | スネークケース | package_name |
モジュール | スネークケース | module_name |
出典: https://python.softmoco.com/basics/python-naming-conventions.php
他言語と異なり、インデントの深さでブロックが決まることに注意。
多くのライブラリで空白スペース4つとなっている。
決まりはなく、プロジェクト内で統一されていれば良い。
行中 #
以降はコメント扱いになる。
要素数だけ繰り返す処理。
for item in items:
print(item.value)
リストに対して同じ処理をしたい場合に有効。
list(オブジェクト.メソッド() for オブジェクト名 in リスト名)
class Obj:
def __init__(self, value):
self.value = value
def add(self, v):
self.value += v
li = list([Obj(1), Obj(3), Obj(5)])
list(o.add(2) for o in li)
# [3, 5, 7]
パフォーマンスは、内包表記 > map() > for文
参考:Pythonでfor文とlambdaの書き方&速度を比較してみた
条件がtrueの限り繰り返す処理。
while len(list) > 0:
list.pop(0)
他言語のswitch-case文に該当するが、様々なバリエーションがある。
number = 10
match number:
case 0:
raise Exception('失敗')
# ここがマッチ
case 10:
print('成功')
case _:
raise Exception('失敗')
参考:https://www.lifewithpython.com/2021/06/python-structual-pattern-matching.html
list.append(item)
# 先頭は0
list[0]
# clear(): 全削除
list.clear()
# pop(): 指定した位置の要素を削除し、値を取得
# 先頭の要素は0
list.pop(0)
# 最後の要素は-1
list.pop(-1)
# remove(): 指定した値と同じ要素を検索し、最初の要素を削除
# 存在しない場合はエラー
list.remove("something")
# del: 削除したい要素をインデックスで指定する。
# 先頭の要素は0
del list(0)
# 最後の要素は-1
del list(-1)
参考:https://note.nkmk.me/python-list-clear-pop-remove-del/#pop
print(list)
# ['A', 'B', 'C']
print(" ".join(list))
# [A B C]
try-catchに該当する構文。
except
はtry
の中で例外が起きた場合に、
else
はtry
の中で例外が起きなかった場合に実行される。
except (例外クラス) as (変数名):
で、例外の内容を捕捉できる。
try:
value1 = 0
value2 = 1
print(value2 / value1)
except Exception as e:
print(e)
else:
print("No Error!")
finally:
print("Done!")
division by zero
Done!
# 通常のクラス
class MyClass:
# static属性
staticValue = "static"
# コンストラクタ
__init__(self):
# インスタンス属性
self.name = "suzuki"
self.lang = "ja"
# 慣習的に、自クラス以外からアクセスさせたくないことを意味した属性
self._lang = "ja"
# 自クラス以外からアクセスできないようにする
self.__lang = "ja"
# staticメソッド
@staticmethod
def static_do():
print(MyClass.staticValue)
# classメソッド ※staticメソッドとの違いは、第一引数からそのクラス自身にアクセスできる
@classmethod
def class_do(class):
pass
# インスタンスメソッド
def do(self):
print(self.name)
# 派生クラス
class Parent:
# 内容が存在しない場合は pass でブロックを閉じる
pass
class Child(Parent):
pass
参考: なぜPythonにはgetter/setterがないのか?
# インターフェースを定義するために ABC を利用する
from abc import ABC
# インターフェース
class IMyClass(ABC):
# 抽象クラス
@abstractmethod
def abstract_do(self):
pass
# 具象クラス
class MyClass(IMyClass):
__init__(self):
pass
# 抽象メソッドの実装
abstract_do(self):
pass
type(判定対象)
で型を取得できる。
def is_str(v):
return type(v) is str # 複数の型を判定したい場合は、in (Class1, Class2) とする
print(is_str('string'))
# True
print(is_str(100))
# False
print(is_str([0, 1, 2]))
# False
instance(比較対象, クラス)
は比較対象が派生クラスのオブジェクトでも一致とみなす。
print(type(True))
# <class 'bool'>
print(type(True) is bool)
# True
print(type(True) is int)
# False
print(isinstance(True, bool))
# True
# Pythonの bool は int の派生クラス
print(isinstance(True, int))
# True
対象のインスタンスが属性を持っているならTrueを返す。
obj.value = 1
hasattr(obj, value)
# True
参考:https://docs.python.org/ja/3/library/functions.html#hasattr