はじめに
学習を進めるにあたって、自身の備忘録としてまとめます。
取り上げる内容一覧
- lambda
- デコレータ
- クラス
lambda
#ラムダ演算子の使用方法
lambda 引数 : 式
#実例
f = lambda x:x*2
f(3) #x=3として、関数f()の形で計算を利用している
ラムダを使用し作成した関数は、無名関数(匿名関数:anonymous function)と言われます。
通常関数では、上記 x 部分は命名した変数になりますが、一時的に x と置いて簡単に計算を行いたい、といった場合に使用されます。
ラムダを使用しなくても書くことは可能ですが、内包表記を行うと、スッキリとしたコードを作成できます。
# リスト内包表記になおす
data = [1,2,3,4]
for d in [x*2 for x in data]:
# ↑ 展開例:for d in map(lambda x:x*2, data):
print(d)
リスト内包については、上記の通りです。
デコレータ
# 記載方法
@追加機能を就職するデコレータ関数名
def 機能を追加される関数名:
...
#デコレータの使用例
@property
prooertyやsetter、getterなどの内容に深くかかわってきます。
自身の書いた関数の機能に何か追加機能を入れたい場合に使用します。
クラスメソッド(@classmethod)についてもデコレータを利用した記載方法です。
少し話はずれてしまうかもしれないですが、Flaskを利用してルーティングを行う際もデコレータで機能を持ってきて使用します。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
クラスの基本構造
# クラス「Base」を設定します
class Base:
count=0 #ここに書くと、クラス変数となります
def __init__(self,ele1): # コンストラクタを起動します
self.ele1 = ele1
def get_aaa(self):
abc = 1 #ここに書くと、インスタンス変数となります
return self.aaa
def set_bbb(self):
# クラス「New」を設定します
class New(Base): #「class 派生クラス(基底クラス):」として、基底クラスを継承します
def __init__(self,ele1,ele2):
super().__init__(ele2):
self.ele2 = ele2
def get_ccc(self):
def set_ddd(self):
bs = New(a,b) #インスタンス化
print(f"{bs.get_aaa()}、{bs.get_bbb()}、{bs.get_ccc()}、{bs.get_ddd()}")
上記、関数内の処理については、基本的に省いた形で記載をしています。
クラス変数とインスタンス変数の違いはどこに書くか、ですが、クラス変数はクラス全体に作用するのにあたり、インスタンスはインスタンス内のみでの作用となります。この有効範囲はスコープと呼ばれます。
★ def__init__
コンストラクタと呼ばれ、値を初期値に戻す役割です。
基本的にクラスの指定の際は記載します。
派生クラスを作成し、新たに引き数を受け取る場合は、super()メソッドを利用した初期化を追加設定します。
関数を bs 変数でNewクラスをインスタンス化しているので、 bs.関数名()という形で関数呼び出しを行い、print文で出力しています。
参考
『やさしいpython』(著:高橋麻奈) 第16版