Python 官方文档:入门教程 => 点击学习
目录Part.I 预备知识Chap.I 几个概念的区分Chap.II 模块中的 all 变量Part.II 导入模块的几种方法Chap.I 方法Chap.II 实例补充:python
__all__ 是针对模块公开接口的一种约定,以提供了“白名单”的形式暴露接口。如果定义了__all__,其他文件中使用from xxx import *导入该文件时,只会导入 __all__ 列出的成员,可以其他成员都被排除在外。
定义 all 需要注意的地方
__all__ = [
"foo",
"bar",
"egg",
]
Python 导入模块一般用到两种方法:
import model1
from model import xxx
当我们向文件导入某个模块时,导入的是该模块中那些名称不以下划线(单下划线_
或者双下划线__
)开头的变量、函数和类。因此,如果我们不想模块文件中的某个成员被引入到其它文件中使用,可以在其名称前添加下划线。
除此之外,还可以借助模块提供的 __all__
变量,该变量的值是一个列表,存储的是当前模块中一些成员(变量、函数或者类)的名称。通过在模块文件中设置 __all__
变量,当其它文件以from 模块名 import *
的形式导入该模块时,该文件中只能使用 __all__
列表中指定的成员。
也就是说,当使用
from 模块名 import *
方法导入模块的时候,不会导入下划线_
函数;另外,如果模块中有__all__
,则导入的函数还要受到__all__
的控制;当使用import 模块名
导入函数时,则不会受到上面两个的限制。
所以,以后在确定某些函数不想被访问到,就用下划线_
或者用__all__
,并使用from 模块名 import *
方法导入模块;当想要使用模块中的所有函数时,则使用import 模块名
来导入模块。
比如现在有个文件叫b.py
# ------------ b.py 内容 ----------------------
__all__ = [
'b_hello',
'_b_hello'
]
def b_hello():
print("B_HELLO")
def _b_hello():
print("B_private")
def b_world():
print("B_private_world")
现在使用from 模块名 import *
方法导入模块来调用函数:
from b import *
b_hello()
_b_hello()
b_world()
# ------------ return --------(当 b.py 中没有有变量 __all__ 时)
B_HELLO
Error:xxxxx
B_private_world
# ------------ return --------(当 b.py 中有变量 __all__ 时)
B_HELLO
B_private
Error:xxxxx
使用
__all__
变量,使得原本不能被访问到的_b_hello
可以被访问到;因为__all__
中没有包含b_world
,所以使得原本能被访问到的b_world
不能被访问到。
现在使用import 模块名
方法导入模块来调用函数:
import b
b.b_hello()
b._b_hello()
b.b_world()
# ------------ return --------
B_HELLO
B_private
B_private_world
所以,以后在确定某些函数不想被访问到,就用下划线_
或者用__all__
,并使用from 模块名 import *
方法导入模块;当想要使用模块中的所有函数时,则使用import 模块名
来导入模块。
ps:当包(含有
__init__.py
文件的文件夹)中含有子模块时,可以使用.
来导入。比如import lib.model1 as md
,就是调用包lib
中的模块model1
。
在实际的编程生活当中,我们除了会去import已经存在的包外,当然还会偶尔自定义一些模块,然后来导入,,,其实一般而言,自定义的模块也就是一系列的脚本,具体的,自己写好了脚本,然后导入,导入的情况分为以下情况:
1.自定义模块与所需要调用自定义模块的文件在同一文件夹下
这时的调用就较为简单了,直接导入即可
比如说我想要在learnpandas中导入m1.py,只需要在learnpandas脚本开头声明import m1.py即可
2.自定义模块与所需要调用自定义模块的文件不在同一文件夹下
其实这个的话,如果不怕麻烦的话可以用1中的方法,把需要导入的文件一个一个手动拖到当前文件夹中,,,当然这个方法时比较复杂的,尤其是要导入的文件较多的时候,,,,
这个时候有一个更聪明的方法
假设下图是我们需要导入的文件目录
在这种情况下,我们在folder中新建一个__init__.py文件,此时的folder不再是一个普通的文件夹,而是一个包 package
在这个时候,想导入哪一个文件的话就只需在文件开头import folder.filename即可(记得要先将自定义库路径添加到Python的库路径中)
3.找到本地库的路径,然后将文件拷进去即可
4.手动给python添加搜索路径,具体做法是:
在python安装目录的\Lib\site-packages文件夹中建立一个.pth文件,内容为自己写的库绝对路径
- - - - - - - - - - - - - - - - - -分割线- - - - - - - - - - - - - - - - - -
将自定义库的路径添加到Python的库路径中去,有如下两种方法:
1. 动态的添加库路径。在程序运行过程中修改sys.path的值,添加自己的库路径
import sys
sys.path.append(r'your_path')
2. 在Python安装目录下的\Lib\site-packages文件夹中建立一个.pth文件,内容为自己写的库路径。示例如下
E:\\work\\Python\\Http
E:\\work\\Python\\logging
- - - - - - - - - - - - - - - 分割线 - - - - - - - - - - - - - - - - - -
在这里说一句Python的包搜索路径:
Python会在以下路径中搜索它想要寻找的模块:
1. 程序所在的文件夹
2. 标准库的安装路径
3. 操作系统环境变量PYTHONPATH所包含的路径
到此这篇关于Python中导入模块的几种方式总结的文章就介绍到这了,更多相关Python导入模块内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Python中导入模块的几种方式总结
本文链接: https://lsjlt.com/news/174625.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0