lambdaに関数を渡す
初めて投稿します。アウトプットの場としてもQiitaを利用していこうと思っています。
現在なんちゃってエンジニアのため生暖かい目で見守ってもらえると嬉しいです。
listに対して一部のパラメータを変更しながら処理するための手法です。
ベタに書かせてもらいますので特に意味のある結果を求めていません。
any_data_list = (range(10)) # 0 to 9
# 固定で渡される変数
val1 = 10
val2 = 20
# 3つの値を受け取って単に掛け算結果を返す関数
def func(fix_val1, fix_val2, var_val3):
return fix_val1 * fix_val2 * var_val3
# any_data_listの全要素に対してfunc関数を処理する
new_list = map(lambda var_val:func(val1, val2, var_val), any_data_list)
# listに変換して結果を出力
print(list(new_list))
出力結果
0, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800]
要素毎の計算結果
var_val3(3番目の値)だけが変動している
1回目: 10 * 20 * 0 = 0
2回目: 10 * 20 * 1 = 200
...
10回目: 10 * 20 * 9 = 1800
以下ハマったというか理解するまでの流れです。
new_list = map(lambda var_val:func(val1, val2, var_val), any_data_list)
この行の書き方が最初腑に落ちず処理される順番を1つずつ考えて見ました。
1. var_valにany_data_listの要素が順番にくる
2. 受けとったvar_valを使ってfunc関数が呼ばれる
3. func関数の第3引数にany_data_listの要素が入ってくる
とここまで書いてみたものの、結局の所下記のようにlambdaで処理を完結する場合と考え方同じですね。
最後に関数に渡る部分で少し混乱していました。
map(lambda x: x**2, any_data_list)
- xにany_data_listの要素が順番にくる
- 渡ってきたxを介してany_data_listの要素を二乗する
(何か自分の中でスッキリしたので良しとしておこう)