亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法讓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 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號