一、迭代器

迭代器:迭代的工具。
迭代也可以说是重复,每一次的结果都是基于上一次的结果来的。
  • 可迭代对象
height=180
salary=3.2
name='nick'
hobby_list=['run','read']
bobby_tup=('run','read')
info_dict={'name':'nick','weight':140}
hobby_set={'read','run',}
文件f

总结:

  1. 只要拥有_ _ iter_ _方法的对象就是可迭代对象

  2. python内置字符串/列表/元祖/字典/集合/文件 都是可迭代对象

  • 迭代器对象
height.__iter__
salary.__iter__
func.__iter__
name.__iter__()
hobby_list.__iter__()
hobby_set.__iter__()
hobby_tup.__iter__()
info_dict.__iter__()
f.__iter__()

总结:

迭代器对象:执行可迭代对象的__iter__方法,拿到的返回值就是迭代器对象。

  1. 内置有__next__方法
  2. 文件本身就是迭代器对象
可迭代对象: 拥有iter方法的对象就是可迭代对象,推导:可迭代对象不一定是迭代器对象
迭代器对象: 拥有iter方法和next方法的就是迭代器对象,推导: 迭代器对象一定是可迭代对象,又是迭代器对象
  • for循环原理

    for循环称为迭代器循环,in后必须是可迭代的对象。

二、三元表达式(三目表达式)

条件成立时的返回值if条件else条件不成立时的返回值。

dog_name='xiaogou'
if dog_name=='fenggou'print('远离他')
else:print('盘')
------------------------>>
print('远离他') if dog_name=='fenggou'else  print('盘他')
  • 不推荐使用,写程序的易懂,变得简单

三、列表推导式


lis=[]
for i in range(100):lis.append(i)
print(lis)
lis = [i*2 for i in range(100)]
print(lis)
lis1 = [i * 2 if i > 50 else i for i in range(100)]
print(lis1)

四、字典生成式

dic=dict.fromkeys([1,2,3,4],2)
print(dic)
#  {1: 2, 2: 2, 3: 2, 4: 2}
dic={i:i**2 for i in range(10)}
for i in dic.items():print(i)
##(0, 0)(1, 1)(2, 4)(3, 9)(4, 16)(5, 25)(6, 36)(7, 49)(8, 64)(9, 81)

拉链函数 zip()方法,通过解压缩函数生成一个字典。

res=zip('abcd',[1,2,3,4])
dic=dict()
for k,v in resdic[k]=v
print(dic)
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
print({k:v for k,v in zip('abcd',[1,2,3,4])})
{'a': 1, 'b': 2, 'c': 3, 'd': 4}

五、生成器:自定义的迭代器

生成器提供了非常方便的自定义迭代器的途径。

  • yield关键字:接收值,但不会结束函数,而是继续运行下一个代码
def func():pass
def func():print('from 1')yieldprint('from 2')yield
#func调用之后变成一个迭代器,yield默认返回none
g=func()
print(g.__next__())
print(g.__next__())
g.__next__()
for i in g:print(i)
def func():print('from 1')yield 1,2print('from 2')yield['a',1,2],2
g=func()
for k,v in g:print(k,v)-------------->from 11 2from 2['a', 1, 2] 2
#yield:接收值,但是不会结束函数,然后继续下一行代码,直到return
#return:返回值,直到结束函数,其他的特性和yield一摸一呀
range(1,10)
print([i for i in range(10)])
---------->
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(range(10).__iter__().next__())
---------->
0
def range(end,start=0,step=1):end,start=start,endcount=startwhile count<end:yield countcount+=step
g=range(1,10)
def range(*args,**kwargs)start=0step=1if len(args)==1:end=args[0]#arg=(10,)elif len(args)==2:#arg=(1,10)start=arg[0]end=args[1]elif len(args)==3:start=args[0]end=args[1]step=args[2]else:raise('传多值了')count=startwhile count<endyield countcount+=step
print(list(range(2,10,3)))
------------>
[2,5,8]
tup=(i for i in range(10))
print(tup.__next__())
for i in tupprint(i)
lis=[i for i in range(10)]
print(lis)

总结:

yield:

  1. 提供一种自定义迭代器的方式
  2. yield可以暂停住函数,并提供当前的返回值

yield和return:

  1. 相同点:两者都是在函数内部使用,都可以返回值,并且返回值没有类型和个数的限制

  2. 不同点:return只能返回一次之;yield可以返回多次值

  • 生成器表达式

    1. 把列表推倒式的[]换成()就是生成器表达式
    2. 优点:省内存,一次只产生一个值在内存中

六、递归

def f2();print('from f2')

==递归:函数调用函数自己,类似于循环,但是这个循环必须得有结束条件==

  • 直接调用:直接在函数内部调用函数自身
  • 间接调用:不在原函数体内调用函数,而是通过其他的方法间接调用函数自身
def guess_age(age,count)age-=2count-=1if count==1print(age)returnguess_age(age,count)guess_age(38,5)
def guess-age(count):count-=1if count==1:print(age)return 26return guess_age(count)+2
res=guess_age(5)
print(res)
r()

递归必须要有两个明确的阶段:

  1. 递推:一层一层递归调用下去,进入下一层递归的问题规模都将会减小
  2. 回溯:递归必须要有一个明确的结束条件,在满足该条件开始一层一层回溯。

递归的精髓在于通过不断地重复逼近一个最终的结果。

转载于:https://www.cnblogs.com/zhuyuanying123--/p/10969932.html

第十三天-迭代器、三元表达、字典生成式、生成器、递归相关推荐

  1. 学习日记0802函数递归,三元表达式,列表生成式,字典生成式,匿名函数+内置函数...

    1 函数的递归 函数的递归调用时函数嵌套调用的一种特殊形式,在调用的过程中又直接或者间接的调用了该函数 函数的递归调用必须有两个明确的阶段: 1 回溯:函数一次次的调用下去每一次调用,问题的规模都应该 ...

  2. 函数递归/二分法/列表,字典生成式/三元表达式/匿名函数/内置函数

    一.递归函数 递归函数:就是在函数调用阶段直接或者间接的调用自己 递归函数的两个阶段: 1.回溯:不停的重复的一个过程,在这个过程中将问题不断的简单化,直到最终打到要求(条件) 2.递归:一次次的往回 ...

  3. Day05:装饰器,三元表达式,函数的递归,匿名/内置函数,迭代器,模块,开发目录...

    上节课复习: 1.函数的对象     函数可以被当作数据取处理 2.函数嵌套     嵌套调用:在调用一个函数时,函数体代码又调用了其他函数     嵌套定义:在一个函数内部又定义了另一个函数 1 d ...

  4. Python叠加装饰器,三元表达,生成,调用,递归

    叠加多个装饰器的加载.运行分析 def deco1(func1): # func1 = wrapper2的内存地址def wrapper1(*args,**kwargs):print('正在运行=== ...

  5. 装饰器补充、三元表达式、生成式、匿名函数

    一.叠加多个装饰器 import time def timmer(func): def wrapper(): start_time=time.time() res=func() end_time=ti ...

  6. python字典生成式_【IT专家】Python 简化for循环:列表,集合与字典生成式

    本文由我司收集整编,推荐下载,如有疑问,请与我司联系 Python 简化 for 循环:列表,集合与字典生成式 2018/03/06 28 # 使用列表生成选择特定的行 my_data = [[1,  ...

  7. python列表生成字典_Python 列表生成式 字典生成式

    Python 列表生成式 & 字典生成式 通过生成式可以更加简洁地生成列表和字典 列表生成式 对比 直接生成数据后加入列表示例: user_list = list() for i in ran ...

  8. python—列表、字典生成式

    1 列表生成式 Python内置的一种极其强大的生成列表 list 的表达式.返回结果必须是列表. 示例: 需求1:接收变量 k a b s = '51 5000 10000' a = s.split ...

  9. Python入门--字典生成式,生成字典的公式

    #字典生成式(即生成字典的公式) #items=['Fruits','Books','Others'] #prices=[96,78,85] #{'Fruits':96,'Books':78,'Oth ...

最新文章

  1. pthred()多线程计算派
  2. 不懂技术,该如何进行互联网创业?
  3. SAP ERP系统之库存参数选择与优化
  4. 前端技术以及工程化工具
  5. jQuery - 链(Chaining)
  6. Eclipse 解决PHP函数代码不能自动提示问题
  7. Java设计模式学习02——工厂模式
  8. 谁说程序员不懂浪漫?
  9. AI市场需求变化了,应届生们却还停留在几年前的认知上...
  10. 查看思科、H3C所有端口状态
  11. 极速pdf编辑器的水印如何去掉_如何去掉PDF右下角的全能扫描王水印
  12. jar包运行utf-8格式
  13. 3dmax su 简单_sketchup导入3Dmax技巧
  14. dz搬家 win linux,Discuz论坛完美搬家 详细分享我的DZ搬家步骤
  15. 下一个排列[发挥主观能动性发现规律]
  16. 从一个帝国的消逝,看商业组织的进化
  17. 简单的一种图像冷暖色温转换(MATLAB)
  18. SAS9.4+sid更新
  19. Android Support Library介绍
  20. 2023年5月19日Redis学习记录(笔记md文档非本人亲自编写,仅作为个人学习记录,无其他目的)

热门文章

  1. CSS3:FlexBox的详解
  2. 基于邮件系统的远程实时监控系统的实现 Python版
  3. Python将JSON格式数据转换为SQL语句以便导入MySQL数据库
  4. animation of android (1)
  5. MFC窗口颜色的设置
  6. C#几个经常犯错误汇总
  7. GridView更新出现异常的解决过程
  8. CVE-2018-15473(OpenSSH用户枚举漏洞)
  9. java简述什么是标识符_Java概述(标识符、变量、基本数据类型)
  10. 关于parseInt面试题