作者: 機械伯爵
日時: 2004/9/16(10:47)
 機械です。

 来るべきPython 3.x の脅威(サードインパクト?)に
備え、便利な文法・関数をモジュールで保管します。


 とりあえず、限定的ではありますが、lambda キーワー
ドをシミュレートする関数を書いてみました。

※限定的というのは、位置引数やキーワード引数に対応
  できませんでした・・・まぁ、lambda でそんなややこ
  しい関数書いたこと、無いですけど・・・

def lmd(exp):
  exp = exp.split(":")
  if len(exp) < 2:
    exp = exp[0]
    def r():
      return eval(exp)
  else:
    def r(*argv):
      dic = {}
      args = exp[0].split(",")
      for x in range(len(args)):
        dic[args[x]] = argv[x]
      return eval(exp[1],dic)
  return r

使用法

func = lmd(expression)

 expressionは文字列で、例えば"a,b:a+b"のように書きます。

※'lambda'の6文字を'lmd'の3文字にしたので、ダブル
  クォーテーション2個を含めても、以前よりもコンパ
  クト。

 内部で exec を使えばもう少し柔軟性が出るはずです
が、exec も関数に変更されるとのことなので、eval を
使って従来のように値のみにしました。

 ・・・なぜにこんな苦労しなきゃならないか考えると、
泣けてきます。

※input,raw_input も合わせて、classic パッケージ、
  とでもしようかしらん。


 /機械伯爵/