内容简介:lambda用lambda标示调用lambda 复制给变量
lambda
# 1.parameter_list 参数列表 # 2.expression 函数体,只能是有一些简单的,注意不是代码块,比如不能写赋值语句 # 3.不需要return lambda parameter_list: expression 复制代码
def add(x,y): return x+y; 复制代码
用lambda标示
lambda x,y: x+y 复制代码
调用lambda 复制给变量
f = lambda x,y: x+y print(f(1,2)) 复制代码
三元表达式
# x,y x大于y x 否则 y x > y ? x : y # 条件为真时返回的结果 if 条件判断 else 条件为假时的返回结果 r = x if x > y else y 复制代码
map 内置类
将原来集合中的每一个集合的元素,都通过函数映射到新的集合里面来
假设有很多个抛物线的点,已知每个点的x坐标,y坐标需要用平方函数求出
list_x = [1,2,3,4,5,6,7,8] def square(x): return x*x 复制代码
循环方式解决
for x in list_x: square(x) 复制代码
map方式解决
r = map(square,list_x) print(list(r)) # 输出:[1, 4, 9, 16, 25, 36, 49, 64] 复制代码
map结合lambda表达式
r = map(lambda x:x*x,list_x) 复制代码
多参数的lambda表达式
list_x = [1,2,3,4,5,6,7,8] list_y = [1,2,3,4,5,6,7,8] # 可传入多个参数列表,返回的结果元素个数与参数列表集合里元素数较小的个数 r = map(lambda x,y:x*x+y,list_x,list_y) 复制代码
reduce
使用
from functools import reduce 复制代码
运算原理:连续调用lambda表达式, # 第一次运行,取参数列表的前2个元素(2为lambda参数个数) # 第二次运行,取上一次运算结果和下一个元素 r = reduce(lambda x,y:x+y,list_x) print(list(r)) # 输出 36 # 注意,10是初始值,不是最后运算 r = reduce(lambda x,y:x+y,list_x,10) print(list(r)) # 输出 46 复制代码
filter
过滤掉不符合规则的元素
# 要求传入函数必须返回能够代表真和假的值(True/False)(1/0) r = filter(lambda x: True if x==1 else False,list_x) print(list(r)) # 输出[1, 1, 1] 复制代码
函数式编程与命令式编程
命令式编程:
- def 方法定义
- if else 流程控制
- for 循环
函数式编程:
- map reduce filter
- lambda 算子
一定程度下lambda可以替换命令式编程的函数,reduce可以替换命令式编程的循环
装饰器
类似于C#的特性,java的注解 体现了AOP的编程思想
def f1(): print('This is a function') # 现在需要在方法上添加打印时间 ## 方案1:不推荐,没有体现出对原来函数的扩展,调用也变化了) def print_current_time(func): print(time.time()) func() print_current_time(f1) ## 方案2:通过wrapper外面分装了一层decorator,实现不改变原有函数实现过程,但是仍然改变了方法调用,不推荐 # 装饰器 def decorator(func): # 包装 def wrapper(): print(time.time()) func() return wrapper f = decorator(f1) f() ## 方案3:语法糖 @符号,可以不改变方法调用,推荐! @decorator def f1(): print('This is a function') f1() 复制代码
带参数的方法的装饰器的使用
def f1(name): print('This is a function named '+name) ## 方案1:不推荐,无法为多个函数提供增强支持 def decorator(func): # 包装 def wrapper(func_name): print(time.time()) func(func_name) return wrapper ## 方案2:可变参数列表,不支持关键字参数 def decorator(func): # 包装 def wrapper(*args): print(time.time()) func(*args) return wrapper ## 方案3:推荐 @decorator def f2(func_name1,func_name2,**kw): print('This is a function named '+func_name1) print('This is a function named '+func_name2) print(kw) def decorator(func): # 包装 args 参数,kw key word def wrapper(*args,**kw): print(time.time()) func(*args, **kw) return wrapper 复制代码
小技巧
# 可以处理任何参数列表 def fun1(*args,**kw): pass 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。