8.02_python_lx_day13<1>

一.匿名函数:用一句话来表达只有返回值的函数

(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)
原文地址:https://www.cnblogs.com/Magicianlx/p/13394785.html