python在匿名函数作和_跟光磊学Python开发-匿名函数函数和高阶函数

本文详细介绍了Python中的匿名函数(lambda)和高阶函数,包括它们的定义、使用方法和注意事项。示例中展示了如何使用匿名函数进行简单的数学运算、参数传递以及在map、reduce和filter等高阶函数中的应用。此外,还探讨了函数作为参数、自定义map函数和使用reduce求阶乘、字符串拼接等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跟光磊学Python开发-匿名函数函数和高阶函数

跟光磊学Python开发-匿名函数函数和高阶函数跟光磊学Python开发

匿名函数

匿名函数就是函数定义时没有名字的函数,也称为匿名表达式。

普通函数的定义方式如下

def 函数名(参数列表):

函数体

匿名函数的定义方式如下

lambda [形参1][形参2]:[单行表达式]或[函数调用]

lambda定义和普通函数的区别

lambda没有函数名

lambda参数列表没有括号

lambda函数体中只能实现简单的表达式或则函数调用

lambda函数不能使用return,if,while,for-in

lambda函数体可以使用if实现的三目运算符

一般情况下因为lambda的局限性,使得它不能实现复杂的功能,只能实现一些简单功能。在使用时一般会实现一些简单的一次性使用的场景。

在Python的世界里一切皆对象,函数、文件等等都是对象,每个对象都有对应的内存地址(即引用),通过引用找到该对象并使用它。

函数作为参数赋值给变量,通过赋值的变量调用函数

"""

函数名作为参数

函数名也是可以参与赋值

@author tony 18601767221@163.com

@version 2021-02-06 09:43:44

@since python3.9.1

"""

# 普通函数的定义和调用

def display():

print("Hello Python")

def show_info():

print("跟光磊学Python开发")

display()

# 将一个函数的引用display赋值给一个变量func

func = display

# 打印函数的引用地址

# func = function display at 0x7fbff00e7040

print("func = ", func)

# 通过func变量 调用func()函数

func()

def call_func(func):

"""

函数地址作为参数实现在一个函数调用另外一个函数的函数

:param func:

:return:

"""

func()

call_func(func)

call_func(show_info)

程序运行结果

匿名函数的定义、使用和注意事项

"""

匿名函数的定义、使用和注意事项

@author tony 18601767221@163.com

@version 2021-02-06 09:43:44

@since python3.9.1

"""

# 定义一个匿名函数 返回1+1的结果给函数变量func

func = lambda: 1 + 1

print(func)

print("1加1的结果是", func())

# 定义一个带参数的匿名函数,返回参数的10次方

func = lambda x: x ** 10

print("2的10次方是", func(2))

# 匿名函数的注意事项

# lambda默认返回计算结果,不需要return返回,如果加了return反而会报错 无效的语法

# func = lambda x, y: return x + y

func = lambda x, y: x + y

print("两个整数的和是", func(10, 20))

# 匿名函数不能使用循环 无效的语法

# func =lambda x,y:for i in range(x,y):print(i)

# func=lambda x:while x100:print(x)

# 匿名函数不能使用if的三种格式

# func= lambda x:if x10:print("参数小于10")

# 匿名函数使用if实现的三目运算符

func = lambda left, right: left if left right else right

print("两个整数的最大值是", func(10, 20))

高阶函数-map

map会根据将提供的函数对指定的序列做映射,第一个参数function以参数序列中的每个元素调用function函数,返回包含每次function函数返回值的新列表

def square(x):

"""

求平方,该函数作为map()函数的第一个参数

因为map函数需要这个函数计算每个元素的值

所以该函数有且必须只能有一个参数

:param x:

:return:

"""

return x ** 2

# 普通函数作为map函数的参数参数

# square作为引用赋值给map()函数的形参

# result = map(square, int_list)

# lambda匿名函数作为map函数的参数

result = map(lambda x: x ** 2, int_list)

print("map函数的返回值类型", type(result))

for i in result:

print(i)

程序运行结果

自定义实现map函数

def custom_map(func, origin_list):

"""

自定义实现map函数

:param func: 函数

:param origin_list: 列表

:return: 列表

"""

# 定义一个列表作为返回参数

new_list = []

# 遍历参数列表

for i in origin_list:

# 将列表的元素传递给函数执行后将返回结果添加到新列表中

new_list.append(func(i))

# 返回新列表

return new_list

使用自定义实现map函数

result = custom_map(lambda x: x ** 2, int_list)

print("custom_map函数的返回值类型", type(result))

for i in result:

print(i)

程序运行结果

高阶函数-reduce

reduce()函数会对参数序列中的元素进行累计操作,例如累加求和,求阶乘,统计数量,字符串连接等。

reduce()函数在functools模块中,在使用前需要使用import functools导入该模块。

使用reduce()分别结合普通函数和匿名函数实现累加求和

"""

reduce()函数的使用

@author tony 18601767221@163.com

@version 2021-02-06 10:55:17

@since python3.9.1

"""

import functools

int_list = [1, 2, 3, 4, 5]

def custom_sum(left, right):

"""

返回两个参数的和

:param left:

:param right:

:return:

"""

return left + right

result = functools.reduce(custom_sum, int_list)

print("使用普通函数 result的类型是", type(result))

print("使用普通函数 累加求和的结果是 ", result)

result = functools.reduce((lambda value, element: value + element), int_list)

print("使用lambda匿名函数 result的类型是", type(result))

print("使用lambda匿名函数 累加求和的结果是 ", result)

程序运行结果

使用reduce()函数结合匿名函数实现字符串拼接

"""

使用reduce()实现字符串拼接,并转换为大写

@author tony 18601767221@163.com

@version 2021-02-06 11:22:40

@since python3.9.1

"""

import functools

str_list = ["h", "e", "l", "l", "o"]

result = functools.reduce(lambda s1, s2: str(s1 + s2).upper(), str_list)

print("result的类型是",type(result))

print("字符串拼接的结果是",result)

程序运行结果

使用reduce()函数结合匿名函数实现阶乘运算

"""

使用reduce求阶乘

@author tony 18601767221@163.com

@version 2021-02-06 11:27:39

@since python3.9.1

"""

import functools

int_list = [1, 2, 3, 4, 5]

result = functools.reduce(lambda n1, n2: n1 * n2, int_list)

print("阶乘的结果是", result)

程序运行结果

高阶函数-filter

filter函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象,如果要转换成列表,可以使用list()方法转换。

该函数需要两个参数,一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回True或者False,最后将返回True的元素放到新列表中。

"""

filter()函数的使用

@author tony 18601767221@163.com

@version 2021-02-06 11:35:47

@since python3.9.1

"""

int_list = [i for i in range(1, 10)]

# 使用filer函数结合匿名函数实现奇数过滤

result = list(filter(lambda x: x % 2 == 0, int_list))

print("int_list过滤奇数后的结果是",result)

程序运行结果

使用filer()过滤列表中的数字字符串

"""

使用filer()过滤列表中的数字字符串

@author tony 18601767221@163.com

@version 2021-02-06 11:44:38

@since python3.9.1

"""

str_list = ["123", "456", "python", "go", "java"]

result = filter(lambda s: s.isdigit(), str_list)

print("str_list过滤列表汇总的数字字符串的结果是",list(result))

程序运行结果

列表排序

列表的sort()方法只支持基本类型的排序,例如整数的排序,默认顺序升序

"""

sort()函数与lambda

@author tony 18601767221@163.com

@version 2021-02-06 11:48:41

@since python3.9.1

"""

int_list = [1, 2, 4, 5, 7, 8, 9, 6, 3]

# 简单排序

print("排序之前int_list = ", int_list)

int_list.sort()

print("排序之后int_list = ", int_list)

程序运行结果

如果想要完成复杂类型的数据排序,例如字典类型的数据排序,可以通过参数key结合lamda函数来指定排序规则进行排序

product_list = [{"id": 1, "name": "iphone12 pro max", "price": 12999.99},

{"id": 3, "name": "华为mate40pro max", "price": 8999.99},

{"id": 2, "name": "小米11 pro", "price": 6999.99}]

print("排序之前product_list= ", product_list)

# sort()方法不能对字典进行排序

# TypeError: '' not supported between instances of 'dict' and 'dict'

# product_list.sort()

print("初始化产品列表 product_list= ", product_list)

# 需求 按照ID的升序排序

product_list.sort(key=lambda d: d["id"])

print("按照ID的升序排序之后product_list= ", product_list)

product_list.sort(key=lambda d: d["price"], reverse=True)

print("按照价格降序排序之后product_list= ", product_list)

程序运行结果

跟光磊学Python开发-匿名函数函数和高阶函数 相关文章

python将两个txt按列合并

要点: 使用 with 打开文件。不需要关闭文件。 使用 zip 函数组合两个列表。 不带zip的代码,带内联注释: combine =[]with open("x.txt") as xh: with open('y.txt') as yh: with open("z.txt","w") as zh: #Read first file xlines = xh.readlines() #Read

Python Basics with numpy (optional)

Python Basics with Numpy (optional assignment) Welcome to your first assignment. This exercise gives you a brief introduction to Python. Even if you've used Python before, this will help familiarize you with functions we'll need. Instructi

python用pd.read_csv()方法来读取csv文件

import pandas as pd print("************取消第一行作为表头*************")data2 = pd.read_csv('rating.csv',header=None)print("************为各个字段取名**************")data3 = pd.read_csv('rating.csv',names=['user_id','book_id','rating'])pri

python3存图片到数据库中并查询(附送一张张查看图片)

import sys import pymysql from PIL import Image import os, time path = "./" # 打开图片存放到内存中 fp = open("./2.png", 'rb') img = fp.read() fp.close() database = pymysql.connect(host="172.16.22.132", port=63306, user="root", passwd="sa",

pycharm vs vscode项目调试对比

python的两大IDE开发利器,pycharm 和 vscode,二者各有优劣吧。 pycharm vs vscode简单对比 pycharm优点: python开发利器,专为python设计 内置功能丰富,比如可以在IDE中直接查看sql数据库,前提是有插件:DB BROWER 查看类、函数定义方便,只需简单通过

Python之文件及文件系统

Python之文件及文件系统 open() 方法: Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。 注意: 使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。

python pandas 交叉表, 透视表

透视表 pivot table 透视表(pivot table)是常见的数据汇总工具,它根据一个或多个键对数据进行聚合,根据行和列上的分组键将数据分配到矩形区域中。 pandas中使用pivot_table方法创建透视表, pd.pivot_table(data,values=None,index=None,columns=None,ag

css 选择器

在玩 python爬虫 时, 我们经常要定位标签, 获取属性 在这个过程中, 靠 css选择器 是一个十分有利的方法, 不仅简洁而且边界 就个人看来, 在正则 , xpath , 和 css选择器 中, 如果 css选择器 能用, 我肯定会选 css选择器 我们先来看这个 html: !DOCTYPE htmlht

Python-django-from表单组件

from django.forms import Formfrom django.forms import fieldsfrom django.forms import widgetsfrom django.forms.models import ModelChoiceFieldfrom django.core.validators import RegexValidatorfrom django.core.validators import ValidationError

Security and Cryptography in Python - Frequency Analysis

Security and Cryptography in Python - Frequency Analysis Frequency Analysis cipher = """lrvmnir bpr sumvbwvr jx bpr lmiwv yjeryrkbi jx qmbm wibpr xjvni mkd ymibrut jx irhx wi bpr riirkvr jxymbinlmtmipw utn qmumbr dj w ipmhh but bj rhnvwdmb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值