8.1 列表推导式
循环添加:
li = [] for i in range(1,10): li.append(i)
列表推导:
li = [i for i in range(1, 10)]
列表推导+条件判断:
li2 = [i*10 for i in range(1, 10) if i % 2 == 0]
列表推导+三目运算:
li3 = [i 100 if i % 3 == 0 else i 10 for i in range(1, 10)]
集合推导:
se = {i for i in range(1,10)}
字典推导:
{i: j for i, j in enumerate(li)}
8.2 迭代器
1.迭代器:生成迭代器的方法:
1,iterator = iter(可迭代对象) ? 2,iterator = 可迭代对象.__iter__()
2.迭代器对象本身需要支持以下两种方法,它们一起构成迭代器协议:
iterator.__iter__() ? iterator.__next__()
3.取值:
next(iterator) ? iterator.__next__()
可迭代对象 只有iter方法 不能使用next取值
注意:如果迭代器值取完之后,会返回 StopIteration 错误
8.3 生成器:
方法 一:列表推导式的 [ ] 改成 ( ) 方法 二:在函数里面加上yield 生成器不会一下子把所以内容生成出来,在我们需要的时候用next()去生成
def func(num) : a=0 while a< num: yield a a+=1 ? ge = func(10) next(ge) 0 next(ge) 1 next(ge) 2
b = (x for x in range(10)) next(b)0 next(b)1 next(b)2 next(b)3
注意:
1.yield一个对象:
返回这个对象 暂停这个函数 等待下次next重新激活
2.yield 表达式只能在函数中使用,在函数体中使用 3.yield 表达式可以使函数成为一个生成器 4.yield 可以返回表达式结果,并且暂定函数执行,直到next激活下一个yield
Python使用生成器对延迟操作提供了支持。所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果,从而节省大量的空间,这也是生成器的主要好处
def fib(n): num_before=0 num_behind=1 for i in range(n): yield num_behind num_before,num_behind=num_behind,num_behind+num_before ? result=fib(10) for i in result: print(i)
8.4 if name == ‘main‘:
name
python会自动的给模块加上这个属性
如果模块是被直接调用的,则 name 的值是 main 否则就是该模块的模块名
if name == ‘ main ‘:
该语句可以控制代码在被其他模块导入时不被执行
8.5 导入模块
import test10 from test10 import fib from test10 import fib as cwd import sys
在不同目录下,需要使用 sys.path 添加路径
sys.path.append(‘path‘) (不会用请查百度)
8.6 包和包管理
init .py
用相对路径就不能直接执行这个文件 只能等其他文件来导入才能执行
查看更多关于Python基础 8.迭代器 生成器 包 包管理的详细内容...