LoginSignup
2
3

More than 5 years have passed since last update.

Python2のlambda式でprintを使う

Last updated at Posted at 2016-02-28

背景

Pythonで関数を引数として渡す関数を書く際にlambda式を渡そうと思ったのですが、Python2では printが式 (expression)ではなく文 (statement)であるため、lambda式に入れることができませんでした。
そこで、__future__モジュールをインポートして、Python3と同様に print文から print式になるよう変更を加えます。

*式と文の違いについてはStackOverFlowの投稿 がわかりやすいです。要約すると、式(expression)はそれ自体で値を評価できますが、文(statement)は定義された手続きを終えなければ評価ができません。

コード

# Python2では定義できない (printが文であるため)
# a = lambda: print "hoge"

# Python3では定義できる (printが式であるため)
a = lambda: print("hoge")

# Python2で定義する方法
from __future__ import print_function
a = lambda: print("hoge")

ただし、問題点としてはprint "hogehoge" をすべて print("hogehoge")に変更しなければなりません
Python2の中で使う場合は、メソッド内でインポートするなど限られた利用に留めた方が吉でしょう。

appendix

*例えばC#ではラムダ式の中に文を書けたりするので、言語間で違いがあることを留意した方が良いですね。

Action<string> act = (string x) =>
{
    if(x == "hoge") Console.WriteLine(x);
    else Console.WriteLine("hoge以外は許さん");
}

*あと、何気にPythonで引数なしのラムダ式の書き方が分からなかったのですが、

a = lambda: 5 # 5を返すラムダ式

で書けるようです。

*__future__モジュールについてはさりんじゃーさんのブログの内容 にまとめられております。
Python2からPython3へ徐々に移行したい場合などに参考になるかもしれません。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3