相关疑难解决方法(0)

Python:类似jQuery的函数链接?

我在谷歌上找不到关于这个主题的任何内容,所以我想我应该在这里问一下:

有可能用Python链接函数,就像jQuery一样吗?

['my', 'list'].foo1(arg1, arg2).foo2(arg1, arg2).foo3(arg1, arg2) #etc...
Run Code Online (Sandbox Code Playgroud)

当我编写这段代码时,我失去了很多空间和可读性:

foo3(foo2(foo1(['my', 'list'], arg1, arg2), arg1, arg2), arg1, arg2) #etc...
Run Code Online (Sandbox Code Playgroud)

似乎存在一些用于创建此类功能的虚幻库,但我似乎无法理解为什么这必须如此复杂......

谢谢!

python function chaining

8
推荐指数
2
解决办法
7345
查看次数

用asyncio协程链接的方法

我想实现方法链接,但不是通常的函数 - 对于asyncio协同程序.

import asyncio


class Browser:
    @asyncio.coroutine
    def go(self):
        # some actions
        return self

    @asyncio.coroutine
    def click(self):
        # some actions
        return self
Run Code Online (Sandbox Code Playgroud)

调用链的"直观"方式不起作用,因为单个方法返回coroutine(生成器),而不是self:

@asyncio.coroutine
def main():
    br = yield from Browser().go().click()  # this will fail

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Run Code Online (Sandbox Code Playgroud)

正确的呼叫链方式是:

br = yield from (yield from Browser().go()).click()
Run Code Online (Sandbox Code Playgroud)

但它看起来很难看,并且在链条增长时变得难以理解.

有没有办法做得更好?欢迎任何想法.

python python-3.x python-asyncio

6
推荐指数
1
解决办法
2330
查看次数

Python 类方法链接

我确实有一堂课:

class BaseModel:

    def __init__(self):
        pass

    def read_data(self):
        df = ...
        return df

    def transform_input(self, df):
        df = ...
        return df

    def execute(self, df):
        df = ...
        return df

    def run(self):
        data = self.read_data()
        data = self.transform_input(data)
        data = self.execute(data)
Run Code Online (Sandbox Code Playgroud)

如何避免这些方法相继调用?是否可以这样做:

data = self.read_data().transform_input().execute()
Run Code Online (Sandbox Code Playgroud)

是否可以以某种方式链接这些方法并解决在此方法链中传递参数(数据)的问题?

python oop chaining

5
推荐指数
1
解决办法
3866
查看次数

标签 统计

python ×3

chaining ×2

function ×1

oop ×1

python-3.x ×1

python-asyncio ×1