还有什么比python函数组合、lambdas或其他东西更重要的呢?

还有什么比python函数组合、lambdas或其他东西更重要的呢?,python,function,lambda,functional-programming,composition,Python,Function,Lambda,Functional Programming,Composition,给出下面的例子,哪个更像蟒蛇?使用函数组合、lambdas或(现在)完全不同的东西?我不得不说,lambdas似乎更具可读性,但Guido本人似乎想完全删除lambdas- 从functools导入部分 从操作员导入而不是从通用电气 def从字符串获取sql数据类型: s=str(s) #compose(*fs)->返回函数fs的组合 #iserror(f,x)->如果从f(x)抛出异常,则返回True,否则返回False #使用函数合成 谓词=( ('int',compose(非u,部分(is

给出下面的例子,哪个更像蟒蛇?使用函数组合、lambdas或(现在)完全不同的东西?我不得不说,lambdas似乎更具可读性,但Guido本人似乎想完全删除lambdas-

从functools导入部分
从操作员导入而不是从通用电气
def从字符串获取sql数据类型:
s=str(s)
#compose(*fs)->返回函数fs的组合
#iserror(f,x)->如果从f(x)抛出异常,则返回True,否则返回False
#使用函数合成
谓词=(
('int',compose(非u,部分(iserror,int)),
('float',compose(非),partial(iserror,float)),
('char',compose(partial(ge,1),len)))
#使用lambdas
谓词=(
('int',lambda x:not iserror(int,x)),
('float',lambda x:not iserror(float,x)),

('char',lambda x:len(x)一个从未见过Python的程序员将能够一目了然地计算出lambda。我已经使用Python十多年了,我一直在挠头以找出组合形式,即使要与lambda版本进行比较


选择一个不烂的。另外,鉴于lambda获得了3.0版,我怀疑它是否会被删除。

以下是一个属于“不同”类别的方法:

def get_sql_data_type_from_string(s):
    s = str(s)

    def char(x):
        if len(x)<=1:
            return x
        raise RuntimeError('Not a char')

    predicates = (
        ('int',     int),
        ('float',   float),
        ('char',    char)
    )

    # Test each predicate
    for i, (t, p) in enumerate(predicates):
        try:
            p(s)
            return i,t
        except:
            pass

    # If all predicates fail
    return (i + 1), 'varchar'
def从字符串获取sql数据类型:
s=str(s)
def字符(x):

如果len(x)我认为lambda版本是最直接和清晰的,我也认为它是最“pythonic”的。吹毛求疵——根据你对iSeries的定义,你应该有类似于
iSeries(int,x)
的东西,而不是
iSeries(int(x))
@Vaugn Cato谢谢!相应地更新了问题
def get_sql_data_type_from_string(s):
    s = str(s)

    def char(x):
        if len(x)<=1:
            return x
        raise RuntimeError('Not a char')

    predicates = (
        ('int',     int),
        ('float',   float),
        ('char',    char)
    )

    # Test each predicate
    for i, (t, p) in enumerate(predicates):
        try:
            p(s)
            return i,t
        except:
            pass

    # If all predicates fail
    return (i + 1), 'varchar'