首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从一个python文件中导入一个函数,并将该函数用作元流中的步骤函数。

从一个python文件中导入一个函数,并将该函数用作元流中的步骤函数。
EN

Stack Overflow用户
提问于 2022-08-19 16:05:49
回答 2查看 57关注 0票数 0

我在一个python文件sayHello中定义了一个函数utils.py。我还有一个python文件flow.py,它运行一个简单的元流。我希望从sayHello中导入utils.py,并在flow.py中使用sayHello作为step函数。有可能这样做吗?这可能很难,因为我们需要类中的self。如果可能的话,一个问题是我们如何将输出从上一步传递到函数并将输出传递到下一步。以下是我的尝试。

代码语言:javascript
运行
复制
#utils.py
def sayHello():
    print("hello world")

代码语言:javascript
运行
复制
#flow.py
from metaflow import FlowSpec, step, Parameter
from metaflow import Metaflow
from utils import sayHello

def function(p):
    return p

class BranchFlow(FlowSpec):
    @step
    def start(self):
        self.next(self.a, self.b, self.sayHello)

    @step
    def a(self):
        self.x = 1
        self.next(self.join)

    @step
    def b(self):
        self.x = 2
        self.next(self.join)


    @step
    def join(self, inputs):
        print('a is %s' % inputs.a.x)
        print('b is %s' % inputs.b.x)
        print('total is %d' % sum(input.x for input in inputs))
        self.next(self.end)

    @step
    def end(self):
        pass

if __name__ == '__main__':
     BranchFlow()    
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-19 16:17:15

根据the documentation for FlowSpec.next(),传递给self.next()的方法必须是当前类的成员,并使用@step进行修饰。

使用来自另一个模块的另一个函数的最简单方法可能是将其封装在一个成员函数中:

代码语言:javascript
运行
复制
class BranchFlow(FlowSpec):
    # ...

    @step
    def sayHello(self):
        sayHello()

现在你可以做self.next(self.sayHello)了。

票数 2
EN

Stack Overflow用户

发布于 2022-08-19 16:16:49

如果需要sayHello方法引用self,则向sayHello方法中添加一个参数(如果是utils.py )。我相信您导入的方法是正确的,所以看起来不错。只要稍微改变一下:

代码语言:javascript
运行
复制
#utils.py
def sayHello(self, ...other_args_if_needed):
    # Assuming `self` has a `getName` getter method.
    print(f"hello world, I am {self.getName()}")

现在您可以导入sayHello方法,并且它可以在类对象中使用。请记住,您需要已经定义了getter和setter方法。当类初始化时,self可能只是一个空字典,所以如果getName没有在self上定义,sayHello就会抛出一个异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73419473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档