2013年3月3日日曜日

開発環境

『初めての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 コメント:

コメントを投稿