lambda表达式(匿名函数表达式)

作用:创建一个匿名函数对象。同def类似,但不提供函数名。

语法:lambda [形参1,形参2,...] : 表达式

语法说明

  • lambda 只是一个表达式,它用来创建一个函数对象。
  • 当lambda表达式调用时,先执行冒号后的表达式,并返回表达式的结果的引用。
  • lambda 表达式创建的函数只能包含一条表达式。
  • lambda 表达式比函数简单,且可以随时创建和销毁,有利于减少程序的偶合度。

把lambda函数赋值给一个变量

  1. # 定义一个加法函数,并把值赋给变量myadd,就可以执行myadd(5, 6);
  2. myadd = lambda x, y: x+y
  3. print myadd(5, 6) # 结果:11

把lambda函数赋值给其他函数

  1. import time, datetime
    time.sleep = lambda x: None # time 库的 sleep 函数不会执行原功能;

  2. starttime = datetime.datetime.now()
  3. time.sleep(3)
  4. endtime = datetime.datetime.now()
  5. print endtime-starttime # 结果:0:00:00

把lambda函数作为其他函数的返回值

  1. def add(n):
  2. return lambda x: x+n
  3. myadd = add(5)
  4. print myadd(15) # 结果:20
  5.  
  6. def add(x):
  7. def inner(y):
  8. return x+y
  9. return inner
  10. myadd = add(5)
  11. print myadd(15) # 结果:20

把lambda函数做参数传给其它函数(map, filter, reduce)

  1. # 利用map映射函数输出序列加工后的新序列。
  2. print map(lambda x: x ** 2, range(1, 3)) # 结果:[1, 4] map返回类型:<type 'list'>
  3. def arr(x):
  4. return x ** 2
  5. print map(arr, range(1, 3)) # 结果:[1, 4] map返回类型:<type 'list'>
  6.  
  7. # 利用filter过滤函数输出0-9的奇数;返回False时将此数据丢弃,返回True,则保留此数据
  8. print filter(lambda x: x % 2, range(10)) # 结果:[1, 3, 5, 7, 9] filter返回类型:<type 'list'>
  9. def odd(x):
  10. return x % 2
  11. print filter(odd, range(10)) # 结果:[1, 3, 5, 7, 9] filter返回类型:<type 'list'>

eval函数和exec函数

高阶函数

一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。

  1. # 参数为函数,函数bar作为foo的参数传入,函数foo()为高阶函数。
  2. def bar():
  3. print("in the bar..")
  4. def foo(func):
  5. func()
  6. print("in the foo..")
  7. foo(bar)
  8.  
  9. # 返回值为函数,函数bar作为foo的返回值,函数foo()为高阶函数。
  10. def bar():
  11. print("in the bar..")
  12. def foo(func):
  13. print("in the foo..")
  14. return func
  15. res=foo(bar)
  16. res()

注:函数名(例如bar 、foo)-->其为该函数的内存地址;函数名+括号(例如 bar()、foo() )-->调用该函数。

python内置的高阶函数:map、filter、sorted、reduce等

map函数

map函数接收的是两个参数,一个函数,一个序列,其功能是将序列中的值处理再依次返回至列表内。其返回值为一个迭代器对象。

  1. def power(x):
  2. return x ** 2
  3. # map函数模拟,功能与map函数一样
  4. def map_test(func,iter):
  5. arr=[]
  6. for i in iter:
  7. ret=func(i)
  8. arr.append(ret)
  9. return arr.__iter__() # 将列表转为迭代器对象

  10. # map_test函数
  11. print list(map_test(power,range(1,6))) # 结果:[1, 4, 9, 16, 25]
  12. # map函数
  13. print list(map(power,range(1,6))) # 结果:[1, 4, 9, 16, 25]
  14. print list(map(lambda x: x ** 2, range(1,6))) # 结果:[1, 4, 9, 16, 25]
  15.  
  16. # map函数的参数1也可以是匿名函数、参数2也可以是字符串
  17. print list(map_test(lambda x:x.upper(),"hello")) # 结果:['H', 'E', 'L', 'L', 'O']
  18. print list(map(lambda x:x.upper(),"hello")) # 结果:['H', 'E', 'L', 'L', 'O']
  19.  
  20. # map函数的参数2也可以是多个可迭代对象
  21. def power2(x, y):
  22. return x ** y
  23. print list(map(power2,range(1,7),range(6,0,-1))) # 结果:[1, 32, 81, 64, 25, 6]

filter函数

filter函数也是接收一个函数和一个序列的高阶函数,其主要功能是筛选过滤序列中的数据。其返回值也是迭代器对象。函数func将对iterable中的每个元素进行求值,返回False时将此数据丢弃,返回True,则保留此数据。

  1. names=["Hello","hello","python"]
  2. # filter函数机制,功能与filter函数一样
  3. def filter_test(func,iter):
  4. arr = []
  5. for i in iter:
  6. if func(i): # 传入的func函数其结果必须为bool值,才有意义
  7. arr.append(i)
  8. return arr
  9.  
  10. #filter_test函数
  11. print filter_test(lambda x:x.islower(),names) # 结果:['hello', 'python']
  12. #filter函数
  13. print filter(lambda x:x.islower(),names) # 结果:['hello', 'python']
  14.  
  15. def mynum(x):
  16. return x % 2 == 0
  17. list = filter(mynum,range(10))
  18. print list # 结果:[0, 2, 4, 6, 8]

sorted函数

作用:将原可迭代对象的数据进行排序,生成排序后的列表
格式:sorted(iterable, key = None, reverse = False)
说明:iterable:可迭代对象。key:绑定的函数,用来提供一个排序的依据。reverse 用来设置是否降序排序。默认False,从小到大。

  1. # 按照名字进行排序,
  2. names = [{"score":90, 'age': 99, 'name': 'lisi'},
  3. {"score":80, 'age': 45, 'name': 'wangwu'},
  4. {"score":60, 'age': 42, 'name': 'ali'},
  5. {"score":30, 'age': 67, 'name': 'zhaofang'}]
  6.  
  7. def paixu(dict):
  8. return dict["name"]
  9. result = sorted(names,key=paixu) # 方法一
  10. result = sorted(names,key=lambda d:d["name"]) # 方法二
  11. # sorted函数会把names里的值一一取出来,作为key后面的排序函数的参数。

reduce函数

reduce函数也是一个参数为函数,一个为可迭代对象的高阶函数,其返回值为一个值而不是迭代器对象,故其常用与叠加、叠乘等。
reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把参数计算结果继续和序列的下一个元素做累积计算,其效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)。比方说对一个序列求和,就可以用reduce实现。

  1. #reduce函数不是内置函数,而是在模块functools中的函数,故需要导入
  2. from functools import reduce
  3.  
  4. nums=[1,2,3,4,5,6]
  5. # reduce函数的机制
  6. def reduce_test(func,array,ini=None): #ini作为基数
  7. if ini == None:
  8. ret =array.pop(0)
  9. else:
  10. ret=ini
  11. for i in array:
  12. ret=func(ret,i)
  13. return ret
  14. # reduce_test函数,叠乘
  15. print reduce_test(lambda x,y:x*y,nums,100) # 结果:72000
  16. # reduce函数,叠乘
  17. print reduce(lambda x,y:x*y,nums,100) # 结果:72000
  18.  
  19. def add(x, y):
  20. return x + y
  21. print reduce(add, [1, 3, 5, 7, 9]) # 结果:25
  22. print reduce(add, [1, 3, 5, 7, 9], 10) # 结果:35
  23.  
  24. def func(x, y):
  25. return x * y
  26. print reduce(func, [1, 3, 5]) # 结果:15
  27. print reduce(func, [1, 3], 5) # 结果:15
  28. print reduce(lambda x,y:x*y,range(1,3),5) # 结果:10

https://www.cnblogs.com/littlefivebolg/category/1223800.html

Python—函数进阶篇的更多相关文章

  1. 第六篇:Python函数进阶篇

    在了解完了 Python函数基础篇之后,本篇的存在其实是为了整合知识,由于该篇的知识是否杂乱,故大家可以通过点开点连接直接进入其详细介绍,该篇主要大致的介绍一下几个知识点:  一.Python的迭代器 ...

  2. Python开发【第七篇】:面向对象 和 python面向对象进阶篇(下)

    Python开发[第七篇]:面向对象   详见:<Python之路[第五篇]:面向对象及相关> python 面向对象(进阶篇)   上一篇<Python 面向对象(初级篇)> ...

  3. python函数进阶(函数参数、返回值、递归函数)

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...

  4. [python 函数学习篇]默认参数

    python函数: 默认参数: retries= 这种形式 def ask_ok(prompt, retries=, complaint='Yes or no, please!'): while Tr ...

  5. Python之函数——进阶篇

    嵌套函数 ---函数内部可以再次定义函数 ---函数若想执行,必须被调用 注意,下例中,执行结果为什么? age = 19 def func1(): print(age) def func2(): p ...

  6. Golang简单入门教程——函数进阶篇

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第八篇,我们来聊聊golang当中的函数. 我们在之前的时候已经介绍过了函数的基本用法,知道了怎么样设计或者是定义一 ...

  7. Python 面向对象 (进阶篇)

    <Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可 ...

  8. 第五篇:Python函数基础篇

    本篇介绍什么是函数.函数的特性.函数的定义.函数的调用.以及函数的参数.以及关于全局变量和局部变量的使用等等. 一.什么是函数: 函数是最基本的一种代码抽象方式,为了实现某种特定的功能而组织的带名字的 ...

  9. Python函数进阶:闭包、装饰器、生成器、协程

    返回目录 本篇索引 (1)闭包 (2)装饰器 (3)生成器 (4)协程 (1)闭包 闭包(closure)是很多现代编程语言都有的特点,像C++.Java.JavaScript等都实现或部分实现了闭包 ...

随机推荐

  1. 使用NodeJS模块-NodeJS官方提供的核心模块

    除了使用自己写的本地模块以外,NodeJS可以使用另外两种类型的模块,分别是NodeJS官方提供的核心模块和第三方提供的模块 NodeJS官方提供的核心模块 NodeJS平台自带的一套基本的功能模块, ...

  2. easyUI+servlet+mysql项目总结

    项目介绍 利用easyUI做前端框架,进行数据展示和用户数据收集 使用servlet做后端的控制层,并调用业务逻辑组件的业务逻辑方法,处理用户请求,根据不同处理结果返回不同的结果到前端 mysql进行 ...

  3. [Linux] 安装grafana并且添加influxdb监控

    安装grafana,官网提供了ubuntu的安装包,直接进行安装 wget https://dl.grafana.com/oss/release/grafana_6.5.1_amd64.deb dpk ...

  4. linux的路由功能实现

    参考URL: https://blog.csdn.net/chengqiuming/article/details/80140768 一,启用Linux的路由转发功能. 二,新建veth pair 三 ...

  5. flask框架--设置配置文件的几种方式 与Flask两种配置路由的方式

    设置配置文件的几种方式 ==========方式一:============ app.config['SESSION_COOKIE_NAME'] = 'session_lvning' #这种方式要把所 ...

  6. python直接赋值、浅拷贝、深拷贝的区别

    一:直接赋值 赋值,就是对象的引用,给对象起别名. i = 8j = iprint("值是:",i, "地址:",id(i))print("值是:&q ...

  7. ubuntu下使用redshift开启护眼模式

    前面提到flux这东西在一些机器上并不能work,而且也找到了一些关于他不能work的线索(戳这里看原因).根据这些线索我们发现用flux不行了,得换用redshift,那好吧,我们就来装redshi ...

  8. HttpClient基本功能的使用 Get方式

    一.GET 方法     使用 HttpClient 需要以下 6 个步骤:     1. 创建 HttpClient 的实例     2. 创建某种连接方法的实例,在这里是 GetMethod.在 ...

  9. Javascript是如何工作的?

    作为一个前端开发者或者全栈开发者,一定非常熟练Javascript.程序员社区Stack Overflow的调查结果显示,Javascript是最常用的编程语言,连续多年排在第一名.发明Javascr ...

  10. Java类加载机制以及双亲委派模型

    一.Java类加载机制 1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允 ...