以下の例では、これはもっとpythonicですか?関数の構成、lambdas、または(今のところ)を使って全く別のもの?私は、ラムダが読みやすくなるように見えることを言っているが、グイド自身が完全にラムダを削除するようだ - http://www.artima.com/weblogs/viewpost.jsp?thread=98196さらに多くのpythonic - 機能の構成、ラムダ、または何か他のですか?
from functools import partial
from operator import not_, ge
def get_sql_data_type_from_string(s):
s = str(s)
# compose(*fs) -> returns composition of functions fs
# iserror(f, x) -> returns True if Exception thrown from f(x), False otherwise
# Using function composition
predicates = (
('int', compose(not_, partial(iserror, int))),
('float', compose(not_, partial(iserror, float))),
('char', compose(partial(ge, 1), len)))
# Using lambdas
predicates = (
('int', lambda x: not iserror(int, x)),
('float', lambda x: not iserror(float, x)),
('char', lambda x: len(x) <= 1))
# Test each predicate
for i, (t, p) in enumerate(predicates):
if p(s):
return i, t
# If all predicates fail
return (i + 1), 'varchar'
私はラムダのバージョンは私もそれほとんどの「神託」を作ると思われ、最も簡単かつ明確であると思います。 –
nitpick - あなたのiserrorの定義によると、iserror(int(x))ではなく、iserror(int、x)のようなものが必要です。 –
ラムダは素敵です – pyCthon