Python基础之模块的介绍以及使用

发布时间 2023-06-07 15:44:48作者: Way*yy

模块

什么是模块?
	模块:模块就是一系列功能的集合体。(模块里面装的就是提前开发好的功能)
    
为什么要用模块?   
	提高开发效率(因为模块中都是别人写好的功能我们可以直接拿来用的,节省了我们开发的时间)
    
模块的来源:
	1、内置模块(Python解释器自带的模块)
    2、第三方模块(别人写好的我们可以直接拿来用的)
    3、自定义模块(自己写的,也可以传到网上让别人使用)
    
模块存在的形式:
	1、自己写在.py文件里面的,就是一个模块
    2、包:
    	就是一系列模块的集合体就称之为包
        # 在python3中的包,一般里面会有一个__init__.py文件
"""
	从今天开始学习完模块的使用后,以后在编写一些复杂项目的复杂功能的时候,我们就可以先想想有没有可以用的模块,如果有就可以直接拿来使用,如果没有,只能自己写了
"""         

import句式

学习模块之前必须要搞明白谁是执行文件、谁是导入文件
import md # import + 模块名字(文件名字)注意一定不要加.py的文件名后缀,只写文件名即可
这时候这个md.py文件就是导入文件,import当前所在的文件就是执行文件

"""
首次导入文件,会执行导入文件的代码
导入文件不管你导入几次,都只执行一次
    导入文件的过程发生了什么事?
        1. 运行执行文件,产生执行文件的全局名称空间
        2. 运行md.py文件,会产生md文件的全局名称空间,把md文件里的名字都丢到md的全局名称空间去
        3. 在执行文件中有一个md的变量,指向导入文件的空间地址
        4. 以后我们在执行文件中就可以用md来点出导入文件中的名字
    导入文件之后,以后在用导入文件中的名字,只需要使用md点语法的形式点出来就可以
    不会与执行文件中的名字发生冲突,因为我们是指名道姓的取值
"""

执行文件:
		import exercise04

		print(exercise04.money)  # 10

导入文件:
		print('index')
        money = 99


        def index():
            global money
            money = 10


        index()

from...import...句式

语法:
	from + 模块名字 + import + 变量名字
    
执行文件:
	from exercise04 import inner, money

    # print(money)
    inner()  # inner index outer
    print(money)  # 99
    import exercise04

    print(exercise04.money)  # 10
导入文件:
	money = 99


    def index():
        print('index')
        global money
        money = 10
        outer()

    def inner():
        print('inner')
        index()
    def outer():
        print('outer')
        
from md import money,index,outer '''连续导入'''

"""
from...import...句式
    首次导入也会执行导入文件
    导入多次,也会执行一次
        发生了什么事?
            1. 运行执行文件,产生执行文件的全局名称空间
            2. 运行导入文件md.py, 产生md文件的全局名称空间,然后把md中所有的名字都丢到md的全局名称空间中去
            3. 在执行文件中有一个变量money指向导入文件中money的空间地址
            4. 我们要想使用导入文件的money,直接用money即可,不再使用md.money了,此时,只是把导入文件的money导入到了执行文件,其他都没有

    导入文件之后,就有可能发生执行文件中的名字和导入文件中的名字产生冲突,此时,会使用当前执行文件中的名字
"""

__all__ = []:用法
    	'__all__ '是配合*使用的,如果你只想执行导入文件中的某一个功能,就在'__all__ '后面的列表中添加你要执行的功能
    执行文件:
    	from exercise04 import * # * 代表执行exercise04里面的全部文件
    导入文件:
    	__all__ = ['index' ] # 只执行index文件
        money = 99


        def index():
            print('index')
            global money
            money = 10
            index()


        def inner():
            print('inner')
            inner()


        def outer():
            print('outer')
            outer()
这时候除了index功能以外其他的功能都没有办法执行

导入模块的扩展用法

1、起别名:
        import testttttttttttt as t
        print(t.name) = print(testttttttttttt.name)
2、连续导入:
		import md, time, os, sys
    
        import md
        import time
        import sys
        import os
        '这两种写法都是等价的'

判断文件类型

print(__name__, type(__name__))  # __main__  <class 'str'>

import main
"""
   __name__:
        如果在执行文件中打印,结果就是字符串类型的 __main__
        如果是在导入文件中打印,结果就是文件名或者叫模块名
"""

循环导入

"""如果在你的程序里面出现了循环导入的问题,说明你的程序设计的不合理!"""
# 我们遇到循环导入的问题必须处理掉,否则代码会报错,不能正常运行

如何解决循环导入的问题
	1. 把导入语句放到代码的最下面
    	# 虽然问题解决了,但是不推荐,我们一般把导入语句都放在文件的开头
    2. 函数式
    	

模块的查找循序

关键字:
	'sys path'
    
查找顺序:
	"""
	1. 先从内存中查找
	2. 再从内置模块中查找
	3. 从环境变量sys.path中查找(重要)
	4. 如果以上都找不到,则报错!
	"""
    sys.path列表中的第一个元素永远是:当前文件所在的路径
	sys.path列表中的第二个元素是:项目的路径,他是pycharm给你加的
    
添加自定义模块到环境变量中:
		1. 把路径添加到sys.path中去
    	sys.path.append(r'D:\python26\day19\aaa')
		import m3
		print(m3.name)
        2. from 模块1.模块2.模块3 import...句式
               # from aaa.bbb import m3
               from aaa.bbb.ddd import m3
               print(m3.name)