关于导包问题美洲杯在哪买球

1.导包其实就是在导包里的__init__文件
以执行文件的sys.path为准(内部的导入是以顶级目录作为开头的,往后一层层找)

包是一种通过使用‘.模块名’来组织python模块名称空间的方式。

  1. 什么是包
    包就是一个包含有__init__.py文件的文件夹
    包本质就是一种模块,即包是用包导入使用的,包内部包含的文件也都是用来被导入使用

1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法

2 为何要用包
包是文件夹,那文件夹就是用来组织文件的
# 注意:
# 在python2中,包下必须有一个__init__.py文件,而python3中即便是没有也不会报错

2. 包是目录级的(文件夹级),文件夹是用来组成py文件(包的本质就是一个包含__init__.py文件的目录)

# 首次导入包,发送三件事,
# 1. 以包下的__init_.py文件为基准来产生一个名称空间
# 2. 执行包下的__init_.py文件的代码,将执行过程中产生的名字都丢到名称空间中
# 3. 在当前执行文件中拿到一个名字p1,该p1就是指向__init__.py名称空间的

3. import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

# 总结包的使用无非注意三点:
# 1. 但凡是在导入语句中带点的,点的左边都必须是一个包
# 2. 导入包就是在导包下的__init__.py文件
# 3. 如果使用绝对导入,绝对导入的起始位置都是以包的顶级目录为起始点
# 4. 但是包内部模块的导入通常应该使用相对导入,用.代表当前所在的文件(而非执行文件),..代表上一级
# 强调:
# 1. 相对导入只能包内部的模块之间互相导入使用
# 2. ..上一级不能超出顶级包
import sys
sys.path.append(r'D:脱产三期视频day181 包的使用dir1dir2')

强调:

run.py为执行文件,m1,m2为p1里的文件。m3为p2里的文件

  1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错

美洲杯在哪买球 1

  2. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包即模块

 

包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间

在pgk里的__init__文件使用直接和间接方法导入m1_fn和m2_fn方法

1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。

 

2.对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。

美洲杯在哪买球 2

3.对比import item 和from item import name的应用场景:
如果我们想直接使用name那必须使用后者。

在同层目录下,使用绝对导入和相对导入m1_fn方法

 

美洲杯在哪买球 3

需要注意的是from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误,如:from a import b.c是错误语法

 

不管是哪种方式,只要是第一次导入包或者是包的任何其他部分,都会依次执行包下的__init__.py文件(我们可以在每个包的文件内都打印一行内容来验证一下),这个文件可以为空,但是也可以存放一些初始化包的代码。

本文由美洲杯在哪买球发布于计算机教程,转载请注明出处:关于导包问题美洲杯在哪买球

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。