Python : lambda式、型ヒント

参考書籍 : Python実践入門, Python3スキルアップ教科書


・lambda式
lambda式の構文

# lambda 引数1, 引数2, ... : 戻り値になる式

 
lambda式を定義し、変数に格納できる。

increment = lambda num: num + 1
increment(2) # 3

lambda式の戻り値にif文を含められる。

# Trueの戻り値 if(条件) else Falseの戻り値
func = lambda n: "even" if(n % 2 == 0) else "odd" 

但し、変数に代入する場合は関数でも書けるので、関数に統一するべきである
参考 : python - E731 do not assign a lambda expression, use a def - Stack Overflow

lambda式は以下のように、無名関数の作成に使う

nums = ['one', 'two', 'three']
filtered = filter(lambda x: len(x) == 3, nums)
list(filtered) # ['one', 'two']

 


・型ヒント
関数の引数と戻り値に型情報を付与し、コードの保守性や可読性を向上させる。
また、静的解析ツールやエディタのコード補完、コードの自動生成などにも活用される。

構文

def 関数名(arg1: arg1の型, arg2: arg2の型, ...) -> 戻り値の型
    関数の処理
    return 戻り値
def increment(
        page_num: int,
        last: int,
        *,
        ignore_error: bool = False) -> Optional[int]:
    next_page = page_num + 1
    if next_page <= last:
        return next_page
    if ignore_error:
        return None
    raise ValueError('Invalid arguments')

付与された型情報はアノテーションと呼ばれる属性__annotations__に格納されるだけで、実行時の型チェックは行われない。
そのため、以下のような呼び出しも可能

increment(1, 3, ignore_error=1)  # boolの型情報をもつ引数にintを渡す

 
変数に型ヒントを持たせることも可能

prev_page: int
prev_page = page_num - 1