1.迭代器
1.什么是迭代器?
迭代选取的工具,迭代是一个重复的过程,但是每次重复否是基于上一次的结果。
2.为什么要用迭代器?
①为了找到一种新的统一的取值方式(可以不依赖索引以及key的取值方式)
②惰性计算,不占用大量内存。
3.如何用迭代器?
(1)可迭代对象:
内置有__iter__方法
(2)迭代器对象:
①内置有__iter__方法
②内置有__next__方法
调用:可迭代对象.iter() -->返回迭代器对象。
调用:迭代器生成对象.next()–>返回的是下一个值。
4.for使用iter()将可迭代对象变为迭代器对象,而迭代器对象的iter()使得for循环更加简单。
5.生成器(yield)
函数内但凡出现yield关键字再调用函数不会执行函数代码,而是得到一个生成器对象,生成器即自定义的迭代器。
但两者存在区别,迭代器是一种对象,带有next,iter方法
生成器是一种可以定位的函数,下一次执行从上一次的定位开始。
def func():
print('hello1')
yield 1
print('hello2')
yield 2
print('hello3')
yield 3
g = func()
next(g)
next(g)
next(g)
yield vs return
相同:都能返回任意类型的值,返回元组,不写返回None。
不同:yield可返回多次值。
列表生成式:new = [i for i in range(5)]
字典生成式: dic = {i : i ** 2 for i in range(5)}
集合生成式:set1 = {i for i in range(5)}
生成器表达式 res = (i for i in range(5))
函数的递归调用
import sys #导入sys模块
sys.getrecursionlimit() #查看可迭代次数
sys.setrecursionlimit(1000) #设置可迭代次数
# def age(n):
# if n == 1:
# return 18
# return age(n-1)+10
# print(age(5))
2.递归(二分法)
# nums = [-3,1,4,5,8,19,22,34,56]
# nums = [1,4,5,3,-1,6,8] # 无序的话sort排序即可解决
# nums.sort()
# find_num = 99
#
# def binary_search(find_num,l):
# print(l)
# if len(l) == 0:
# print('值不存在')
# return
# mid_index = len(l) // 2
# mid_val= l[mid_index]
#
# if find_num >mid_val:
# l = l[mid_index+1:]
# binary_search(find_num,l)
# elif find_num < mid_val:
# l= l[:mid_index]
# binary_search(find_num,l)
# else:
# print('find it')
#
# binary_search(find_num,nums)
3.匿名函数:
一次性使用,随时随时定义
# f = (lambda x,y:x + y)(1,2)
# print(f)
了解(内置函数):
filter 过滤 条件为真留下
# names = ['egon_nb','lxx_sb']
# #
# res = filter(lambda name:name.endswith('sb'),names)
# #res 是迭代器
# print(res)
# print(list(res))
#map 添加映射
# names = ['ml','lxx','zxx']
# res = map(lambda name : name + 'vip',names)
# print(list(res))
#reduce 合并
from functools import reduce
# res = reduce(lambda 值,初始值)
# # res = reduce(lambda x,y:x+y,[1,2,3,4,5,6],100 )
# res = reduce(lambda x,y:x+y,['a','b','c'])
# print(res)
三元表达式
name=input('姓名>>: ')
res=‘SB’ if name == ‘lxx’ else ‘NB’
print(res)