Python 如何动态调用py文件

目的

能够动态地调用不同py文件,传入参数并获得返回参数。下面是想象中的实现方法。

a.py :

path_file = 'b.py'    # 动态指定py文件位置
para_in = 123
para_out = xxx(path_file,para_in)    # 该函数是path_file(这里是b.py)文件里的函数,传入参数,返回参数赋给para_out

b.py :

def xxx(para):
    执行方法(例: para += 1)
    return para

已知方法

已经搜寻过能够实现类似的方法有几个,但都不够理想:

  • import

    下面是用 import 实现「目的」描述的方法,但不能实现动态地加载py文件,且 Python PEP8 规范不建议 import 放在执行内容中:
    a.py :

    import b
    para_in = 123
    para_out = b.xxx(para_in)

    b.py :

      def xxx(para):
      执行方法(例: para += 1)
      return para
  • exec()

    下面是用 exec() 实现「目的」描述的方法,但似乎不太“干净”,Pycharm 会警告在调用py文件的方法前,事先声明和py文件中同样函数名的函数(执行方法可以随意写,因为会被py中同名函数覆盖):
    a.py :

    def xxx(para):
      return
    path_file = 'b.py'
    para_in = 123
    
    with open(path_file, 'r') as file:
      exec(file.read())
      para_out = xxx(para_in)

    b.py :

    def xxx(para):
      执行方法(例: para += 1)
      return para

问题

上面的方法虽然能实现「目的」,但似乎不够理想。所以问题是,是否有更好的办法实现「目的」?

阅读 12.5k
2 个回答

谢邀,这个动态引入是希望能够实现传入一个字符串如 "os" ,能够帮你实现 import os 的形式吧,那么,__import__ 能够完成你想要的:

图片描述

谢邀,不知是否是这样

a.py

import importlib
b = importlib.import_module('b')
para_in = 123
para_out = b.xxx(para_in)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题