栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

小白学ppython系列————【Day29】模块简介与导入详细

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

小白学ppython系列————【Day29】模块简介与导入详细

今日内容概要
  • 迭代取值与索引取值的差异
  • 模块简介
  • 导入模块的两种句式
  • 两种导入句式的优缺点
  • 补充知识
  • 循环导入问题
  • 判断文件类型
  • 模块的查找顺序
迭代取值与索引取值的差异

1.索引取值:
优势:可以随意反复的获取任意数据值
劣势:针对无序的容器类型无法取值

2.迭代取值
优势:提供了一种通用的取值方式
劣势:取值一旦开始只能往前不能回退

模块简介

1.如何理解模块?
模块可以看成是一系列功能的结合体,使用模块就相当于拥有了这结合体内所有功能。
模块可以比作一盒积木,通过它可以拼出多种主题的玩具,这与前面介绍的函数不同,一个函数仅相当于一块积木,而一个模块(.py 文件)中可以包含多个函数,也就是很多积木。

2.为什么要用模块?
极大地提升开发效率,因为它是一些功能的集合体,所以在编程编写的过程中,一些别人已经写好的功能就可以用调用替代繁重的自我编写。

3.模块的分类:
(1)内置模块
解释器自带的,直接就可以使用的模块。

import time
time.sleep(3)

(2)自定义模块
自己编写的代码,封装成模块,自己用或者发布到网上供别人使用
eg:注册功能,登录功能
(3)第三方模块
别人写的模块,存在于网络上,使用之前需要提前下载。
eg:人脸识别;图形可视化;语音识别等

4.模块的表现形式
(1)py文件(py文件也可以称之为模块文件)
(2)含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)
(3)已被编译为共享库或DLL的c或C++扩展
(4)使用C编写并链接到python解释器的内置模块

导入模块的两种句式

1.导入模块的句式1之import句式
(1)基本语法
improt 模块名
调用:模块名.功能名
(2)操作流程
会产生执行文件的名称空间;
产生被导入文件的名称空间并运行该文件内所有的代码,存储名字;
在执行文件中会获取一个模块的名字,通过该名字点的方式就可以使用到被导入文件名称空间中的名字。
(3)流程演示说明
执行文件是 01 import用法.py
被导入文件是 module.py

  • 运行01 import用法.py文件时产生import用法.py的全局名称空间,import module执行后会创建一个被导入文件module.py的全局名称空间,并运行其所有函数体代码,存储名字name和inner函数。在执行文件01 import用法.py中会获取一个模块的名字,通过module点的方式就可以使用到被导入文件module.py名称空间中的名字。

(4)补充说明:
同一个程序反复导入相同的模块,导入语句只会执行一次。
import module ————有效
import module ————无效
import module ————无效

2.导入模块的句式2之from…import…句式
(1)基本语法
from 模块名 import 功能名
调用:直接功能名
(2)操作流程
创建执行文件的名称空间;
创建被导入文件的名称空间;
执行被导入文件中的代码 将产生的名字存储到被导入文件的名称空间中;
在执行文件中获取到指定的名字 指向被导入文件的名称空间
(3)流程演示说明
执行文件是 01 import用法.py
被导入文件是 module.py

  • 运行01 import用法.py文件时产生import用法.py的全局名称空间,import module执行后会创建一个被导入文件module.py的全局名称空间,并运行其所有函数体代码,存储名字name;money;outer1函数;outer2函数。在执行文件01 import用法.py中会获取一个指定的名字name指向被导入文件module.py的名称空间中的name。

(4)补充说明:
from…import…句式指定导入某个数据。
from…import…句式执行文件可以一次性获取多个名字。

from module import name,money,outer2
print(name)
print(money)
outer2()

from…import…句式的另一种特殊情况:

  • 01 import用法.py文件中name重新绑定了一个数据值jason,所以会先把和module.py文件中的绑定关系解除,所以最后没有调用模块中的name数据值。
两种导入句式的优缺点

1.import 句式——>import module
优点:通过module点的方式可以使用到模块内所有的名字 并且不会冲突
缺点:module什么都可以点 有时候并不想让所有的名字都能被使用

2.from…import…句式
优点:指名道姓的使用指定的名字 并且不需要加模块名前缀
缺点:名字及其容易产生冲突(绑定关系被修改)

补充知识

1.起别名
情况1:多个模块文件名相同(多个人写)

from module import money as md1
from module import money as md2
print(md1)
print(md2)

情况2:原有的模块文件名复杂

import womendoushihaopengyou as md

2.导入多个名字

import time, sys, os

上述导入方式建议多个模块功能相似才能适应 不相似尽量分开导入

import time
import os
import sys

下面的导入方式是推荐使用的 因为多个名字出自于一个模块文件

from md import money, read1, read2

3.全导入
需求:需要使用模块名称空间中很多名字 并且只能使用from...import句式

from md import *  # *表示所有

针对*号的导入还可以控制名字的数量

__all__ = [字符串的名字]
循环导入问题

1.如何理解循环导入?
循环导入就是两个文件彼此导彼此

2.循环导入容易出现报错现象
使用彼此的名字可能是在没有准备好的情况下就使用了
如图所示:

3.面对循环导入错误解决方法
方式1:将导入模块的句式写在定义名字的下面
方式2:将导入模块的句式写在函数体代码内
注意:在日常编写中要尽量避免循环导入错误出现!!!

判断文件类型

1.文件分为可执行文件和被执行文件。

2.内置方法之双下name
(1)当py文件是执行文件的时候 __name__的结果是__main__

(2)当__name__所在的文件是被导入文件时候 结果是文件名(模块名)

3.__name__主要运用场景:
__name__主要用于开发模块的作者测试自己的代码使用.
if name == ‘main’:
当文件是执行文件的时候才会执行if的子代码

4.在pycharm中可以直接编写main按tab键自动补全

模块的查找顺序

1.模块查找顺序:
(1)先去内存中查找
(2)再去内置中查找
(3)再去sys.path中查找

2.sys.path(程序系统环境变量)
(1)导入一个文件 然后在导入过程中删除该文件 发现还可以使用

import md
import time
time.sleep(15)
print(md.money)

(2)创建模块文件时,尽量不要和内置模块重名

import time
print(time.time())  # 1657696069.2886362
print(time.name)


(3)导入模块的时候一定要知道谁是执行文件
所有的路径都是参照执行文件来的
被导入模块在另外的文件夹下时:

import sys
# print(sys.path)
"""
'E:\pythonProject\Day22', 
'E:\pythonProject\Day22', 
'D:\pycharm\PyCharm 2020.3.5\plugins\python\helpers\pycharm_display',
'D:\Python36\python36.zip', 
'D:\Python36\DLLs', 
'D:\Python36\lib', 
'D:\Python36', 
'D:\Python36\lib\site-packages', 
'D:\pycharm\PyCharm 2020.3.5\plugins\python\helpers\pycharm_matplotlib_backend']
"""
sys.path.append(r'E:pythonProjectDay22xxx')      # 添加被导入模块新的路径
import one

print(one.name)                        # jason

执行文件在另一个文件夹下时:
pycharm会自动将项目根目录添加到sys.path中

import sys
print(sys.path)        
"""
E:\pythonProject\Day22\yyy', 
'E:\pythonProject\Day22',          # # 自动添加项目跟目录
'D:\pycharm\PyCharm 2020.3.5\plugins\python\helpers\pycharm_display', 
'D:\Python36\python36.zip',
 'D:\Python36\DLLs', 
 'D:\Python36\lib', 
 'D:\Python36', 
 'D:\Python36\lib\site-packages', 
 'D:\pycharm\PyCharm 2020.3.5\plugins\python\helpers\pycharm_matplotlib_backend']
"""
import mdd
print(mdd.name)           # jason
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011384.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号