python - Python模块化编程中导入模块的正确方法是什么?
问题描述
在 Python 中为模块化编程导入外部包的正确方法是什么?有任何有用的文档,例如PEP或Python 中的结构化吗?
详细介绍
我是 Python(或其他语言)包开发的新手,我想知道专业人士是如何做到的,即 Python 的方式是什么,要牢记效率、可读性和开发(例如,IDE/Sublime 会识别内部组件那个包)。
例如,假设有一个模块需要numpy.log
. 我应该import numpy as np
在模块内还是在模块内__init__.py
?我应该写from numpy import log
吗?我应该编写一个common_imports.py
模块以及我编写的from common_imports import *
所有模块吗?
解决方案
通常,您可以根据需要导入模块。您需要做的就是__all__
在模块级别设置变量。它由您希望向所有人公开的名称元组组成。例如,如果您有一个__init__.py
in packagesomepackage
#__init__.py
__all__=('func_a',)
def func_a(): pass
def func_b(): pass
def func_c(): pass
def func_d(): pass
然后当你这样做时from somepackage import *
,只会func_a
被导入。另外,如果你这样做from somepackage import func_b
了,那么 Python 会给你一个ImportError
推荐阅读
- apache-spark - spark可以忽略不可读的文件吗?
- ios - 在 ContactsUI ViewControllers 中忽略 CNContactBirthdayKey
- can-bus - 有没有办法在总线上接收之前修改 CANoe Rx 消息?
- json - 强制根 xml 元素成为 json 转换的数组
- sql - SQL - 按索引列检索行 - 性能
- mysql - 将 react-native 连接到 firebase 和 mysql
- python-3.x - 附件中的图片无效
- java - 无法通过java执行powershell命令?
- code-coverage - 如何在 VSTS\TFS 2017 Build Summary 上使用 Index.html 显示代码覆盖率结果?
- firebase-authentication - 未定义方法“signInWithCredential”