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操作基础】——字典,迭代器和生成器
|
1天前
|
算法 大数据 数据处理
Python 迭代器和生成器有什么用?
**Python 迭代器与生成器巧妙用法** 本文探讨了 Python 中迭代器和生成器的实际应用场景。迭代器通过 `__iter__()` 和 `__next__()` 方法支持迭代操作,适用于处理大数据或动态数据流。例如,创建一个 `CountDown` 类实现倒计时迭代。生成器简化代码,如 `fibonacci` 函数用于生成斐波那契数列。此外,迭代器可用于分页、连接多个迭代器和过滤数据。生成器则擅长处理大文件、生成无限序列和实现斐波那契数列,还可构建数据处理管道和使用生成器表达式。掌握这些技巧能提升代码效率和处理问题的能力
|
3天前
|
Python
Python基础教程(第3版)中文版 第9章 魔法方法、特性和迭代器(笔记)
Python基础教程(第3版)中文版 第9章 魔法方法、特性和迭代器(笔记)
|
6天前
|
存储 开发者 Python
探究Python中的迭代器与生成器
Python中的迭代器和生成器是常见的编程概念,它们为我们提供了一种高效的方式来处理数据集合。本文将深入探讨迭代器和生成器的概念、用法以及它们在Python编程中的实际应用。
|
9天前
|
大数据 数据处理 Python
深入理解 Python 迭代器与生成器:详细指南
深入理解 Python 迭代器与生成器:详细指南
|
10天前
|
索引 Python
python生成器和迭代器
python生成器和迭代器
|
14天前
|
大数据 Python 数据采集
Python中的迭代器与生成器:高效处理大数据集的利器
Python中的迭代器和生成器是处理大数据集时的利器,它们能够高效地处理大量数据而不会占用太多内存。本文将介绍迭代器和生成器的概念、使用方法以及在处理大数据集时的优势,并通过示例代码演示它们的应用。
|
15天前
|
Python
Python的Lambda匿名函数详解
Python的Lambda匿名函数详解
6 1
|
27天前
|
数据采集 算法 Python
2024年Python最全python基础入门:高阶函数,小米面试编程题
2024年Python最全python基础入门:高阶函数,小米面试编程题
|
29天前
|
存储 缓存 算法
Python迭代器、生成器
【5月更文挑战第16天】
25 1