什么是更 Pythonic - 函数组合、lambdas 或其他东西? [关闭]

Posted

技术标签:

【中文标题】什么是更 Pythonic - 函数组合、lambdas 或其他东西? [关闭]【英文标题】:What is more pythonic - function composition, lambdas, or something else? [closed] 【发布时间】:2012-08-27 08:31:59 【问题描述】:

给定下面的例子,哪个更pythonic?使用函数组合、lambdas 或 (现在是)完全不同的东西?我不得不说 lambdas 似乎更具可读性,但 Guido 本人似乎想完全删除 lambdas - http://www.artima.com/weblogs/viewpost.jsp?thread=98196

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'

【问题讨论】:

我认为 lambda 版本是最直接和清晰的,我也认为它是最“pythonic”的。 nitpick -- 根据你对 iserror 的定义,你应该有类似 iserror(int,x) 的东西,而不是 iserror(int(x)) @Vaugn Cato 谢谢!相应地更新了问题 【参考方案1】:

从未见过 Python 的程序员一眼就能认出 lambda。我已经使用 Python 十多年了,我一直在摸索组合形式,即使与 lambda 版本进行比较也是如此。

选择不烂的。此外,鉴于 lambda 进行了 3.0 剪辑,我怀疑它是否会被删除。

【讨论】:

【参考方案2】:

这是一种属于“不同”类别的方法:

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'

【讨论】:

以上是关于什么是更 Pythonic - 函数组合、lambdas 或其他东西? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Phonics 自然拼读法 ar er ir ur or 元音字母组合 Teacher:Lamb

从列表中弹出随机元素的最pythonic方法是啥?

应用三参数函数“减少”列表的pythonic方法是啥?

导入内部函数是pythonic吗?

有条件返回函数的最pythonic方法是啥

将函数应用于多索引多列数据帧的 Pythonic 方法是啥?