開発環境
- 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 コメント:
コメントを投稿