【问题标题】:Simplify main1.py or main2.py call middle.py that calls sub1.py or sub2.py简化 main1.py 或 main2.py 调用 middle.py 调用 sub1.py 或 sub2.py
【发布时间】:2020-05-17 03:46:35
【问题描述】:

我有两个脚本 main1 和 main2 需要分开。他们都调用中间脚本(例如连接到数据库和查询)。查询本身来自 main1 的 sub1.py 和 main2 的 sub2.py。

目前,我用参数表示原点调用中间。这可以简化吗?

#main1.py
import middle

middle.myfunction(arg_i, 'main1')


#main2.py
import middle

middle.myfunction(arg_i, 'main2')


#middle.py
import sub1, sub2

def myfunction(arg1, arg2):
    if arg2 == 'main1':
        ...
        sub1.anotherfunction

    elif arg2 == 'main2':
        ...
        sub2.yetanotherfunction

一个可能的解决方案是在 middle.py 中复制 myfunction,即创建 myfunction_main1 和 myfunction_main2。但这似乎并不优雅。

奖励:middle.py 中有额外的函数,这些函数只与 main1 相关,与 main2 无关。由于我通过循环调用 main1 中的所有函数,因此我还需要在它们中建立 arg2,否则我会在缺少参数时出错。

funs = [middle.fun1, middle.fun2, middle.myfunction]
for i in range(3):
    funs[i](arg_i, 'main1')

【问题讨论】:

  • 你能不能只将myfunction 传递为arg2 而不是一个字符串?
  • 这个问题可以帮到你:stackoverflow.com/questions/3955790/…
  • 版本控制背后有什么逻辑吗?只有文件名? myfunction 是某种发射器吗?那么它似乎没问题 - arg2 有点像启动器的配置。这就是函数的工作方式。给arg2 一些默认值,例如arg2='main1'

标签: python function parameter-passing


【解决方案1】:

您可以将__file__ 传递为arg2

__file__ 为您提供了您可以在myfunction 中跟踪的python 文件名,该文件名在middle.py 中定义。

main1.py
import middle

middle.myfunction(arg_i, __file__)


#main2.py
import middle

middle.myfunction(arg_i, __file__)


#middle.py
import sub1, sub2

def myfunction(arg1, arg2):
    if ('main1.py' in arg2):
        ...
        sub1.anotherfunction

    elif ('main2.py' in arg2):
        ...
        sub2.yetanotherfunction

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 2020-05-20
    • 2021-06-07
    • 1970-01-01
    • 2011-01-22
    相关资源
    最近更新 更多