一、迭代器

迭代器是迭代取值的工具,迭代是一个重复的过程,每一次重复都是基于上一次的结果而来的.

为什么要用迭代器呢?

  1.可以不依赖索引取值

  2.同一时刻在内存中只有一个值,不会过多的占用内存

如何用迭代器?

  可迭代的对象:但凡内置有__iter__方法的对象都是可迭代的对象,列如str,list,dict,tuple,set,文件对象

  迭代器对象:即内置有__iter__方法又内置有__next__方法的对象称之为迭代器对象,如文件对象

可迭代对象.__iter__()-------->迭代器对象

迭代器对象.__tier__()-------->迭代器本身

迭代器对象.__next__()--------->迭代器的下一个值

总结迭代器:

  优点:1.可以不依赖索引取值

        2.同一时刻在内存中只有一个值,不会过多的占用内存

  缺点:

     1.不如按照索引取值或者key取值的方式灵活

     2.无法预测迭代器所包含值的长度

二、生成器

生成器本质上就是一种自定义的迭代器

函数内包含yield关键字,调用函数不会执行函数体代码,会得到一个返回值,该返回值就是生成器对象

def func():
print('first')
yield 1
print('second')
yield 2
print('third')
yield 3
print('fourth') g=func()
print(g) #生成器对象
res1=next(g) #会触发函数的执行,直到碰到一个yield停下来,并且将yield后的值当作本次next的结果返回
print(res1)# 返回值1

自定义生成一个和内置函数range功能一样的生成器:

def my_range(start,stop,step=1):
while start < stop: # 3 < 3
yield start
start+=step #start=3 obj=my_range(1,5,2) # 1 3 把函数赋值给一个变量名,这个变量名就是生成器,迭代器 print(next(obj))
print(next(obj))

了解知识点:yield的表达式形式的应用:x=yield

# def dog(name):
# print('狗哥 %s 准备开吃' %name)
# food_list=[]
# while True:
# food=yield food_list # food=yield='肉包子'
# print('%s 吃了 %s' %(name,food))
# food_list.append(food) # g=dog('alex') # 强调:针对表达式形式的yield的使用,第一步必须让函数先暂停到一个yield的位置,才能进行传值操作
# next(g) # 张开狗嘴,让生成器先暂停到yield的位置,准备接收外部传进来的值
# res1=next(g) #g.send(None)
# print(res1) # res2=g.send('屎包子') # 1. 先为当前暂停位置的yield赋值 2. next(生成器)直到再次碰到一个yield停下来,然后其的值当做本次next的结果
# print(res2) # res3=g.send('肉包子')
# print(res3) # res4=g.send('泔水')
# print(res4)

总结yield:只能在函数内使用

1.yield提供了一种自定义迭代器的解决方案

2.yield可以保存函数的暂停的状态

3.yield对比return

  1.相同点:都可以返回值,返回的类型与个数都没有限制

  2.不同点:yield可以返回多次值,而return只能返回一次函数就结束了

生成器表达式:

# g = (i**2 for i in range(1,6) if i>3)  和列表表达式的区别就是"()"

三、内置函数(简单内置函数,前面接触过的就不介绍了)

all():如果里面的对象是真的就返回真,如果为空也返回真

print(all([1,'',None]))#False
print(all([1,2,'aaa']))#True
print(all([]))#True
print(all(''))#True

any():有一个为真就返回真,为空时返回假

print(any([0,'',None,False,1]))#True
print(any([0,'',None,False]))#False
print(any([]))#False

callable:判断函数是否可调用

Return whether the object is callable

ASCII码与数字转换:

print(chr(65))#A
print(chr(90))#Z print(ord('a'))#
print(ord('z'))#

divmod(x,y):分页

Return the tuple (x//y, x%y)

print(divmod(3003,20))#(150, 3)

eval:动态地执行一个表达式的字符串,或者compile函数编译出来的对象

print(eval('1+2+3+4'))
res=eval('[1,2,3]')
print(res,type(res))

frozenset()返回一个冻结的集合,集合冻结后不能再添加删除任何元素

pow()pow(2,3,3) #(2**3)%3

reversed():反转列表

l=[1,'a','',3]
l1=reversed(l)
print(list(l1))

round():取近似数

print(round(3.5))#
print(round(3.3))#

slice():保存一个切片

l=['a','b','c','d','e']
s='helloworld'
obj=slice(1,5,2) # print(l[1:5:2])
print(l[obj])#['b', 'd']

zip():拉链函数

l=[1,2,3,4,5,6,7]
s='hello' res=zip(l,s)
print(list(res))#[(1, 'h'), (2, 'e'), (3, 'l'), (4, 'l'), (5, 'o')]

filter():函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

def is_odd(x):
return x % 2 == 1
filter(is_odd, [1, 4, 6, 7, 9, 12, 17])#[1, 7, 9, 17]

删除 None 或者空字符串:

def is_not_empty(s):
return s and len(s.strip()) > 0
filter(is_not_empty, ['test', None, '', 'str', ' ', 'END'])
#['test', 'str', 'END']

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

 L = [1,2,3,4,]
def pow2(x):
... return x*x
...
map(pow2,L)
#[1, 4, 9, 16]

sorted()对list、dict进行排序

l=[1,4,3,4,9,6,2]
l1 = sorted(l)
print(l1)#[1, 2, 3, 4, 4, 6, 9]

python-迭代器、生成器、内置函数及面向过程编程的更多相关文章

  1. day14-二分法、匿名函数、内置函数以及面向过程编程

    目录 二分法 匿名函数 内置函数 面向过程编程 二分法 二分法查找适用于数据量较大时,但是数据需要先排好顺序.主要思想是:(设查找的数组区间为array[low, high]) (1)确定该区间的中间 ...

  2. python迭代器的内置函数

    1.迭代器: 内置函数: (1)iter() -__iter__() (2)next() -__next__() 2.迭代器的举例; 对于Fibs数列,我们对其进行 限量输出: 实现代码如下: cla ...

  3. 迭代器,for循环本质,生成器,常用内置方法,面向过程编程

    一.迭代器 1.迭代:更新换代(重复)的过程,每次的迭代都必须基于上一次的结果 迭代器:迭代取值的工具 2.迭代器给你提供了一种不依赖于索引取值的方式 3.可以迭代取值的对象:字符串,列表,元组,字典 ...

  4. Python入门之迭代器/生成器/yield的表达方式/面向过程编程

    本章内容 迭代器 面向过程编程 一.什么是迭代 二.什么是迭代器 三.迭代器演示和举例 四.生成器yield基础 五.生成器yield的表达式形式 六.面向过程编程 ================= ...

  5. python笔记3 闭包 装饰器 迭代器 生成器 内置函数 初识递归 列表推导式 字典推导式

    闭包 1, 闭包是嵌套在函数中的 2, 闭包是内层函数对外层函数的变量(非全局变量)的引用(改变) 3,闭包需要将其作为一个对象返回,而且必须逐层返回,直至最外层函数的返回值 闭包例子: def a1 ...

  6. python第十二天 生成器,迭代器,内置函数

    第二模块学习:  生成器,迭代器,内置函数 生成器特点:只有在调用时才会生成相应的数据,运行的速度快! 示例: def fil(max):#斐波那契数 n,a,b=0,0,1 #定义初始数据 whil ...

  7. Python3基础(4)匿名函数、装饰器、生成器、迭代器、内置函数、json&pickle序列化、软件目录开发规范、不同目录间模块调用

    ---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...

  8. python学习交流 - 内置函数使用方法和应用举例

    内置函数 python提供了68个内置函数,在使用过程中用户不再需要定义函数来实现内置函数支持的功能.更重要的是内置函数的算法是经过python作者优化的,并且部分是使用c语言实现,通常来说使用内置函 ...

  9. 十六. Python基础(16)--内置函数-2

    十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...

随机推荐

  1. VS2017 15.6之后支持直接反编译了

    在 15.6 预览版 2 中,增加了导航到反编译源功能. 启用后,在任何引用的类型或成员上调用转到定义或查看定义时,将显示其通过 ILSpy 反编译使用重新构造方法主体的定义. 要打开此功能,请转到“ ...

  2. vs2013 配置支持https的libcurl

    需求:在vs2013上配置支持https协议的libcurl. 环境:win7(64位),vs2013 一.安装openssl: 需要先安装nasm和ActivePerl. nasm需要手动配置环境变 ...

  3. write命令帮助文档(ubuntu 18.04)

    WRITE() BSD General Commands Manual WRITE() NAME write — send a message to another user SYNOPSIS wri ...

  4. Java--- Ambiguous mapping. Cannot map "***Controller" been method解决办法

    打开网页报错: Ambiguous mapping. Cannot map 'handController' method  public com.smallchill.core.toolbox.aj ...

  5. 使用Nginx在windows和linux上搭建集群

    Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器 特点:反向代理 负载均衡 动静分离… 反向代理(Reverse Pro ...

  6. [C++]PAT乙级1007.素数对猜想 (20/20)

    /* 1007. 素数对猜想 (20) 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数.“素数对猜想”认为“存在无穷 ...

  7. MLE

    独立同分布的采样x1,x2,…,xn,θ为模型参数,f为我们所使用的模型.参数为θ的模型f产生上述采样可表示为 f(x1,x2,…,xn|θ)=πf(xi|θ) 已知的为x1,x2,…,xn,未知为θ ...

  8. python 小数据池,is and "==",decode ,encode

    一:小数据池 1.python运行中的缓存: 2.目的:缓存我们字符串,整数,布尔值.在使用的时候不需要创建过多的对象 3.python 缓存数据:缓存:int, str, bool.         ...

  9. android矩阵详解

    android矩阵:http://www.360doc.com/content/11/1215/11/7635_172396706.shtml

  10. Android逆向基础----Android Dalvik虚拟机

    Android Dalvik虚拟机的特点: l  体积小,占用内存空间小. l  专有DEX可执行文件. l  常量池采用32位索引值,寻址类方法名,字段名,常量更快. l  基于寄存器架构,并拥有一 ...