lambda函数的常用方法 迭代器 for循环的本质 异常捕获


什么是匿名函数

lambda X:返回值

匿名函数经常和一些内置的方法来结合使用,比如:

1.map 2.zip 3.max/min 4.filter

map()会根据提供的函数 对指定的序列 做映射,返回的对象是迭代器

# 让列表中的元素值,变为原来的平方
old_l = [1, 2, 3, 4, 5, 6]
# 如果用传统方法
new_l = []
for i in old_l:
    new_l.append(i ** 2)
print(new_l)

# 和lambda结合使用
new_l2 = list(map(lambda x: x ** 2, old_l))
print(new_l2)

zip()

会将可迭代的对象 作为参数,将一一对应的元素合成一个元组,返回的是 由元组可以组成的列表

列表的元素数量,取决于原来长度最短的对象

1 l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
2 l2 = ['ly', 'jason', 'tom', 'kevin', 'tony', 'Pony']
3 l3 = ['a', 'v', 'b', 'c', 'd']
4 l4 = [111, 222, 333]
5 
6 l = list(zip(l1, l2, l3, l4))
7 print(l)
8 
9 # 打印结果[(1, 'ly', 'a', 111), (2, 'jason', 'v', 222), (3, 'tom', 'b', 333)]

max()/min()

取列表中的最大值/最小值

首字母为英文时,按照ASKII码的十进制位置比较(ASKII码序号牢记:0:48、A:65 、a:97)

 1 dic = {
 2     'ly': 9999999,
 3     'jason': 1000,
 4     'kevin': 2000,
 5     'tom': 20,
 6     '大强': 100,
 7     '小强': 200
 8 }
 9 a = max(dic)  # 字典暴露的是K值,排序的话是直接按照K值来排序的
10 print(a)  # 结果是 小强
11 b = min(dic)
12 print(b)  # 结果是 jason
13 '''将按照个人的收入来筛选大小'''
14 c = max(dic, key=lambda key: dic[key])
15 print(c)  # ly
16 d = min(dic, key=lambda key: dic[key])
17 print(d)  # tom

filter()

指过滤,按照指定条件,过滤掉 指定序列 中的一些元素

1 l = [1, 2, 3, 4, 5]
2 new_l = list(filter(lambda x: x > 3, l))
3 print(new_l)

可迭代对象

  迭代:就是更新换代,没一次都要依赖与上一次的结果

  可迭代的对象: 内置有__inter__()方法的,都是可迭代对象

  可以内置__inter__()的数据类型,有字符串,列表,元组,字典,集合

  补充:所有 【点__函数名__ () 】方法,都有一个简单的写法【 函数名()】

a = 1  # 不是
b = 1.22  # 不是
c = 'hello'  #
d = [1, 2, 3, 4]  #
f = (1, 2, 3, 4)  #
h = {'username': 'ly'}  #
i = {1, 2, 3, 4}  #
j = True  # 不是
k = open('a.txt', 'w', encoding='utf-8')  #

print(c.__iter__())
print(h.__iter__())
print(d.__iter__())
# 另外一种简便写法
print(iter(c))
print(iter(h))
print(iter(d))

len(c)
c.__len__()

迭代器对象

一个函数中,内置有__inter__() ,并且也要有__next__方法的才是迭代器对象

如何生成迭代器对象:让可迭代对象调用__next__()

迭代器的作用:提供了一种不依赖于索引取值的方法

c = 'hello'  #
d = [1, 2, 3, 4]  #
f = (1, 2, 3, 4)  #
h = {'username': 'ly'}  #
i = {1, 2, 3, 4}  #

# 文件对象本来就是可迭代对象和迭代器对象
k = open('a.txt', 'w', encoding='utf-8')  #

res = c.__iter__()

迭代器练习题

# 对应一个可迭代对象,可以连续多次__iter__(),得到的结果还是本身
d = [1, 2, 3, 4]
res2 = d.__iter__().__iter__().__iter__().__iter__()
print(res2.__next__())

for循环的内部原理
        1. 先把in后面的可迭代对象__iter__()
        2. 调用__next__取值
        3. 当值取完之后,for内部自定帮你把异常处理了

异常捕获

异常就是错误发生的信号,如果不对该信号做处理,那么,之后的代码都不能正常执行
异常的分类:(1)语法错误(2)逻辑错误
        
         逻辑错误允许出现,但是,一般情况,逻辑错误要写到尽量完美
 异常的三大部分:

  Traceback:
              错误发生的位置
       xxxError:
               错误类型
       xxxError:后面的内容:
              错误发生的原因

如何解决,获取异常信息

 1 '''
 2 语法结构:
 3     try:
 4         被检测的代码
 5     except 错误类型:
 6         print('')
 7     except 错误类型:
 8         print('')
 9     except 错误类型:
10         print('')
11 '''
12 try:
13     d = {'username': 'aaa'}
14     d['aaa']
15 except Exception as e:
16     print(e)  # 显示发生异常的代码

相关