一.匿名函数:用一句话来表达只有返回值的函数
(1)语法:lambda 参数 : 返回值 (追求代码:简洁,高效)
(2)表达式
<1>无参的lambda 表达式
1 def func(): 2 return "123"
改写 3 func = lambda : "123" 4 res = func() 5 print(res)
<2>有参的lambda 表达式
1 def func(n):
2 return type(n)
改写
3 func = lambda n : type(n)
4 print( func([1,2,3]) )
<3>带有判断条件的lambda 表达式
def func(n):
if n % 2 == 0:
return "偶数"
else:
return "奇数"
func = lambda n : "偶数" if n % 2 == 0 else "奇数"
res = func(17)
print(res)
二.三元(目)运算符
语法:
真值 if 条件表达式 else 假值 如果条件表达式为真,返回真值,否则返回假值
1 def func():
2 if x>y:
3 return x
4 else:
5 return y
6 func = lambda x,y : x if x>y else y
7 res = func(200,100)
8 print(res)
三.迭代器 : 能被next调用,并不断返回下一个值的对象,叫做迭代器(对象)
概念:
迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复都是基于上一次的结果而继续的,
单纯的重复并不是迭代
特征:
并不依赖索引,而通过next指针迭代所有数据,一次只取一个值,大大节省空间
1.可迭代对象
1 setvar = {"a","b","c","d"}
2 for i in setvar:
3 print(i)
dir 获取当前类型对象中的所有成员
成员中是否有__iter__ 方法用来判断是否是可迭代性数据
1 lst = dir(setvar)
2 print(dir(lst))
3 res = "__iter__" in dir(setvar)
4 print(res)
(2)迭代器
for 循环能够遍历一切可迭代性数据的原因在于,底层调用了迭代器,通过next方法中的指针实现数据的获取
可迭代对象 -> 迭代器 不能够被next直接调用 -> 可以被next直接调用的过程
<1>如何来定义一个迭代器
1 setvar = {"a","b","c","d"}
2 it = iter(setvar)
3 print(it)
<2>如何来判断一个迭代器
1 print(dir(it))
2 res = "__iter__" in dir(it) and "__next__" in dir(it)
3 print(res)
<3>如何来调用一个迭代器
next在调用迭代器中的数据时,是单向不可逆,一条路走到黑的过程
1 res = next(it)
2 print(res)
数据全部调用后 再次调用会StopIteration 报错 停止迭代
<4>重置迭代器
迭代器数据通过next全部调用后,重置迭代器后,可从头再次调用
1 it = iter(setvar)
2 res = next(it)
3 print(res)
<5>使用其他方式判断迭代器或者可迭代对象
Iterator 迭代器 Iterable 可迭代对象
1 from collections import Iterator,Iterable
2 res = isinstance(it,Iterator)
3 print(res)
4 res = isinstance(it,Iterable)
5 print(res)
<6>使用其他方式调用迭代器中的数据
①for 循环
1 lst = [1,2,3,4,5,6,7,7,8,9,10]
2 it = iter(lst)
3 for i in it:
4 print(i)
②for + next
1 lst = [1,2,3,4,5,6,7,7,8,9,10]
2 it = iter(lst)
3 for i in range(10):
4 res = next(it)
5 print(res)
6 print(next(it))
③list强转
1 res = list(it)
2 print(res)