開発環境
- OS X Lion - Apple(OS)
- BBEdit - Bare Bones Software, Inc.(Text Editor)
- プログラミング言語: Python
『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7) のIV部(関数)の17章(関数に関する高度なテクニック)練習問題7.を解いてみる。
その他参考書籍
7.
コード(BBEdit)
sample.py
#!/usr/bin/env python3.3 #-*- coding: utf-8 -*- # defとlambdaはどちらも関数を作れる # ただしlambdaは式なので、文法的に式が使える場所なら使える(defは使えない) # lambdaは戻り値のみでステートメントのブロックを記述する事ができない # lambdaでできることはdefでもできる def f(x): return x * x g = lambda x: x * x print(f(10), g(10)) a = [(lambda x: x * x)(x) for x in range(10)] print(a) b = [f(x) for x in range(10)] print(b) # この関数はlambdaでは書けない def h(x): if x < 0: return -x return x print(h(-10))
入出力結果(Terminal)
$ ./sample.py 100 100 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 10 $
ちなみにJavaScriptの場合。
コード(BBEdit)
// ブロックも記述できたりと、無名関数についてはpythonのlambdaより // JavaScriptの方が柔軟性があるかも。 function f( x ) { return x * x; } var g = function ( x ) { return x * x; }, result = "", a = [], b = [], h = function ( x ) { if ( x < 0 ) { return -x; } return x; }, i, max; result += f(10) + ", " + g(10) + "\n"; for (i = 0, max = 10; i < max; i += 1) { a.push((function( x ) { return x * x; })(i)); } for (i = 0, max = 10; i < max; i += 1) { b.push(f(i)); } result += a.join(" ") + "\n" + b.join(" ") + "\n"; // JavaScriptでは無名関数でもブロックでの処理が可能 result += h(-10) + "\n" + (function ( x ) { if(x < 0) { return -x; } return x; })(-10); $('#pre0').text(result);
0 コメント:
コメントを投稿