Python语言中的重要函数对象用法

news2024/9/30 3:31:36

高级函数对象

lambda函数

python使用lambda来创建匿名函数。所谓匿名函数,就是不再使用像def语句这样标准的形式定义函数。

lambda [arg1,[arg2,...argn]]:expression

使用lambda函数的语法定义函数,需要注意以下两点:

  • 冒号之前的arg1,arg2,…表示他们是这个函数的参数
  • 匿名函数不需要return来返回值,表达式本身的结果就是返回值

定义匿名函数

sayHello = lambda : print("hello,python")
sayHello()

使用lambda函数实现两数相加

sum = lambda arg1,arg2 : arg1+arg2;
print('相加后的值:',sum(10,20))
print('相加后的值:',sum(20,20))
map()函数

map()函数是python内置的高阶函数,会根据提供的函数对指定序列做映射,第一个参数function是个函数对序列中每个元素都调用function函数,返回包含每次function函数返回值的新序列

map(function,iterable,...)
  • function: 是个函数,通过函数依次作用在序列中的每个元素中。
  • iterable: 一个或多个序列,也被称为可迭代对象。

对列表中每个元素平方

def fun(x):
    return x*x
result=map(fun,[1,2,3])
print(list(result))

对列表中每个元素加3

result=map(lambda x: x+3,[1,3,5,6])
print(list(result))

两个列表的每个元素实现相加

result=map((lambda x,y:x+y),[1,2,3],[6,7,9])
print(list(result))
reduce()函数
reduce(function,iterable)
  • function: 接收函数,必须有两个参数
  • iterable: 一个或多个序列,序列也称为迭代对象

使用reduce()函数对列表中的元素进行累加

from functools import reduce
def add(x,y):
    return x+y
data = [1,2,3,4]
r=reduce(add,data)
print(r)
from functools import reduce
data=[1,2,3,4]
fun=lambda x,y:x+y
r2=reduce(fun,data)
print(r2)

该计算相当于(((1+2)+3)+4)=10

迭代器

迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有元素被访问完结束。迭代器只能往前不能后退。

使用迭代器
lst=[1,2,3,4]
it=iter(lst)
print(next(it))
print(next(it))
print(next(it))
自定义迭代器

对于要返回迭代器的类,迭代器对象被要求支持下面两个魔法方法

(1)iter()返回迭代器本身。

(2)next()返回容器的下一个元素的值。

斐波那契数列

def fib(max):
    a,b=1,1
    idx=0
    ls=[]
    while True:
        if idx==max:
            return ls
        ls.append(a)
        a,b=b,a+b
        idx=idx+1
if __name__=="__main__":
    result = fib(5)
    print(result)

自定义迭代器实现斐波那契数列

class Fibs(object):
    def __init__(self,max):
        self.max=max
        self.a=0
        self.b=1
        self.idx=0
    def __iter__(self):
        return self
    def __next__(self):
        fib=self.a
        if self.idx==self.max:
            raise StopIteration
        self.idx=self.idx+1
        self.a,self.b=self.b,self.a+self.b
        return fib
if __name__=='__main__':
    fibs=Fibs(5)
    print(list(fibs))
生成器

生成器是迭代器的一种实现。生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常时结束。

生成器的好处是延迟计算,一次返回一个结果。它不会一次生成所有的结果,这对于处理大数据量会非常有用。

生成器函数

在函数中如果出现了yield关键字,那么该函数就不再是普通函数,而是生成器函数。

使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间挂起函数的状态,以便下次从它离开的地方继续执行。

简单的生成器函数

def mygen():
    print('gen() 1')
    yield 1

    print('gen() 2')
    yield 2

    print('gen() 3')
    yield 3

gen =mygen()
print(next(gen))
print(next(gen))
print(next(gen))

使用生成器函数生成一个含有n个奇数的生成器,使用for语句迭代输出

def odd(max):
    n=1
    count = 0
    while True:
        yield n
        n+=2

        count=count+1
        if count == max:
            raise StopIteration
odd_num=odd(3)
for num in odd_num:
    print(num)

迭代器同样的效果

class odd(object):
    def __init__(self,max):
        self.count=0
        self.max=max
        self.start=-1

    def __iter__(self):
        return self
    def __next__(self):
        self.start+=2
        self.count=self.count+1
        if self.count==self.max:
            raise StopIteration
        return self.start
odd_num=odd(3)
for num in odd_num:
    print(num)

使用生成器生成斐波那契数列

def Fibs(max):
    a,b=1,1
    count=0
    while True:
        if count == max:
            raise StopIteration
        yield a
        a,b=b,a+b
        count=count+1
if __name__=="__main__":
    fib=Fibs(5)

    for item in fib:
        print(item)
装饰器

装饰器本质是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象。

简单的装饰器

先定义两个简单的数学函数

def add(a,b):
    return a+b
def subtraction(a,b):
    return a-b
a=5
b=1
print('{0}+{1}={2}'.format(a,b,add(a,b)))
print('{0}-{1}={2}'.format(a,b,subtraction(a,b)))
def decorator(func):
    def inner(a,b):
        print('输入参数 a={0},b={1}'.format(a,b))
        f1=func(a,b)
        return f1
    return inner

@decorator
def add(a,b):
    return a+b
@decorator
def subtraction(a,b):
    return a-b

a=5
b=1
print('{0}+{1}={2}'.format(a,b,add(a,b)))
print('{0}-{1}={2}'.format(a,b,subtraction(a,b)))
使用装饰器传递参数
def pre_str(pre=''):
    def decorator(func):
        def inner(a,b):
            print('装饰器参数 pre={0}'.format(pre))
            print('输入参数 a={0},b={1}'.format(a,b))
            f1=func(a,b)
            return f1
        return inner
    return decorator

@pre_str('add')
def add(a,b):
    return a+b

@pre_str('subtraction')
def subtraction(a,b):
    return a-b

a=5
b=1
print('{0}+{1}={2}'.format(a,b,add(a,b)))
print('{0}-{1}={2}'.format(a,b,subtraction(a,b)))
基于类的装饰器
class Test():
    def __init__(self,func):
        self.func=func
    def __call__(self, *args, **kwargs):
        print('The current function:%s' % self.func.__name__)
        return self.func
@Test
def test1():
    print("Hello")

test1()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2178490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python酷玩之旅_如何连接MySQL(mysql-connector-python)

前言 Python作为数据科学、机器学习等领域的必选武器,备受各界人士的喜爱。当你面对不同类型、存储于各类介质的数据时,第一时间是不是要让它亮个相?做个统计,画个图表,搞个报表… 等等。 正如Java中的JdbcDriver一样…

以“棋”启智,乐在其中:二近制AI智能棋盘内含9种经典玩法让老人小孩爱不释手

近年来,人工智能算法被广泛地应用到生活的各个领域,棋类游戏亦是如此。各种搭载 A 智能算法的棋盘层出不穷,以“棋”启智,乐在其中成为了当下较流行地全民益智游戏之一。 棋类游戏为何屡受欢迎? 棋类游戏是一种能够激发民族智慧…

济南奇牛科技移动办公手机安全管理平台功能说明

济南奇牛信息科技有限公司自主研发的企业移动安全管理平台为企业提供一整移动终端安全解决方案,为解决企业在实施移动终端应用系统中会遇到的安全、应用管理和资产管理方面的问题,建立统一安全策略,解决企业数字化资产安全和员工隐私保护问题…

【教学类-23-02】20240929《不会写学号的中班幼儿的学号描字贴》(中2班描字)

背景需求: 今天给孩子们做中班操作材料包《练眼力》,希望他们在操作纸左上角写学号,结果有不少孩子嚷:“我不会写学号!” “不会写的孩子举手,老师给你们做个字帖” 结果有不少孩子都举手了,我…

opencv学习:Harris角点检测和SIFT(尺度不变特征变换)算法完整代码实现

Harris角点检测 概念 Harris角点检测是一种在图像处理和计算机视觉领域广泛使用的技术,用于检测图像中的角点。角点是图像中两条边缘交点的位置,它们在图像分析、目标识别和图像配准等任务中非常重要。 角点:图像中的角点是指图像局部区域…

GDB :代码调试工具

文章目录 一、启动GDB二、GDB的基本命令1. 显示代码2. 运行程序3. 设置断点4. 单步执行5. 查看变量和内存6. 查看函数调用堆栈7. 修改变量值8. 退出GDB 一、启动GDB 在终端中,使用以下命令启动GDB并加载你的可执行文件: gdb ./your_program会进入以下界…

应用性能管理工具-SkyWalking

前言 随着微服务架构的流行,一次请求往往需要涉及到多个服务,因此服务性能监控和排查就变得更复杂,因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决…

关于大模型的10个思考

9月28日,第四届“青年科学家50论坛”在南方科技大学举行,美国国家工程院外籍院士沈向洋做了《通用人工智能时代,我们应该怎样思考大模型》的主题演讲,并给出了他对大模型的10个思考。 以下是他10个思考的具体内容: 1…

STM32移植RT-Thread实现DAC功能

在进行DAC的学习中,发现RT-Thread中没有该外设的驱动,因此需要自己进行相关配置 1.配置RT-Thread Setting中的DAC组件 2.在HAL库中完成DAC的配置(HAL库起到时钟的作用) 不懂HAL库配置的最好学一下HAL库的编程思想 3.在board.h中添加宏定义 我的RT-T…

关于分箱的一些介绍

在这篇文章中,我将介绍一种数据预处理的技术——分箱,然会将会从概念、步骤、分类、应用场景、注意事项与实际操作等方面去介绍它。 一、概念 分箱(Binning)是一种数据预处理技术,在数据分析和机器学习中经常使用。它…

Java8 用流收集数据之归约汇总

目录 规约汇总最大值 (max)・最小值 (min)统计总数 (count)统计求和 (summingInt・summingLong・summingDouble・sum)平均值 (averagingInt・averagingLong・averagingInt・average)统计梗概 (summarizingInt・summarizingLong・summarizingDouble・summ…

AI周报(9.22-9.28)

AI应用-Siipet宠物沟通师 Siipet是一款由SiiPet公司推出的创新宠物行为分析相机,旨在通过尖端技术加深宠物与主人之间的情感联系。这款相机利用先进的AI算法,能够自动识别和分析家中宠物的行为,并提供定制化的护理建议。 SiiPet相机的核心功…

益而益集团荣获2024年江苏省智能制造车间称号

近日,江苏省工信厅公示2024年江苏省智能制造车间名单,苏州益而益电器制造有限公司以其卓越的智能化转型成果,荣获2024年度江苏省级智能制造车间称号。 此次获评,是江苏省政府对益而益集团智能化高质量转型发展的认可及肯定&#…

活动在线报名小程序源码系统 自主提交表单+创建表单 带完整的安装代码包以及搭建部署教程

系统概述 随着各类活动的日益丰富和多样化,传统的报名方式逐渐显现出其局限性。纸质报名表格繁琐易错、人工统计费时费力,难以满足现代活动管理的需求。因此,开发一款集自主提交表单和创建表单功能于一体的活动在线报名小程序源码系统成为必…

mit6824-01-MapReduce详解

文章目录 MapReduce简述编程模型执行流程执行流程排序保证Combiner函数Master数据结构 容错性Worker故障Master故障 性能提升定制分区函数局部性执行缓慢的worker(slow workers) 常见问题总结回顾参考链接 MapReduce简述 MapReduce是一个在多台机器上并行计算大规模数据的软件架…

C++进阶知识2 多态

多态 1. 多态的概念2. 多态的定义及实现2.1 多态的构成条件2.1.2 虚函数2.1.3 虚函数的重写/覆盖2.1.5 虚函数重写的⼀些其他问题2.1.6 override和final关键字2.1.7 重载/重写/隐藏的对⽐ 3. 多态的原理3.2 多态的原理3.2.1 多态是如何实现的3.2.2 动态绑定与静态绑定3.2.3 虚函…

828华为云征文|部署在线文档应用程序 CodeX Docs

828华为云征文|部署在线文档应用程序 CodeX Docs 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 CodeX Docs3.1 CodeX Docs 介绍3.2 CodeX Docs 部署3.3 CodeX…

SpringBoot整合JPA 基础使用

一、什么是JPA ‌‌1.JPA的定义和基本概念‌‌ ‌JPA(Java Persistence API)‌是Java中用于进行持久化操作的一种规范,它定义了一系列用于操作关系型数据库的API接口。通过这些接口,开发人员可以方便地进行数据库的增删改查等操…

ArcgisEngine开发中,Ifeatureclass.Addfield 报错0x80040655处理方法

1、ArcgisEngine开发中,Ifeatureclass.Addfield 报错0x80040655。如下图所示。 2、经分析,这是由于字段类型错误,经检查,是由于字段名为中文名,超出shp格式的最大字段长度量,看资料说是5个中文字符&#xf…

fastadmin 搜索提交重置按钮文本修改

默认 修改require-backend.min.js文件 效果 当然最好还是去需修改lang文件 效果 如果修改没生效记得清楚一下缓存,再刷新 完结 赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你…