为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法让Python的函数的函数更具可读性?

有没有办法让Python的函数的函数更具可读性?

哈士奇WWW 2023-05-23 15:57:09
我用 Python 编写了以下代码,在一个参数“x”中涉及多个函数:stemming(removeStopWords(stringToList(removeRepChar(charOk(x)))))我想知道我是否可以做些什么来使该代码更具可读性(如果它还不够可读)。我可以像在其他编程语言中那样以某种方式省略那些括号吗?例如在 Haskell 中:stemming $ removeStopWords $ stringToList $ removeRepChar $ charOk x或无点方法funct = stemming.removeStopWords.stringToList.removeRepChar.charOk funct(x)我担心我有数百个括号和函数的情况,比如那些可能会变成无聊的更大代码的情况:function1(function2(function3( ... (function300(x)) ... )))我知道 Python 不是一种纯函数式语言,但没人知道
查看完整描述

2 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

就个人而言,我只是使用带括号的“本机”Python 方式,其中一个Chain类用于__getattr__提供范围内定义的任何函数globals

class Chain:

    def __init__(self, val):

        self.val = val

    def __getattr__(self, f):

        return lambda: Chain(globals()[f](self.val))


def upper(s):

    return s.upper()


def pad(s):

    return "abc" + s + "xyz"

    

def swap(s):

    return s.swapcase()


print(Chain("foo").upper().pad().swap().val)

# ABCfooXYZ

或者使用partialandreduce来创建一个compose函数(虽然我觉得这样的东西应该已经存在了):


from functools import reduce, partial


def compose(*fs):

    return partial(reduce, lambda x, f: f(x), fs)


print(compose(upper, pad, swap)("foo"))


查看完整回答
反对 回复 2023-05-23
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

您可以尝试以下几个选项。一种是编写您自己的带有函数和参数的“应用”。


def apply_functions(functions, arg):

    for fctn in functions:

        arg = fctn(arg)

    return arg


result = apply_functions((charOk, removeRepChar, stringToList,

    removeStopWords), x)

另一种方法是将您的函数放入一个类中并使用方法链接。您已经有返回值的函数,只需 returnself即可。


class Foo:


    def __init__(self, df):

        self.df = df


    def charOk(self):

        # do the operation

        return self


    def removeRepChar(self):

        # do the operation

        return self


    etc...


result = Foo(x).charOk().removeRepChar().stringToList().removeStopWords()


查看完整回答
反对 回复 2023-05-23
  • 2 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信