小白学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:\pythonProject\Day22\xxx')      # 添加被导入模块新的路径
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值