一、模块(module)
以.py 文件开头的都叫做模块,模块中有定义的变量、函数、类。模块的名称为.py文件的名称,作为全局变量__name__的值。如果是模块A自己py A.py则__name__=‘main’,如果是被其他模块import之后使用的话,那么__name__=‘A’.
使用的时候import导入就行了,有以下几种方式:
①import
这种情况导入之后,使用内部的函数或者变量,需要前面加上模块名.函数或者变量

import pickle
import json

或者一行解决:

import pickle,json

推荐第一种,可读性好一些;
②from import
使用这种方式的话,直接使用就行了。

from datetime import  *

还有一种方式:

from datetime import date,time,datetime,timedelta

建议使用下面一种.
③还有一种给导入的包起别名;

from datetime import date as s_date
print(s_date.today())

给date起了一个别名叫做:s_date
注意:使用import 模块之后,模块中的函数 类 以及变量的使用,需要前面加上模块名.,如果使用from 模块 import 函数 类 以及变量 ,则直接使用就行了,但是有一个弊端,就是当前模块中有相同名称的,会覆盖导入的名称.
对于from 模块名 import *这种方法是导入模块中的所有内容,如果模块中的内容很大,这样做对于代码执行的时候有影响,建议使用到什么导入什么,或者还有一种方法,在被导入的模块中加入如下一行代码:

from datetime import date as s_date
__all__ = ['x','test']  #加这一行之后,调用该模块的模块即使使用import *也不能使用类A的功能了.
print(s_date.today())
x = 1
def test():
    return 0.0
print(test())
class A(object):
    pass

导入模块的本质:
就是搜索模块对应的.py文件所在的路径下是否包含它,有的话就导入,没有的话就报错.
比如import A :就是找A.py文件,怎么找,去路径下找,去哪个路径下,sys.path路径下找,找不到就报错,可以通过如下代码查看sys.path路径,返回的是一个路径结果:

import sys
p = sys.path

运行结果:

['C:\\Users\\10270\\Desktop\\py_test', 'C:\\Users\\10270\\Desktop\\py_test', 'C:\\Users\\10270\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'C:\\Users\\10270\\AppData\\Local\\Programs\\Python\\Python37\\DLLs', 'C:\\Users\\10270\\AppData\\Local\\Programs\\Python\\Python37\\lib', 'C:\\Users\\10270\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\10270\\Desktop\\py_test\\venv', 'C:\\Users\\10270\\Desktop\\py_test\\venv\\lib\\site-packages'] 

如果需要导入的模块路径不在这个列表中,则可以手动的添加:

sys.path.append("D:\test")

上面是已知模块的路径,如果在不知道模块路径的情况下,但是知道模块和当前执行模块的路径的上下级关系,可以通过如下代码将被导入的模块的路径添加到sys.path中:
假如a.py想导入b.py模块,它们之间的关系是,a.py的上一级目录f1和b.py在同一级目录下,f1和b.py在f目录下:

import sys
#__file__这个变量的值是当前模块的文件名
print(__file__)
path1 = os.path.abspath(__file__) #获取模块的绝对路径
path2 = os.path.dirname(path1)#获取绝对路径的上一级目录
path3 = os.path.dirname(path2)#获取path的上一级目录
sys.path.append(path3)
print(sys.path)

运行结果:

__file__:C:/Users/10270/Desktop/py_test/test_10_10.py
path1:C:\Users\10270\Desktop\py_test\test_10_10.py
path2:C:\Users\10270\Desktop\py_test
path3:C:\Users\10270\Desktop
['C:\\Users\\10270\\Desktop\\py_test', 'C:\\Users\\10270\\Desktop\\py_test', 'C:\\Users\\10270\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'C:\\Users\\10270\\AppData\\Local\\Programs\\Python\\Python37\\DLLs', 'C:\\Users\\10270\\AppData\\Local\\Programs\\Python\\Python37\\lib', 'C:\\Users\\10270\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\10270\\Desktop\\py_test\\venv', 'C:\\Users\\10270\\Desktop\\py_test\\venv\\lib\\site-packages', 'C:\\Users\\10270\\Desktop'] #这个是新增加的

上面这样的操作其实会有个问题,就是如果列表中的某个路径下有相同名称的模块,那么找到了之后,就不会去我们添加的路径下去找,这样调用的话就会报错,可以通过指定添加的位置,将路径添加到sys.path中.

二、包(package)
为了方便管理,比如开发人员A和开发人员B分别开发不同功能的模块,如果起名相同的话,在项目中导入的话,名称相同无法判断是导入哪个模块,所以将多个模块打包到一个文件中,这个文件就叫做包,引用的话,直接在模块前加个包名,只要包不同,里面的模块名是可以重复的,包目录下有一个叫__init__.py文件.导入包的时候,该文件会被执行,文件中的内容其实就是import 模块。包里面有模块,还可以有其他的子包,子包中的结构和包一样。
在这里插入图片描述
下面给出了一个没有子包的包,可以看到有__init__.py文件和两个模块,其中__init__.py文件中一般放置的为如下的内容
在这里插入图片描述

#! /usr/bin/env python
# encoding:utf-8
from package_a import module_a1 
from package_a import module_a2

如果A和B两个文件夹中分别有a.py和b.py,在a.py文件中想要import b模块,它们的父级目录相同,比如:D:/test/A 和D:/test/B,在a.py文件中直接执行:

print(sys.path)

如果结果中没有这个路径:

'D:\\test'

那么需要手动添加:

sys.path.append("D:\\test")

再次打印sys.path就会增加这个路径,再from B import b时就不会报错了;
导入包的时候,建议直接:

from 模块名 import 函数或者类
#不推荐
import 模块
#因为这种方法会每次模块中的函数,比如A.test(),都先去sys.path中找A.py的路径,然后再去导入,调用test()函数.
最上面那个,只需要一次导入,后面直接用test()

三、库(library)
Python中的库是借用其他编程语言的概念,没有特别具体的定义,Python库主要强调其功能性。在Python中,具有某些功能的模块和包都可以被称作库。模块由诸多函数组成,包由诸多模块结构化组成,库中也可以包含包、模块和函数。
库是具有相关功能模块的集合。
包括:标准库,第三方库,自定义库
标准库一般在安装了Python之后就自带了,比如sys
第三方库:是第三方机构开发的提供特定功能的模块,用户如果想使用的话,需要先在网上下载,然后在本地安装,安装之后就可以使用了。
自定义库:用户可以根据需求自己开发一些库。

四、框架(framework)
框架是Python库的集合。框架跟库类似,从功能上来说的,框架往往集成了多种库的功能,框架是用来辅助开发某个领域功能的一个包,一般包内还会含有多个子包。框架会方便开发,将某类项目中必须实现的代码直接实现,你只需要去关注你与别项目不同的部分。如爬虫框架scrapy、web开发框架Django和flask、大数据框架pyspark等。

贴上别人关于这个知识点写的比较好的文章,供自己和大家参考:
https://blog.csdn.net/weixin_41010198/article/details/117286655?spm=1001.2014.3001.5501

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐