python - PyDoIt:跨模块共享任务定义
问题描述
这是我面临的问题的一个更简单的版本。我在dodo.py
文件中有一个任务。此任务可以访问模块级变量name
。
# dodo.py
name = 'John'
def task_hello():
return {
'actions': [f'echo Hello {name}!']
}
现在我想要这个任务的不同版本。这样做的一种天真的方法如下。
# dodo1.py
name = 'Tim'
def task_hello():
return {
'actions': [f'echo Hello {name}!']
}
和
# dodo2.py
name = 'Julia'
def task_hello():
return {
'actions': [f'echo Hello {name}!']
}
我确实想要多个dodo
模块。但是,我不想复制任务定义。
请注意,尽管为了简单起见,我在这里只提到了一个任务,但我有一组相互依赖的任务和子任务。另外,我不想使用命令行参数,更喜欢拥有多个config
文件。
解决方案
最后我最终做到了这一点。这解决了问题。但我对更优雅的解决方案持开放态度。
dodo1.py
def mk_task_hello(name):
yield {
'basename': 'hello',
'name': 'world',
'actions': [f'echo Hello {name}!']
}
dodo2.py
from dodo1 import mk_task_hello
name = 'Tim'
def task_hello():
yield from mk_task_hello(name)
dodo3.py
from dodo1 import mk_task_hello
name = 'Julia'
def task_hello():
yield from mk_task_hello(name)
dodo1.py
是主要任务实现模块,而dodo2.py
和dodo3.py
是不同的实例。注意basename
任务字典中的字段。这是任务依赖项(上面的示例中未显示)正常工作所必需的。
推荐阅读
- typescript - 在 TypeScript 中,有没有办法创建一个泛型 mixin 函数,它还允许在返回的类上使用泛型类型参数?
- java - 基于对象类覆盖java中的打印语句
- javascript - 将一维二进制数组拆分为仅由连续一维组成的二维数组
- python - 使用蒙特卡罗方法评估多变量的多重积分
- flutter - 在这种情况下,在颤振中构建 .apk 文件有什么问题?
- matplotlib - 重置(或赋值)到 matplotlib 中的 RadioButton
- c# - 根据列表内容显示/隐藏 DataGrid 列
- java - 为特定 DBMS(数据库引擎)动态设置 DataSource 的正确方法是什么?
- html - 如何匹配 HTML 输入并使用 CSS 选择样式
- r - 将 data.frame 的列转换为命名向量