python 中 from import, __name__, __all__, __init__.py 作用,python的模块和导入包

from import

即类似于其他语言一样,是为了将别人写好的 .py 文件引入,并用于自己使用

例如我在一个.py 文件中写了很多用于计数学计算的方法,当别人想要调用我写好的这一套方法时 就需要先 from 我写的文件或其他人写好的文件(python也称为模块) import 指定的方法名。

当然也可以直接使用 import * 即导入全部

一、__name__意义

在每一个 .py 即python 文件中都有一个__name__ 的属性。

(双下划线)

一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。

python 复制代码
if __name__ == '__main__':
   print('自己在执行')
else:
   print('被引用')

在命令行直接执行时

bash 复制代码
PS D:\pythonProject> python 你的文件名.py
自己在执行
python 复制代码
PS D:\pythonProject> import 你的文件名
被引用

每个模块都有一个__name__属性,当其值是'main'时,表明该模块自身在运行,否则是被引入。

二、dir() 函数

直接用在导入的模块名上 以字符串列表的形式输出当前这个模块内定义的所有名称

三、__init__意义

在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。

目录必须包含一个叫做__init__.py的文件才会被认作是一个包,为了避免被

最简单的情况下放一个空的__init__.py就可以,这也是我们使用 pycharm 创建新的 package 时为什么会自动生成一个空的__init__.py的原因

四、__all__意义

由于python 在import * 时会访问文件系统获取 from 后路径下的所有文件但windows平台对于大小写不区分的问题导致不知道要导入同名但不知道大小写是哪个的问题,所以使用了__all__属性来来手动指定精确的模块名

导入语句遵循如下规则

如果包定义文件__init__.py 存在一个叫做__all__的列表变量,那么在使用
from package import *

的时候就把这个列表中的所有名字作为包内容导入。

如果你作为包的提供者,要保证在更新包之后 all 也更新!

无论是隐式的还是显式的相对导入都是从当前模块开始
主模块的名字 (入口)永远是__main__

一个Python应用程序的主模块,应当总是使用绝对路径引用。

相关推荐
岁忧1 小时前
GoLang五种字符串拼接方式详解
开发语言·爬虫·golang
tyatyatya1 小时前
MATLAB基础数据类型教程:数值型/字符型/逻辑型/结构体/元胞数组全解析
开发语言·matlab
程序员小远2 小时前
软件测试之单元测试详解
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
心无旁骛~2 小时前
python多进程和多线程问题
开发语言·python
星云数灵2 小时前
使用Anaconda管理Python环境:安装与验证Pandas、NumPy、Matplotlib
开发语言·python·数据分析·pandas·教程·环境配置·anaconda
kaikaile19952 小时前
基于遗传算法的车辆路径问题(VRP)解决方案MATLAB实现
开发语言·人工智能·matlab
计算机毕设匠心工作室3 小时前
【python大数据毕设实战】青少年抑郁症风险数据分析可视化系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习
后端·python
计算机毕设小月哥3 小时前
【Hadoop+Spark+python毕设】智能制造生产效能分析与可视化系统、计算机毕业设计、包括数据爬取、Spark、数据分析、数据可视化、Hadoop
后端·python·mysql
四问四不知3 小时前
Rust语言进阶(结构体)
开发语言·后端·rust
q***9943 小时前
index.php 和 php
开发语言·php