|-direct

       |-plane

              |-__init__.py

              |-modules.py

              |-tools.py

       |-tank

       main.py

       utils.py

 

main.py:

# 在自身文件夹下import 引入其他模块

import utils

 

# 引入其他包中的某个模块

import plane.tools

 

# 直接import的方式可以引入包,可以引入模块,最低级就是引入模块级别的文件,不能使用import方式直接导入模块中的变量,函数,类型,因为import方式它会把最后一个当成模块级别的文件来判断,结果就找不到这个对应的模块了,下面这种方式就是错误的方式

 

使用import方式引入相应的模块之后,可以使用如下的方式操作引入的模块中的数据:

模块.变量

模块.函数

模块.类型

 

|-direct

       |-main.py

       |-utils.py

 

main.py:

# 直接引入的方式,

import utils

使用Import的方式寻找引入模块的路径是(所有绝对引入的查询路径):

, 这样后半部分会报错,要把包名称写在前面,如:

from .plane import utils

print(utils.msg)

 

  1. 相对引入引入包中的模块中的具体代码方法/函数/类型

from .plane.utils import func

func()

 

——————————————————————————————————————————————————————

绝对引入:

main.py:

  1. 最直接的绝对引入整个包(但是同样引入整个包和相对引入整个包一样需要在该包的__init__.py中定义要使用包中的哪些数据,后边才能正常使用引入的包,否则会报错找不到包下的那个模块2018年10月5日python相对引入和绝对引入详解-LMLPHP)。

2018年10月5日python相对引入和绝对引入详解-LMLPHP

import plane

print(plane.utils.msg)

 

绝对方式引入包中的模块或者具体数据就不需要在该包的__init__.py声明文件定义任何东西就可以使用包中的数据

  1. 绝对引入的方式引入包中的模块

from plane import utils

 

3. 绝对引入的方式引入包中的模块的具体数据

 from plane.utils import msg

print(utils.msg)

print(msg)

——————————————————————————————————————————————————

 

无论是相对引入和绝对引入,使用from a import b的最后的位置都是只有一个模块名或者具体数据名,如果有多个前缀都要放到前边的from中。

 

可以给引入的名称比较长的模块路径起一个别名,例如:

import plane.utils as pu

 

 

还有一种引入的方式,模糊引入:

from 包名称 import *

这是一个语法糖,慎重使用

如果项目中需要引入的包文件不多的话, 可以参考使用

如果项目中需要引入的包文件非常庞大,不要使用模糊引入,会严重消耗系统资源

同时使用模糊引入的话需要在引入的包中的声明文件__init__中定义*所包括本包下的哪些模块。这时有一个模块定义属性: __all__, 值是一个列表,表示通过模糊引入方式直接导入all中定义的所有模块,是写在包的__init__声明文件中的,例如:

__all__ = [“utils”, “modules”, “tools”], 意思就是通过模糊引入的方式,直接可以引入包中的哪些模块,直接定义在__all__中就可以了

 

 

集成开发环境IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序也就是程序开发工具。

IDLE 是一个纯 Python 下自带的简洁的集成开发环境(IDE) [1] 。

——————————————————————————————————————————————————————

                                            小总结

 

 

1. 模块和包

    模块:python中每个python文件都是一个独立的模块

        较少的、独立的、功能近似的 多个变量、函数、类型的集合!

    包:包含多个python模块的文件夹,包含一个特殊的__init__.py声明文件

        包含多个模块,具备强大功能的程序!

 

    包 & 文件夹 区别

        包:包含了一个__init__.py声明文件[空文件、编写代码]

        文件夹:普通文件夹

 

        区别1:包可以更加有效的管理python模块,文件夹只能作为默认包进行基本管理[包含文件]!

        区别2:包和文件夹中引入对应的模块代码的操作方式区别!

 

2. import & from import

    包和模块的引入

    (1) import

        #引入一个模块

        import 模块名称

        #使用模块中的数据

        模块名称.变量名称

        模块名称.函数名称

        模块名称.类型名称

 

        # 引入一个包

        import 包名称

        # 使用包中的数据

        包名称.模块名称.变量名称/函数名称/类型名称

 

        # 引入包中的某个模块

        import 包名称.模块名称

        # 使用包中的数据

        包名称.模块名称.变量名称/函数名称/类型名称

 

        # ERROR:引入包中的某个变量

        import 包名称.模块名称.变量名称

 

    (2) from import语法

       # (相对)引入包

       from . import 包名称  [必须在__init__.py中,主动通过from . import引入需要的模块]

       # 使用数据

       包名称.模块名称.变量名称/函数名称/类型名称

 

       # (相对)引入包中的模块

       from .包名称 import 模块名称

       # 使用数据

       模块名称.变量名称/函数名称/类型名称

 

       # (相对) 引入包中的模块中的数据

       from .包名称.模块名称 import  变量/函数/类型

       # 使用数据:当成当前文件中的数据进行数据

       变量名称/函数名称/类型名称

 

3. 相对引入 & 绝对引入

 

    相对引入:相对当前文件路径,参照父级文件路径

    |-- demo/

        |-- utils.py

        |-- main.py  [from . import utils]

 

    运行:添加参照路径:python -m demo.main

            运行过程中,在main.py中找到相对路径的utils.py

 

    绝对引入:针对包/项目/模块,直接引入的方式

    |-- demo/

        |-- users/

            |-- __init__.py

            |-- tools.py

        |-- utils.py

        |- main.py

                [import utils]

                [from users import tools]

                [绝对引入:查询路径]

                    [当前文件夹|PYTHONPATH|sys.path]

10-05 20:20