返回顶部
首页 > 资讯 > 后端开发 > Python >Python 拓展之特殊函数(lambd
  • 210
分享到

Python 拓展之特殊函数(lambd

函数Pythonlambd 2023-01-30 23:01:19 210人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

写在之前 今天给大家介绍几个比较特殊的函数,他们具有函数式编程的特点,有人将它们视为 python 可进行 “函数式编程” 的见证,至于什么是函数式编程,不是本篇文章的重点,感兴趣的可以去了解一下。老读者可能都知道,我非常推崇 Pytho

写在之前

今天给大家介绍几个比较特殊的函数,他们具有函数式编程的特点,有人将它们视为 python 可进行 “函数式编程” 的见证,至于什么是函数式编程,不是本篇文章的重点,感兴趣的可以去了解一下。老读者可能都知道,我非常推崇 Python 的简洁优雅,而今天的这几个函数,有了它们,最大的好处就是可以让程序更简洁,当然,没有它们程序也可以用其它方式实现。

lambda 函数

lambda 是一个可以只用一行就能解决问题的函数,让我们先看下面的例子:

>>> def add(x):
...     x += 1
...     return x
...
>>> numbers = range(5)
>>> list(numbers)
[0, 1, 2, 3, 4]
>>> new_numbers = []
>>> for i in numbers:
...     new_numbers.append(add(i))
...
>>> new_numbers
[1, 2, 3, 4, 5]

在上面的这个例子中,函数 add() 充当了一个中间角色,当然上面的例子也可以如下实现:

>>> new_numbers = [i+1 for i in numbers]
>>> new_numbers
[1, 2, 3, 4, 5]

首先我要说,上面的列表解析式其实是很好用的,但是我偏偏要用 lambda 这个函数代替 add(x) :

>>> lamb = lambda x: x+1
>>> new_numbers = []
>>> for i in numbers:
...     new_numbers.append(lamb(i))
...
>>> new_numbers
[1, 2, 3, 4, 5]

在这里的 lamb 就相当于 add(x) ,lamb = lambda x : x+1 就相当于 add(x) 里的代码块。下面再写几个应用 lambda 的小例子:

>>> lamb = lambda x,y : x + y
>>> lamb(1,2)
3
>>> lamb1 = lambda x : x ** 2
>>> lamb1(5)
25

由上面的例子我们可以总结一下 lambda 函数的具体使用方法:lambda 后面直接跟变量,变脸后面是冒号,冒号后面是表达式,表达式的计算结果就是本函数的返回值。

在这里有一点需要提醒的是,虽然 lambda 函数可以接收任意多的参数并且返回单个表达式的值,但是 lambda 函数不能包含命令且包含的表达式不能超过一个。如果你需要更多复杂的东西,你应该去定义一个函数。

lambda 作为一个只有一行的函数,在你具体的编程实践中可以选择使用,虽然在性能上没什么提升,但是看着舒服呀。

map 函数

我们在上面讲 lambda 的时候用的例子,其实 map 也可以实现,请看下面的操作:

>>> numbers = [0,1,2,3,4]
>>> map(add,numbers)
[1, 2, 3, 4, 5]
>>> map(lambda x: x + 1,numbers)
[1, 2, 3, 4, 5]

map 是 Python 的一个内置函数,它的基本格式是:map(func, seq)。

func 是一个函数对象,seq 是一个序列对象,在执行的时候,seq 中的每个元素按照从左到右的顺序依次被取出来,塞到 func 函数里面,并将 func 的返回值依次存到一个列表里。

对于 map 要主要理解以下几个点就好了:

1.对可迭代的对象中的每一个元素,依次使用 fun 的方法(其实本质上就是一个 for 循环)。

2.将所有的结果返回一个 map 对象,这个对象是个迭代器。

我们接下来做一个简单的小题目:将两个列表中的对应项加起来,把结果返回在一个列表里,我们用 map 来做,如果你做完了,请往下看:

>>> list1 = [1,2,3,4]
>>> list2 = [5,6,7,8]
>>> list(map(lambda x,y: x + y,list1,list2))
[6, 8, 10, 12]

你看上面,是不是很简单?其实这个还看不出 map 的方便来,因为用 for 同样也不麻烦,要是你有这样的想法的话,那么请看下面:

>>> list1 = [1,2,3,4]
>>> list2 = [5,6,7,8]
>>> list3 = [9,10,11,12]
>>> list(map(lambda x,y,z : x + y + z,list1,list2,list3))
[15, 18, 21, 24]

你看三个呢?是不是用 for 的话就稍显麻烦了?那么我们在想如果是 四个,五个乃至更多呢?这就显示出 map 的简洁优雅了,并且 map 还不和 lambda 一样对性能没有什么提高,map 在性能上的优势也是杠杠的。

filter 函数

filter 翻译过来的意思是 “过滤器”,在 Python 中,它也确实是起到的是过滤器的作用。这个解释起来略微麻烦,还是直接上代码的好,在代码中体会用法是我在所有的文章里一直在体现的:

>>> numbers = range(-4,4)
>>> list(filter(lambda x: x > 0,numbers))
[1, 2, 3]

上面的例子其实和下面的代码是等价的:

>>> [x for x in numbers if x > 0]
[1, 2, 3]

然后我们再来写一个例子体会一下:

>>> list(filter(lambda x: x != 'o','Rocky0429'))
['R', 'c', 'k', 'y', '0', '4', '2', '9']

reduce 函数

我在之前的文章中很多次都说过,我的代码都是用 python3 版本的。在 Python3 中,reduce 函数被放到 functools 模块里,在 Python2 中还是在全局命名空间。

同样我先用一个例子来跑一下,我们来看看怎么用:

>>> reduce(lambda x,y: x+y,[1,2,3,4])
10

reduce 函数的第一个参数是一个函数,第二个参数是序列类型的对象,将函数按照从左到右的顺序作用在序列上。如果你还不理解的话,我们下面可以对比一下它和 map 的区别:

>>> list1 = [1,2,3,4]
>>> list2 = [5,6,7,8]
>>> list(map(lambda x,y: x + y,list1,list2))
[6, 8, 10, 12]

对比上面的两个例子,就知道两者的区别,map 相当于是上下运算的,而 reduce 是从左到右逐个元素进行运算。

写在之后

至此,我在上面介绍了四个函数,这些函数不仅使得代码更加的简单,而且在 Python3 中也优化了它们的性能。所以如果你喜欢的话,尽可以放心大胆的使用。

更多内容,欢迎关注公众号「Python空间」,期待和你的交流。

--结束END--

本文标题: Python 拓展之特殊函数(lambd

本文链接: https://lsjlt.com/news/180545.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python 拓展之特殊函数(lambd
    写在之前 今天给大家介绍几个比较特殊的函数,他们具有函数式编程的特点,有人将它们视为 Python 可进行 “函数式编程” 的见证,至于什么是函数式编程,不是本篇文章的重点,感兴趣的可以去了解一下。老读者可能都知道,我非常推崇 Pytho...
    99+
    2023-01-30
    函数 Python lambd
  • python特殊函数之lambda和ma
    lambda表达式返回一个函数对象map(function,sequence),把sequence中的值逐个传给function,返回一个包含函数执行结果的list例子:squares = list(map(lambda x: x**2, ...
    99+
    2023-01-31
    函数 python ma
  • Kotlin原理详析之拓展函数
    目录原理限制不能访问私有成员拓展函数不能实现多态成员函数优先级高,拓展函数不能实现重写为什么要使用Kotlin中的扩展函数总结原理 拓展函数是kotlin里一个比较常用的特性,例如我...
    99+
    2024-04-02
  • JavaScriptES6的函数拓展
    目录ES6函数拓展函数的默认参数reset参数name属性箭头函数ES6函数拓展 函数的默认参数 之前的写法: function count(x, y) {     return x...
    99+
    2024-04-02
  • 浅析python中特殊文件和特殊函数
    目录导入模块导入包特殊文件1、__init__.py文件2、.pyc与.pyo文件特殊函数1、构造函数2、析构函数3、静态函数和类函数4、以下划线开头的函数单线划:_var单末尾下划...
    99+
    2024-04-02
  • Python 拓展之迭代器
    写在之前 今天来讲讲「迭代器」的内容,其实已经拖了好多天了,感觉再不写就要忘记了。「迭代」相信对你来说已经不陌生了,我前面曾经专门用一篇文章来讲,如果你已经没有什么印象的话,就再点进去看看(零基础学习 Python 之初识迭代)。 迭代器...
    99+
    2023-01-30
    迭代 Python
  • SQL-特殊函数
    函数 结果 DECODE decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) 该函数的含义如下:IF条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THEN RETURN...
    99+
    2020-12-12
    SQL-特殊函数
  • Kotlin拓展函数怎么用
    这篇文章主要介绍了Kotlin拓展函数怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Kotlin拓展函数怎么用文章都会有所收获,下面我们一起来看看吧。原理拓展函数是kotlin里一个比较常用的特性,例如我...
    99+
    2023-06-29
  • ES6基础语法之数组拓展
    一、Array.of() 将参数中所有值作为元素形成数组: console.log(Array.of(1, 2, 3, 4)); // [1, 2, 3, 4] 参数的值可以为不同的...
    99+
    2024-04-02
  • c++特殊构造函数详解
    目录前言拷贝构造函数一、什么是拷贝构造函数二、调用时机注意浅拷贝和深拷贝总结前言 众所周知,构造函数的作用是类在创建对象时的初始化,而拷贝构造函数则是构造函数里的一种特殊构造。 拷贝...
    99+
    2024-04-02
  • Shell编程之特殊变量和扩展变量详解
    特殊变量 在Shell中的特殊变量主要分别两种位置参数变量、状态变量两种。 位置参数变量 Shell中的位置参数变量主要是指0、0、1、$#等,主要用于从命令行、函数或脚本执行等地方传递参数。详细说明如下所示: ...
    99+
    2022-06-04
    shell特殊变量 shell变量 shell定义变量
  • Sql Server Sum函数的特殊使用
    利用Sql Server的Sum函数开窗得到累计值 具体详解https://www.cnblogs.com/zhaoshujie/p/9594676.html   个人示例例子  DECLARE @Sale Table (--年...
    99+
    2020-03-27
    Sql Server Sum函数的特殊使用
  • c++特殊构造函数怎么用
    这篇文章给大家分享的是有关c++特殊构造函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。拷贝构造函数拷贝构造:是C++特有的,他是一种特殊的构造函数用于基于一个同一个类的的第一个对象去创造和初始化的一个对...
    99+
    2023-06-22
  • JavaScript中的特殊函数怎么使用
    这篇文章主要介绍“JavaScript中的特殊函数怎么使用”,在日常操作中,相信很多人在JavaScript中的特殊函数怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript中的特殊函数怎...
    99+
    2023-07-02
  • MySQL特殊函数使用技巧梳理
    目录1. group_concat2. char_length3.locate4.replace5.now6.insert into … select7.in...
    99+
    2023-05-20
    mysql特殊函数 mysql特有函数 mysql特有语句
  • ES6新特性之函数扩展的示例分析
    这篇文章主要介绍ES6新特性之函数扩展的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:一、函数参数默认值1. ES6允许为函数的参数设置默认值,即直接写在参数定义的...
    99+
    2024-04-02
  • python中逻辑运算符“+”的特殊之处
      num = num + num 与 num += num 的区别(其他语言中这两种方式可以划等号,但是python中不可以):   num = num + num: num = [100] def test(num): nu...
    99+
    2023-01-30
    之处 运算符 逻辑
  • python类之特殊属性和魔术方法
    1 总述 属性 含义 _name_ 类,函数,方法等的名字 _module_ 类定义所现在的模块名 _class_ 对象或类所属的类 _bases_ 类的基类的元素,顺序为他们在基类列表中出现的顺序 _doc...
    99+
    2023-01-31
    魔术 属性 方法
  • php转义特殊字符函数是什么
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php中的转义特殊字符函数1、addslashesaddslashes对SQL语句中的特殊字符进行转义操作,包括(‘), (“), (), (NUL)四个字符,此函数在...
    99+
    2020-02-20
    php 转义字符
  • php转义特殊字符函数有哪些
    这篇文章主要介绍“php转义特殊字符函数有哪些”,在日常操作中,相信很多人在php转义特殊字符函数有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php转义特殊字符函数有哪些”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作