模块简介和与导入
昨日内容
def outer():
print('我是生成器')
yield 123,321,'大佬救命'
res = outer()
print(res)
res1 = res.__next__()
print(res1)
迭代取值与循环取值的差异
# 索引取值
l1 = [ 11, 22, 33, 44, 55]
print(l1[0])
print(l1[1])
print(l1[2])
print(l1[3])
print(l1[4])
print(l1[0]) # 可以循环重复取值
# 迭代取值
res = l1.__iter__()
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__()) # 只能从左依次取值无法往回取完就不能再取否则报错
'''
1.索引取值
优势可以随意往返获取任意数据值
针对无序的容器类型无法取值
2.迭代取值
优势:提供了一种不依赖索引的取值方式
劣势取值一旦开始无法往回只能依次往下继续取值取完就不能再取再取就会报错
'''

模块的简介
1.如何理解模块
'''
模块可以看成是一系列功能的结合体
使用模块就相当于拥有这个结合体内的所有功能
鸡哥说使用模块就相当于站在巨人的肩膀上
将来接到业务需求的时候先不要自己写,先看看有没有相应的模块可以实现需求的功能
'''
python小故事
#python 屈辱史
#python 刚出来时被其他编程程序员看不起
#太简单 写代码都是调用模块(调包侠 贬义词)
#随着业务的扩展其他程序员也需要使用python写代码写完之后发现python
#真好用 (调包侠 褒义词)
'python 厉害的原因:因为支持python 的模块非常多非常全非常完善'
模块的分类
1. 内置模块:
解释器自带的 直接可以使用的模块
比如 time 模块
import time
time.sleep(3)让程序等待三秒后运行
2.自定义模块
自己写的模块:
登陆注册功能
user_name = input('用户名>>>:')
3.第三方模块
别人写的模块,存在于网络上,使用之前提前下载
比如:图形识别,语音识别,图形可视化
模块的表现形式
1.py文件也可以称为模块文件
2.含有多个py文件的文件夹,按照模块功能的不同划分不同的文件夹存储
3.已被编译为共享库的DLL的c或c++扩展
4.使用c编写并链接到python解释器的内置模块
倒入模块的方式
'''
补充
以后真正的项目中所有的py文件名称都是英文 ,没有中文和编号
模块名:正确use01r.py
错误01user.
模块的起名需要使用英文否者无法导入
'''
倒入模块句式1.
import user # 执行文件生成全局名称空间,执行后名称空间中就会产生被导入模块的名字 此时该名字指向被导入模块的名称空间
# 导入相当于执行被导入文件user文件自动创名称空间user
#并执行user文件中的所有代码并将产生的名字存储导该名称空间中
print(user.name)
user.outer()
user.inter()
print(user.outer)
1.产生执行文件的名称空间
2.产生被导入文件的名称空间并运行被导入文件内的所有代码 存储名字
3.在执行文件中获取一个被导入文件名称空间的名字,通过该名字点的方式就可以使用到被导入文件的名称空间的名字
导入模块句式2.
from user import name # 从模块中导入name如果想要两个名字直接在后面加逗号
print(name) #导入的是变量名直接可以使用
'''
1.创建执行文件的名称空间
2.创建被被导入文件的名称空间
3.运行被导入文件中的所有代码并将名字存储到被导入文件的名称空间
4.在执行名称空间中获取到指定的名字指向被导入文件的名称空间中相同名字可以绑定其他数据将指向改为其他数据
'''
import user
print(user) # 导入模块就是让变量绑定该模块的名称空间当重新赋值时就会断开绑定关系
user = 123
print(user)
import user
print(user) # 断开后可以重新导入模块重新绑定未重新绑定之前无法使用名称空间里的名字
#重新导入后不会再次执行
两种导入局势的优缺点
import 模块名
优点:通过点的方式可以使用到模块内所有的名字,并且不会冲突,缺点是什么都可以用,有时候不想让别人用到所有的名字。
from 模块名 import 导入的名字
优点:指名道姓的使用使用指定的名字,不需要加模块名前缀
缺点:容易与执行文件中的名字冲突绑定关系被修改
起别名
1.多个模块名相同多个人写
2.原来的模块名复杂
代码演示:
import md as m 此时模块名会被修改
print(m)
from md import name as mdname # 修改导入的变量名
print(n)
from md1 import name as md1name # 导入不同文件的name
导入多个模块
1.
import time,sys,os
导入功能相似的模块使用逗号追加,不相似尽量分开 导入名字指的是模块名
import time
import sys
import os
2.
from md import name, age, add # 使用这个导入方式可以使用追加名字指的是变量名具体的数据值
3.不能使用模块名导入
全导:
from md import* # 星表示所有用的时候直接用
#可以在被导入模块中设置导入的权限
__all__ = [''] 在模块中使用双下all赋值后面的列表列表中填写想给人家导的数据当导入使用星的时候只能用到列表里的数据此功能只针对星号
循环导入

循环导入就是两个文件彼此导彼此
循环导入容易出现报错
使用彼此的名字可能在没有准备好的情况下使用
解决循环导入的问题提前就名字准备好
尽量避免循环导入
判断文件类型
#所有py文件中都有一个__name__内置名
#当py文件是执行文件的时候__name__的就过是__main__
#当py文件是被导入文件的时候__name__就是模块名
执行文件执行导入文件里的代码来查看结果
__name__主要用于开发模块作者测试自己代码所用
if __name__ == '__main__':
当文件是执行文件的时候才会执行if分支的子代码
上述判断一般在整个程序的启动文件中
在pycharm中mian按tab补全



模块的查找顺序
"""1先去内存中找
2再去内置空间找
3再去sys.path中找程序系统环境变量"""
1验证导入一个文件,然后在导入过程中删除该文件,发现还可以使用
2创建一个跟内置模块名相同的文件名
import time
print(time.time())
import time
print(name)
此时pycharm不知道我要导入的是那个模块
4.导入模块的时候要知道谁是执行文件
import sys
sys.path.append(r'/Users/ltianhao/PycharmProjects/循环导入/xxx')
import b
当文件在不同文件夹是无法直接导入找到需要导入文件所在路径然后添加到执行文件的程序系统的环境变量

import a
import sys
print(sys.path)
print(a.name)
"""
pycharm会自动将我们的根目录添加到程序的环境变量中
"""
from xxx.aaa import b
print(b.name)
可以使用这个方法从文件夹中直接导入模块名也可以导入变量名使用句点号进入下一层


浙公网安备 33010602011771号