python匿名函数、迭代器、高阶函数(一)

简介: python匿名函数、迭代器、高阶函数(一)

Hello,大家好,我是你们的老朋友景天,今天我们来聊一聊python的匿名函数,迭代器和高阶函数map,filter,reduce,sorted的用法。

匿名函概念: 用一句话来表达,只有返回值的函数叫匿名函数

语法: lambda 参数 : 返回值

特点: 简洁,高效

lambda函数

我们先对lambda函数进行一个简单的介绍

lambda函数是一种匿名函数,即没有名字的函数

使用lambda保留字定义,函数名是返回结果

lambda函数的函数体只是一个表达式

lambda函数用于定义简单的、能够在一行内表示的函数

lambda表达式” : “后面,只能有一个表达式,def则可以有多个。

lambda一般用来定义简单的函数,而def可以定义复杂的函数

lambda 冒号后面的表达式计算结果,即为该lambda的返回值。可以结合三目运算进行判断

(1) 无参的lambda表达式

def func():
    return "文哥是个帅哥"

#使用lambda改造

func = lambda : "文哥是个帅哥"
print(  func()  )

(2) 有参的lambda表达式

def func(n):
    return id(n)

#改造
func = lambda n : id(n)
print( func(100) )


(3) 带有判断条件的lambda表达式

def func(n):
    if n % 2 == 0:
        return "偶数"
    else:
        return "奇数"

#改造
func = lambda n : "偶数" if n % 2 == 0 else "奇数"
print( func(44) )

(4)三元运算符 / 三目运算符

三目运算符又称为三元运算符,条件运算符。三目运算符的作用就是判断,可以理解为if条件判断的简化版。

“”“语法: 真值 if 条件表达式 else 假值

如果条件表达式成立为True , 返回if前面的真值, 反之,返回else后面的假值 给变量

“””

n = 13
res = "偶数" if n % 2 == 0 else "奇数"
print(res)

#小练习 : 比较两者之间的最大值进行返回

def func(x,y):
    if x > y:
        return x
    else:
        return y

#改造
func = lambda x,y : x if x>y else y
print(  func(40,30)  )


lambda只能表达有返回值的简单表达,如果带有复杂逻辑的运算,还是要用def来定义函数

迭代器

迭代器:

能被next()函数调用,并不断返回下一个值的对象称为迭代器(Iterator 迭代器是对象)

概念:

迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复都是基于上一次的结果而继续的,

单纯的重复并不是迭代

特征:

并不依赖索引,而通过next指针(内存地址寻址)迭代所有数据,一次只取一个值,

而不是一股脑的把所有数据放进内存.大大节省空间,

–Iterable可迭代的对象 Iterator迭代器

range 是 可迭代对象

range 和 迭代器 能够产生惰性序列

可迭代数据可以通过list()方法强制转换成列表

1.可迭代对象

setvar = {“王同培”,“马春配”,“赵万里”,“赵沈阳”}

#获取当前对象的内置成员

lst = dir(setvar)       #返回的是个列表,有什么属性,有什么方法,成员等,都打印到列表里面
print(lst)

#判断是否是可迭代对象

res = "__iter__" in lst
print(res)
# for i in setvar:
    # print(i)

__iter__  在当前对象的内置成员中,就是可迭代对象

2.迭代器

for循环之所以可以遍历所有的数据,是因为底层使用了迭代器,通过地址寻址的方式,一个一个的找数据;

可迭代对象 -> 迭代器 实际上就是从不能够被next直接调用 -> 可以被next指针直接调用的过程

如果是可迭代对象 -> 不一定是迭代器

如果是迭代器 -> 一定是可迭代对象

不是迭代器不可以被next直接调用

后面还有生成器,可以自定义控制迭代逻辑,比迭代器更先进

1.如何创建一个迭代器,可迭代对象可以通过iter()方法创建迭代器

setvar = {"王同培","马春配","赵万里","赵沈阳"}
it = iter(setvar)
print(it)

非可迭代对象,不能通过该方法创建迭代器

#创建迭代器,方法二:
#变成迭代器,方法2
 it = res.__iter__()
# print(isinstance(it,Iterator))

2.如何判断一个迭代器

print(dir(it))
res = "__iter__" in dir(it)  and "__next__" in dir(it)
print(res)

根据当前对象的内置成员,迭代器与迭代对象都包含 iter 。但是迭代器比迭代对象多个__next__。
同时具备 __iter__和__next__的才是迭代器

3.如何调用一个迭代器

"""next是单向不可逆的过程,一条路走到黑"""
res = next(it)
print(res)
res = next(it)
print(res)
res = next(it)
print(res)
res = next(it)
print(res)
# res = next(it)
# print(res)

#调用
res = it.__next__()
print(res)

当迭代的数量超过迭代器数据的数量,会报错

4.重置迭代器

it = iter(setvar)
print(  it.__next__()  )   #内置方法来迭代,该方法也不能超过数据个数迭代
print(  it.__next__()  )
print(  it.__next__()  )
print(  it.__next__()  )

通过iter(setvar)重置迭代器,可以重新开始迭代

也可以使用内置的__next()__方法来迭代

5.调用迭代器的其他方法

#1 for

it = iter(setvar)
for i  in  it:
    print(i)

#2 for + next

it = iter(setvar)
for i in range(2):
    print( next(it) )

print( next(it) )
print( next(it) )
# print( next(it) ) error  超出了寻址范围

6.判断迭代器/可迭代对象的其他方法

#从…模块 引入…内容

from collections import Iterator, Iterable
"""Iterator 迭代器 Iterable 可迭代的对象"""
res = isinstance(it,Iterator)
print(res)
res = isinstance(it,Iterable)
print(res)

python3.11版本导入方式:

from collections.abc import Iterator, Iterable

7.range是迭代器么?

print(isinstance(range(10),Iterator)) # False
print(isinstance(range(10),Iterable)) # True

#变成迭代器

it = range(10).__iter__()
print(isinstance(it,Iterator)) # True
print(isinstance(it,Iterable)) # True

#调用方法一

#next
res = next(it)
print(res)
res = next(it)
print(res)

#调用,方法二
res = it.__next__()
print(res)

print(“<=====>”)

# for + next 
for i in range(3):
    print(next(it))

#调用方法三

# for
for i in it:
    print(i)

python匿名函数、迭代器、高阶函数(二):https://developer.aliyun.com/article/1495744

相关文章
|
1天前
|
Python
【Python操作基础】——字典,迭代器和生成器
【Python操作基础】——字典,迭代器和生成器
|
4天前
|
存储 数据处理 Python
python 之map、zip和filter迭代器示例详解
python 之map、zip和filter迭代器示例详解
9 0
|
5天前
|
存储 程序员 Python
深入理解Python中的生成器和迭代器
本文将深入探讨Python中生成器和迭代器的概念、原理以及它们在编程中的应用。通过详细解析生成器和迭代器的工作机制,读者将能够更好地理解Python中的迭代器协议、生成器函数以及生成器表达式的使用方法。同时,本文还将介绍生成器和迭代器在Python中的一些常见应用场景,并提供一些实用的编程技巧和最佳实践。
|
14天前
|
Python 容器
python匿名函数、迭代器、高阶函数(二)
python匿名函数、迭代器、高阶函数(二)
|
14天前
|
容器
【Python21天学习挑战赛】-迭代器 & f-格式化 & 模块
【Python21天学习挑战赛】-迭代器 & f-格式化 & 模块
|
17天前
|
存储 Python
深入理解Python中的生成器和迭代器
本文将深入探讨Python中生成器和迭代器的概念及其在实际编程中的应用。通过对生成器和迭代器的原理解析,以及实际案例的演示,读者将能够更好地理解和利用这些强大的编程工具。
|
18天前
|
运维 Shell Sentinel
第八章 Python可迭代对象、迭代器和生成器
第八章 Python可迭代对象、迭代器和生成器
|
19天前
|
数据采集 存储 大数据
Python中的迭代器与生成器
Python中的迭代器与生成器
15 0
|
3月前
|
索引 Python 容器
解释Python中的迭代器和生成器的优势和劣势。
解释Python中的迭代器和生成器的优势和劣势。
37 2
|
26天前
|
缓存 大数据 数据处理
Python迭代器、生成器和装饰器探究
【4月更文挑战第2天】 迭代器是遍历集合元素的对象,实现`__iter__()`和`__next__()`方法。示例中自定义迭代器`MyIterator`用于生成整数序列。 - 生成器简化了迭代器实现,利用`yield`关键词实现状态保存,减少内存占用。示例中的`my_generator`函数即为一个生成器。 - 装饰器用于修改函数行为,如日志记录、性能分析。装饰器`my_decorator`在函数调用前后添加额外代码。
29 0