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

相关文章
|
27天前
|
大数据 数据处理 开发者
Python中的迭代器和生成器:不仅仅是语法糖####
本文探讨了Python中迭代器和生成器的深层价值,它们不仅简化代码、提升性能,还促进了函数式编程风格。通过具体示例,揭示了这些工具在处理大数据、惰性求值及资源管理等方面的优势。 ####
|
2月前
|
Serverless Python
python高阶函数
【10月更文挑战第2天】
28 5
|
2月前
|
缓存 并行计算 算法
如何提高 Python 高阶函数的性能?
【10月更文挑战第2天】
21 3
|
1月前
|
存储 程序员 数据处理
深入理解Python中的生成器与迭代器###
本文将探讨Python中生成器与迭代器的核心概念,通过对比分析二者的异同,结合具体代码示例,揭示它们在提高程序效率、优化内存使用方面的独特优势。生成器作为迭代器的一种特殊形式,其惰性求值的特性使其在处理大数据流时表现尤为出色。掌握生成器与迭代器的灵活运用,对于提升Python编程技能及解决复杂问题具有重要意义。 ###
|
2月前
|
存储 索引 Python
Python 迭代器是怎么实现的?
Python 迭代器是怎么实现的?
47 6
|
3月前
|
索引 Python
解密 Python 迭代器的实现原理
解密 Python 迭代器的实现原理
53 13
|
3月前
|
机器学习/深度学习 设计模式 大数据
30天拿下Python之迭代器和生成器
30天拿下Python之迭代器和生成器
23 3
|
2月前
|
存储 大数据 Python
Python 中迭代器与生成器:深度解析与实用指南
Python 中迭代器与生成器:深度解析与实用指南
25 0
|
4月前
|
数据采集 存储 大数据
Python关于迭代器的使用
在Python编程中,数据的处理和操作是核心任务之一。 想象一下,你有一个装满各种颜色球的箱子,你想逐个查看并使用这些球,但又不想一次性将它们全部取出。 这就引出了我们今天要讨论的主题——迭代。
|
4月前
|
存储 安全 数据库
Python中的可迭代性与迭代器
在Python中,可迭代性和迭代器是非常重要的概念,它们为我们提供了一种优雅且高效的方式来处理序列和集合数据。本文将深入探讨这些概念,包括可迭代协议以及与异步编程相关的可迭代性和迭代器。