前言

木子本人搞起Python已有多年,一直觉得什么都会,但是有时候实操起来,才觉得很多底层基础的知识都没有彻底的灵活掌握。

另外,网上关于Python基础知识的各种普及已有太多太多。

附上相关大神的技术栈:

本人的写作水平有限,肯定比不上各种大佬的技术文章。博客只是对于自身知识的总结,提炼,当然如果能够帮助到各位看客,木子本人也非常高兴。


简述

闲话不多说,本篇博客,主要针对Python的

匿名函数 lambda

高阶函数 map reduce filter

推导式 list set dict

三个方面来汇总。


匿名函数

当我们在传入函数时,有些时候,不需要显式地定义函数,那么此时匿名函数就灰常方便了。

Python官方文档--lambda

示例:

lambda a, b: a + b实际上就是下面代码的简写

def func(a, b):
return a + b

对于匿名函数而言,不用写return返回值就是该表达式的结果

因为没有函数名字,不必担心函数名的冲突,此外,匿名函数也是一个函数对象,可以把匿名函数赋值给一个变量,再利用变量来调用该函数:


>>> f = lambda x: x * x
>>> f
<function <lambda> at 0x10453d7d0>
>>> f(6)
36

那么在一些简单的情况下,尽情的使用匿名函数吧。


高阶函数

何为高阶函数?

能接受函数做参数的函数

因Python中一切皆对象,变量名可以指向函数,而函数的参数可以接收变量,那么一个函数就可以接收另外一个函数作为参数。这就是传说中的高阶函数

map()

老规矩,官方文档走一波:

Python官方文档--map()

针对map(function, iterable, ...)函数,可结合lambda使用,示例如下:

>>> list(map(lambda x:x*x, [1,2,3,4,5]))
>>> [1, 4, 9, 16, 25]

注:Python3中,需要使用list()将map函数返回值转化为列表,若无list(),则结果为:


>>> map(lambda x:x*x, [1,2,3,4,5])
>>> <map at 0x20b225167f0>

此外,map()函数不改变原有的 list,而是返回一个新的 list

reduce()

为便于掌握,对比,在总结完map()函数后,我们来看下reduce()函数。

Python官方文档--reduce()

那么从官方文档的介绍来看:

reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。

示例如下:

from functools import reduce

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

对结果演示即:((((1+2)+3)+4)+5) = 15

注:

reduce()函数可接收第三个参数,作为函数的起始值

filter()

filter()函数顾名思义,进行过滤判断。

Python官方文档--filter()

对于filter()函数来说,其接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False。

示例:过滤出1~100中平方根是整数的数:

import math

def func(x):
r = int(math.sqrt(x)) # math.sqrt()计算平方根
if r * r == x:
return x >>> list(filter(func, range(1, 101)))
>>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

那么从该示例中,我们能够得出结论:

filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。


推导式

推导式在日常工作中是比较好的装逼利器,对于列表,字典,集合的操作,很多时候一行代码即可解决,如若没有,那说明内力还不够深厚,嘎嘎嘎。。。。

对于推导式而言,我们就从

列表推导式

字典推导式

集合推导式

来总结,当然也就这三种。。。

列表推导式

示例:

from random import randint

>>> [randint(1, 10) for _ in range(20)]
>>> [8, 2, 7, 9, 7, 3, 10, 10, 2, 10, 5, 9, 4, 7, 9, 2, 10, 6, 10, 7]

字典推导式

示例:

>>> {x: x * x for x in range(10) if x % 3 == 0}
>>> {0: 0, 3: 9, 6: 36, 9: 81}

集合推导式

鉴于集合具有去重效果,那么我们创建示例,来和列表推导式对比:

from random import randint

>>> {randint(1, 10) for _ in range(20)}
>>> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

很神奇有木有,目前写的只是最基本的推导式写法,在实际的工作中,可以添加各种判断,随意灵活运用。

总结

本篇博客侧重于实际工作中代码的简化,重构。若能结合实际工作需求,灵活运用,则能大大简化代码,也方便他人阅读,久而久之,自己的水平也逐渐提高。

起止一个爽字了得!!!

江湖有缘,下期再见!

Python小世界:匿名函数、高阶函数、推导式的更多相关文章

  1. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  2. (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)

    原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...

  3. 初学 Python(十二)——高阶函数

    初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...

  4. Learning Python 012 函数式编程 1 高阶函数

    Python 函数式编程 1 高阶函数 高阶函数 Q:什么是高阶函数? A:一个函数接收另一个函数作为参数,这种函数就称之为高阶函数. 简单举个例子: def add(x, y, f): return ...

  5. python学习三十四天函数高阶函数定义及用法

    python函数高阶函数是把函数当成一个变量,传递给函数作为参数,或者函数的返回值里面有函数,都称为高阶函数, 1,把函数作为参数传递 def dac(x,y): return x+y def tes ...

  6. python递归,装饰器,函数, 高阶函数

    在函数内部,可以调用其它函数,如果一个函数在内部调用自身本身,这个函数就是递归函数 递归特性:1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模比上次递归都有所减少(10-8-5等) ...

  7. python基础之常用的高阶函数

    前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. map() map函数可以把一个迭代对象转换成另一个可迭代对象,不过在pyth ...

  8. python六十四课——高阶函数练习题(二)

    总结:高阶函数以及匿名函数之间的配合使用 from functools import reduce #模块一:lambda和filter的结合使用 #lt = [1,2,3,4,5,6,7,8,9] ...

  9. Python嵌套、递归、高阶函数

    一.嵌套函数 1.嵌套函数简单的理解可以看作是在函数的内部再定义函数,实现函数的“私有”. 2.特点: <1> 函数内部可以再次定义函数. <2> 只有被调用时才会执行(外部函 ...

  10. Python全栈之路----函数----高阶函数

    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一函数作为参数,这种函数就称之为高阶函数. 只需满足以下任意一个条件,即是高阶函数: 接收一个或多个函数作为输入 def func(x, ...

随机推荐

  1. Android Weekly Notes Issue #316

    July 1st, 2018 Android Weekly Issue #316 本期内容包含教你使用Kotlin通过Annotation Processor生成代码文件, JetPack中的Andr ...

  2. Git core objects

    Git core objects Core objects in git blob object tree object commit object Git low level commands gi ...

  3. python处理txt文件的一种情况

    在txt文本中,以换行符作为标记分段处理txt文件中的内容的方法: with open(path, 'r', encoding='utf-8') as f: for line in f: if lin ...

  4. 分享知识-快乐自己:SpringBoot结合使用拦截器(判断是否用户是否已登陆)

    所有的开发之中拦截器一定是一个必须要使用的功能,利用拦截器可以更加有效的实现数据的验证处理,而且最为幸运的是在SpringBoot之中所使用的拦截器与Spring中的拦截器完全一样. 基础拦截器操作: ...

  5. python二进制数据

    一直以来对python的二进制数据搞不清楚. 一.二进制显示格式与实际存储值区别 1.二进制数据在python中以字节(bytes)类型和字节数组类型(bytearray)保存着,前者数据固定,后者不 ...

  6. PS 滤镜— —图像偏移

    clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); I=imread ...

  7. ACM学习历程—HDU 2112 HDU Today(map && spfa && 优先队列)

    Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线 ...

  8. hdu 3625 Examining the Rooms —— 第一类斯特林数

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3625 学习斯特林数:https://blog.csdn.net/qq_33229466/article/d ...

  9. java枚举类型的优势在哪里?--一个实例

    最近在做一个项目,其中涉及到一组操作,命名为: 1. "add"; 2. "logicDel" 3. "physicDel" 4. &quo ...

  10. 【250】◀▶IEW-Unit15

    Unit 15 Youth Issues 1.model1题目分析 Young people who are still at school often feel just as much stres ...