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 = [
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 = [i100 if i % 3 == 0 else i10 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
用相对路径就不能直接执行这个文件 只能等其他文件来导入才能执行