Python学习第七天——函数(二)

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值