python学习
1.什么是迭代器(iter)
迭代器是容器型数据类型,只能通过类型转换和生成器来获得迭代器对象
迭代器存储数据的特点:同时可以保存多个数据,没有办法直接查看,而是需要先将数据从迭代器中取出来(取出来之后不能再放回去)
2.获取迭代器中的元素
(**)无论通过什么样的方式,只要是将迭代器中的某个元素拿到了,那么这个元素在迭代器中就不存在了
1)遍历
2)获取单个元素
next(迭代器对象) — 获取迭代器中的每一个元素(当前最前面的那个元素)
迭代器.__next__() — 获取迭代器中的一个元素(当前最前面的那个元素)
生成器
1.什么是生成器
a.概念1
生成器就是迭代器
b.概念2
调用一个带有yield 关键字的函数就可以得到一个生成器
2.生成器产生数据(生成器中的元素怎么产生)
生成器能生成多少数据就看执行生成器对应的函数的函数体会遇到几次yield;yield后面表达式的值就是生成器能够产生的数据
3.生成器产生数据的原理
当获取生成器元素的时候,会自动调用生成器关联的函数。第一次从函数开始的地方开始执行,直到遇到yield为止,并且将yield后面的值作为获取到的数据;后面每次都是从上一次结束的位置开始执行,直到遇到yield。如果从开始执行到函数结束都没有遇到yield就不会产生数据(如果是用next去取的数据这个时候会报错)
生成式
概念
生成式就是生成器的简写
列表推导式的[ ]变成()就变成了生成式
gen1 = (x*2 for x in range(5))
print(gen1)
模块
1.什么是模块
一个模块就是一个py文件,py文件名就是模块名
2.在一个模块中使用另一个模块的内容
1)哪些能用
所有在指定if语句外的全局变量
2)怎么使用
需要先导入模块
import 模块
导入后可以使用所有的全局变量,以‘模块名.变量’来使用变量
from 模块名 import 变量1,变量2,变量3,...
导入后可以使用指定的变量;直接使用变量
from 模块名 import *
导入后可以使用所有的全局变量;直接使用变量(不推荐使用)
import 模块名 as 新模块名
导入模块的时候取别名,以后使用模块的新名字
from 模块名 import 变量1 as 新变量1, 变量2 as 新变量2, 变量3 as 新变量3,...
给指定变量取别名
导入模块的原理
1.导入模块的原理
当使用import 或者 from—import导入模块的时候,系统会自动将被导入的模块中所有的代码都执行一遍
2.重复导入同一个模块,模块中的内容只会执行一次
注意:说说import 和 include的区别
a.import 和 include 都是用来导入的
b.import 自带查重功能,include 的导入多少次就执行多少次
c.python 中循环导入的问题(不会存在死循环)
3.怎么选择性的执行被导入的内容
在被导入的模块中添加 if 语句,将不希望被其他模块执行的代码放到 if 语句中。
if 语句:
if __name__ == '__main__'
不希望被其他模块执行的代码
原理:
每个模块都有一个属性:name,这个属性是用来保存当前模块的名字;name默认值就是模块名(模块对应的py文件的文件名)。当我们直接执行某个模块的时候,这个模块的name属性就会自动变成'main'
包的使用
1.什么是包
包就是一种特殊的文件夹
a.里面的文件都是py文件
b.自带一个init.py的文件
2.怎么导入
1)通过包直接导入模块
from 包名 import 模块
2)直接导入模块中的数据
from 包名.模块 import 变量
3)导入的定制
import shape import c_area, r_area
在init文件中去定制