首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何缩短类似的Python导入语句?

如何缩短类似的Python导入语句?
EN

Stack Overflow用户
提问于 2021-11-27 05:50:47
回答 1查看 52关注 0票数 1

我在Python中有一个大型定制项目包 for Digital-Assistant程序。

为了在相同库的其他子包中使用几个文件,我必须在import语句中导入许多具有相同子路径的文件,这使得它看起来是多余的。

例如:

代码语言:javascript
运行
复制
from mylibs.master_lib.digital_assistant.web_bots.google_bot import searchGoogle
from mylibs.AI.CV import *
from mylibs.master_lib.digital_assistant.web_bots.social_media_connect import wa_pag
from mylibs.master_lib.digital_assistant.languages import access_dictionary
from mylibs.master_lib.digital_assistant.digital_assistant import speech_to_text
from mylibs.master_lib.digital_assistant.user_interface import *
from mylibs.master_lib.digital_assistant.web_bots.social_media_connect import *
from mylibs.master_lib.data_science.data_analytics import *
from mylibs.master_lib.digital_assistant.webAppsOC import *
from mylibs.master_lib.digital_assistant.device_controller import *
from mylibs.master_lib.digital_assistant.computer_graphics import *
from mylibs.master_lib.digital_assistant.desktopAppsFiles import *
from mylibs.AI.NLP import *

在上面的片段中,'mylibs.master_lib.digital_assistant‘语句对于许多导入来说是常见的。(similar to huge libraries like Django, Tensorflow, etc)

--我想给libs取短名字不是一种选择,因为它的所有沉重的包都喜欢详细的名称。

有没有办法给那些大的相同的导入子路径取一个可选的小名呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-26 09:17:02

这些情况发生在大型项目中,如Semi-DetachedEmbedded类型的项目,根据COCOMO Model

方法1

利用exec函数、f-stringsfor loop实现这一功能。

这种方法在大量进口的情况下是有用的,它不想保持可读性。

代码语言:javascript
运行
复制
for module in ["web_bots.google_bot import searchgoogle", "web_bots.social_media_connect import wa_pag", "languages import access_dictionary", "digital_assistant import speech_to_text","user_interface import *", "web_bots.social_media_connect import *", "webappsopenclose import *"]:
    exec(f"from mylibs.master_lib.digital_assistant.{module}")

for module in [".data_science.data_analytics import *", ".device_controller import *", ".artificial_intelligence.cv.computer_graphics import *"]:
    exec(f"from mylibs.master_lib.{module}")

方法2

如果您想维护程序的可读性,请使用

函数和f-strings来改变大型导入的长度。

代码语言:javascript
运行
复制
MM, DA = "from mylibs.master_lib", "digital_assistant"
exec(f"{MM}.{DA}.web_bots.google_bot import searchgoogle")
exec(f"{MM}.{DA}.web_bots.social_media_connect import wa_pag")
exec(f"{MM}.{DA}.languages import access_dictionary")
exec(f"{MM}.{DA}.digital_assistant import speech_to_text")
exec(f"{MM}.{DA}.user_interface import *")
exec(f"{MM}.{DA}.web_bots.social_media_connect import *")
exec(f"{MM}.{DA}.webappsopenclose import *")
exec(f"{MM}.data_science.data_analytics import *")
exec(f"{MM}.device_controller import *")
exec(f"{MM}.artificial_intelligence.cv.computer_graphics import *")

方法3

您也可以使用importlib

代码语言:javascript
运行
复制
import importlib
importlib.import_module(".Add_Ons", "MyLibs.GrandCollection.DS.Strings")

但该方法在引入模块而不是直接导入函数或常量时是可行的。

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

https://stackoverflow.com/questions/70132378

复制
相关文章

相似问题

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