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

相关文章
|
3天前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
32 2
|
19天前
|
存储 大数据 Unix
Python生成器 vs 迭代器:从内存到代码的深度解析
在Python中,处理大数据或无限序列时,迭代器与生成器可避免内存溢出。迭代器通过`__iter__`和`__next__`手动实现,控制灵活;生成器用`yield`自动实现,代码简洁、内存高效。生成器适合大文件读取、惰性计算等场景,是性能优化的关键工具。
164 2
|
2月前
|
传感器 数据采集 监控
Python生成器与迭代器:从内存优化到协程调度的深度实践
简介:本文深入解析Python迭代器与生成器的原理及应用,涵盖内存优化技巧、底层协议实现、生成器通信机制及异步编程场景。通过实例讲解如何高效处理大文件、构建数据流水线,并对比不同迭代方式的性能特点,助你编写低内存、高效率的Python代码。
132 0
|
1月前
|
大数据 数据处理 数据安全/隐私保护
Python3 迭代器与生成器详解:从入门到实践
简介:本文深入解析Python中处理数据序列的利器——迭代器与生成器。通过通俗语言与实战案例,讲解其核心原理、自定义实现及大数据处理中的高效应用。
84 0
|
8月前
|
缓存 算法 数据处理
Python入门:9.递归函数和高阶函数
在 Python 编程中,函数是核心组成部分之一。递归函数和高阶函数是 Python 中两个非常重要的特性。递归函数帮助我们以更直观的方式处理重复性问题,而高阶函数通过函数作为参数或返回值,为代码增添了极大的灵活性和优雅性。无论是实现复杂的算法还是处理数据流,这些工具都在开发者的工具箱中扮演着重要角色。本文将从概念入手,逐步带你掌握递归函数、匿名函数(lambda)以及高阶函数的核心要领和应用技巧。
Python入门:9.递归函数和高阶函数
|
11月前
|
大数据 数据处理 开发者
Python中的迭代器和生成器:不仅仅是语法糖####
本文探讨了Python中迭代器和生成器的深层价值,它们不仅简化代码、提升性能,还促进了函数式编程风格。通过具体示例,揭示了这些工具在处理大数据、惰性求值及资源管理等方面的优势。 ####
|
索引 Python
解密 Python 迭代器的实现原理
解密 Python 迭代器的实现原理
96 13
|
Serverless Python
python高阶函数
【10月更文挑战第2天】
61 5
|
存储 索引 Python
Python 迭代器是怎么实现的?
Python 迭代器是怎么实现的?
104 6
|
缓存 并行计算 算法
如何提高 Python 高阶函数的性能?
【10月更文挑战第2天】
78 3

热门文章

最新文章

  • 1
    Python零基础爬取东方财富网股票行情数据指南
    46
  • 2
    解析Python爬虫中的Cookies和Session管理
    48
  • 3
    Python日志模块配置:从print到logging的优雅升级指南
    39
  • 4
    【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
    40
  • 5
    (Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
    44
  • 6
    (Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
    72
  • 7
    (numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
    42
  • 8
    (numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
    62
  • 9
    (Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
    32
  • 10
    (Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
    54
  • 推荐镜像

    更多