python之迭代器 生成器 枚举 常用内置函数 递归
迭代器
迭代器对象:有__next__()方法的对象是迭代器对象,迭代器对象依赖__next__()方法进行依次取值
with open('text.txt','rb',) as f:
res = f.__next__() # 第一行内容
print(res)
res = f.__next__() # 第二行内容
print(res)
生成器
定义生成器的两种方式:
# generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,
没有更多的元素时,抛出StopIteration的错误。
# 2.定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,
而是一个generator
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
以下实例使用 yield 实现斐波那契数列:
import sys
def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
执行结果 0 1 1 2 3 5 8 13 21 34 55
# 枚举
就是给可迭代器对象及迭代器对象添加迭代索引
s = 'abn'
for v in enumerate(s):
print(v)
# 结果
'''
(0, 'a')
(1, 'b')
(2, 'n')
'''
# send的工作原理
# 1.send发生信息给当前停止的yield# 2.再去调用__next__()方法,生成器接着往下指向,返回下一个yield值并停止
persons = ['张三', '李四', '王五', '赵六', '钱七']
def order(persons):
for i in range(len(persons)):
if i == 0:
print('%s在面试' % persons[0])
else:
print('%s叫%s在面试' % (name, persons[i]))
print('%s面试完毕' % persons[i])
name = yield persons[i]
obj = order(persons)
for i in range(len(persons)):
if i == 0:
p = obj.__next__()
else:
p = obj.send(p)
print('=============================')
'''
张三在面试
张三面试完毕
=============================
张三叫李四在面试
李四面试完毕
=============================
李四叫王五在面试
王五面试完毕
=============================
王五叫赵六在面试
赵六面试完毕
=============================
赵六叫钱七在面试
钱七面试完毕
=============================
'''
常用内置函数
lambda匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。其实lambda返回值是一个函数的地址,也就是函数对象。
a = lambda x,y,z:(x+8)*y-z print(a(5,6,8))
# 1.与类型相关的
# list() str() ord() chr() bool() int() ...
print(ord('A'))
print(chr(97))
# 2.进制转化
print(bin(10)) # 1010
print(oct(10)) # 12
print(hex(10)) # a
print(0b1111) # 15
print(0o10) # 8
print(0x11) # 17
# 3.常用操作类的
# range() len() iter() next() enumerate() id() type() print() input() open()
# 4.原义字符串
print(r'a\nb')
print(ascii('a\nb'))
print(repr('a\nb'))
# 5.数学相关运算
# abs() sum() max() min() pow() sorted()
print(abs(-1))
print(pow(2, 3)) # 2**3
print(pow(2, 3, 3)) # 2**3%3
递归
# 递归:
# 函数直接或间接调用本身,都称之为递归
# 回溯:找寻答案的过程
# 递推:推出结果的过程
# 前提条件:
# 1.递归必须有出口
# 2.递归回溯递推的条件一定有规律
# 递归
def get_age(count):
if count == 1:
return 58
age = get_age(count-1)-2
return age
age = get_age(3)
print(age)
'''
递归 函数直接或间接调用自身的都是递归
递归有两个特点 一个是递推 一个是回溯 起始步骤是递推 当递推满足函数第一个return时 递推走完 开始回溯 就是从递推结束的参数往回到原始值
此题中 count最初是3 第一次走完 count为2 第二次走完count为1 此时return 58 递推走完了
开始回溯 回溯第一次走完count为2 再走一次count为3 此时递归结束 此次过程中有两次是分别是58-2 和56-2 故最终结果是54
'''
python之迭代器 生成器 枚举 常用内置函数 递归的更多相关文章
- Python基础(二)——常用内置函数
1. 常用内置函数 (1)isinstance(object, classinfo) 用于判断一个对象是否为某一类型. object 是实例对象 classinfo 是基本类型如 int, floa ...
- python第十八课——常用内置函数
常用内置函数:round(): print(round(3.14),round(3.99)) print(round(3145.926,-2),round(413.575,2)) abs(): pri ...
- python学习笔记-day4笔记 常用内置函数与装饰器
1.常用的python函数 abs 求绝对值 all 判断迭代器中所有的数据是否为真或者可迭代数据为空,返回真,否则返回假 any ...
- python生成器对象&常见内置函数
内容概要 异常捕获(补充) for循环本质 生成器 yield 和 return优缺点 笔试题 常用内置函数 内容详细 一.异常捕获补充 try: print(name) except NameErr ...
- python中常用内置函数和关键词
Python 常用内置函数如下: Python 解释器内置了很多函数和类型,您可以在任何时候使用它们.以下按字母表顺序列出它们. 1. abs()函数 返回数字的绝对值. print( abs(-45 ...
- Python的常用内置函数介绍
Python的常用内置函数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.取绝对值(abs) #!/usr/bin/env python #_*_coding:utf-8_ ...
- 12.Python略有小成(生成器,推导式,内置函数,闭包)
Python(生成器,推导式,内置函数,闭包) 一.生成器初始 生成器的本质就是迭代器,python社区中认为生成器与迭代器是一种 生成器与迭代器的唯一区别,生成器是我们自己用python代码构建成的 ...
- Python函数04/生成器/推导式/内置函数
Python函数04/生成器/推导式/内置函数 目录 Python函数04/生成器/推导式/内置函数 内容大纲 1.生成器 2.推导式 3.内置函数(一) 4.今日总结 5.今日练习 内容大纲 1.生 ...
- python序列(七)序列操作的常用内置函数
1.len(列表):返回:列表中的元素个数,同样适用于元组.字典.集合.字符串等. max(列表).min(列表):返回列表中的最大或最小元素同样适用于元组.字典.集合.range对象等. sum(列 ...
随机推荐
- FireWall2
配置防火墙步骤: 1.给接口配置ip,开 service-manage 服务 2.把接口画在zone区域 3.配置策略 4.服务器一定要开启服务 1. interface GigabitEtherne ...
- kettle的基本使用
一.下载下载kettlehttp://sourceforge.net/projects/pentaho/files/Data%20Integration/7.0/pdi-ce-7.0.0.0-25.z ...
- android形状属性、锁屏密码、动态模糊、kotlin项目、抖音动画、记账app、视频播放器等源码
Android精选源码 直观了解Android的"形状"属性如何影响Drawable的外观. 一个灵活的视频播放器, 可替换播放器内核. android锁屏输入密码功能源码 背景动 ...
- CAD安装错误1625:系统策略禁止这个安装,请与系统管理员联系。
在安装Autodesk CAD/3DMAX/Maya/Revit/Inventor等的时候,出现“安装错误1625:系统策略禁止这个安装,请与系统管理员联系.”,或是Error 1625,同时还会提示 ...
- LeetCode Day 1
目录 1.TwoSum 2.AddTwoNumbers 4.FindMedianSortedArrays 1.TwoSum 给定一个整数数组nums和一个目标值 target,请你在该数组中找出和为目 ...
- Nginx笔记总结十九:nginx + fancy实现漂亮的索引目录
编译:./configure --prefix=/usr/local/nginx --add-module=../ngx-fancyindex-master 配置: location / { fanc ...
- 在中国实现自我价值的英国研究员——微软亚洲研究院英国籍研究员Darren的7年之路
"我和妻子在这儿已经待了7年了,这里的一切都很棒,无论是微软亚洲研究院还是北京."Darren笑着说,似乎他和中国,和北京,和研究院一直停留在"蜜月期",并未曾 ...
- Train Problem II (卡特兰数+大数问题)
卡特兰数: Catalan数 原理: 令h(1)=1,h(0)=1,catalan数满足递归式: h(n)= h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1) ...
- [Golang]字符串拼接方式的性能分析
本文100%由本人(Haoxiang Ma)原创,如需转载请注明出处. 本文写于2019/02/16,基于Go 1.11.至于其他版本的Go SDK,如有出入请自行查阅其他资料. Overview 写 ...
- Hive Functions
函数的分类 内置函数 操作符 复杂对象 UDF函数 数学函数 类型转换函数 日期函数 条件函数 UDTF函数 常用UDTF函数 explode posexplode inline stack json ...