当前位置 : 主页 > 编程语言 > python >

Python基础 8.迭代器 生成器 包 包管理

来源:互联网 收集:自由互联 发布时间:2021-06-25
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

用相对路径就不能直接执行这个文件   只能等其他文件来导入才能执行
网友评论