鍍金池/ 問答/Python/ Python 如何動(dòng)態(tài)調(diào)用py文件

Python 如何動(dòng)態(tài)調(diào)用py文件

目的

能夠動(dòng)態(tài)地調(diào)用不同py文件,傳入?yún)?shù)并獲得返回參數(shù)。下面是想象中的實(shí)現(xiàn)方法。

a.py :

path_file = 'b.py'    # 動(dòng)態(tài)指定py文件位置
para_in = 123
para_out = xxx(path_file,para_in)    # 該函數(shù)是path_file(這里是b.py)文件里的函數(shù),傳入?yún)?shù),返回參數(shù)賦給para_out

b.py :

def xxx(para):
    執(zhí)行方法(例: para += 1)
    return para

已知方法

已經(jīng)搜尋過能夠?qū)崿F(xiàn)類似的方法有幾個(gè),但都不夠理想:

  • import

    下面是用 import 實(shí)現(xiàn)「目的」描述的方法,但不能實(shí)現(xiàn)動(dòng)態(tài)地加載py文件,且 Python PEP8 規(guī)范不建議 import 放在執(zhí)行內(nèi)容中:
    a.py :

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

    b.py :

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

    下面是用 exec() 實(shí)現(xiàn)「目的」描述的方法,但似乎不太“干凈”,Pycharm 會(huì)警告在調(diào)用py文件的方法前,事先聲明和py文件中同樣函數(shù)名的函數(shù)(執(zhí)行方法可以隨意寫,因?yàn)闀?huì)被py中同名函數(shù)覆蓋):
    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):
      執(zhí)行方法(例: para += 1)
      return para

問題

上面的方法雖然能實(shí)現(xiàn)「目的」,但似乎不夠理想。所以問題是,是否有更好的辦法實(shí)現(xiàn)「目的」?

回答
編輯回答
逗婦乳

謝邀,不知是否是這樣

a.py

import importlib
b = importlib.import_module('b')
para_in = 123
para_out = b.xxx(para_in)
2018年4月22日 19:45
編輯回答
愛是癌

謝邀,這個(gè)動(dòng)態(tài)引入是希望能夠?qū)崿F(xiàn)傳入一個(gè)字符串如 "os" ,能夠幫你實(shí)現(xiàn) import os 的形式吧,那么,__import__ 能夠完成你想要的:

圖片描述

2018年7月16日 07:48