一.匿名函数

1.定义:定义函数的时候不需要定义函数名

2.具体例子:

#普通函数

def add(x,y):

    return x + y

#匿名函数

lambda x,y: x + y

调用匿名函数:

f = lambda x,y: x + y    #赋值后可以调用

print(f(1,2)

lambda中(也就是:后面)只能进行简单的表达式操作,不能进行赋值操作。

二. 三元表达式

格式为:条件为真时返回的结果 if 条件判断 else 条件为假时返回的结果

x = 2

y = 1

r = x if x > y else y

print(r)

#

三元表达式在lambda中运用比较多。

三.map类

1.定义:map(函数,序列),把序列中所有值依次传到函数中并依次接受返回结果组成一个list。

其实是一个函数的映射。

2.求平方:

list_x = [1,2,3,4,5,6,7,8]

def square(x):

    return x * x

r = map(square,list_x)

print(list(r))

#[1, 4, 9, 16, 25, 36, 49, 64]

四.map与lambda

将map和lambda函数结合:

1

list_x = [1,2,3,4,5,6,7,8]

r = map(lambda x: x * x,list_x)

print(list(r)

2 接受多个参数:

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)

print(list(r))

注意:若个数不相等,不会报错,但只能计算到最少的那位

五.reduce

1.

2. reduce运算的规则:做连续的计算,连续的调用lambda表达式。

   reduce下的函数一定要有两个参数。

3.例子:

from functools import reduce

list_x = [1,2,3,4,5,6,7,8]

r = reduce(lambda x,y:x + y,list_x)

print(r)

#

运算过程:初始取前两位,之后将计算结果作为x传进去继续顺序取:

((((((1 + 2)+3) + 4)+ 5)+6)+7)+8

4.注意点:

  • 继续做什么操作是lambda确定的,不仅只能够相加。
  • 最后一位可以设定初始值,在第一次计算中就进行计算了:

eg:r = reduce(lambda x,y:x + y,list_x,10)

六. filter

1.filter可以过滤掉不符合规则的数据。

2.例子:

剔除数据为0的元素:

list_x = [1,0,0,1,0,1,1,0,1]

r = filter(lambda x: True if x == 1 else False,list_x)

print(list(r))

#[1, 1, 1, 1, 1]

简化为:

list_x = [1,0,0,1,0,1,1,0,1]

r = filter(lambda x: x ,list_x)

print(list(r))

#[1, 1, 1, 1, 1]

filter返回值的要是真和假才能完成过滤

七.命令式编程vs函数式编程

  命令式编程涉及到 def  if else for

  函数式编程涉及到 map reduce filter lambda(算子)

八. 装饰器 一

import time

def f1():

    print(time.time())

    print('This is a function')

f1()

#1532404967.3804688    #Unix时间戳

 This is a function

如果很多的函数都要获取时间的功能:

import time

def f1():

    print('This is a function')

def f2():

    print('This is a function')

def print_current_time(func):

    print(time.time())

    func()

print_current_time(f1)

print_current_time(f2)

这种需求变更方案的缺点:打印时间的需求是属于每个函数本身的,并不是新增加的,并没有体现函数本身的特性。

这就是装饰器所要解决的问题。

装饰器 二

编写装饰器:

import time

def decorator(func):

    def wrapper():

        print(time.time())

        func()

    return wrapper

def f1():

    print('This is a function')

f = decorator(f1)    #f得到了return的wrapper

f()

装饰器 三

语法塘:

import time

def decorator(func):
def wrapper():         print(time.time())         func()     return wrapper @decorator    #@符号 def f1():     print('This is a function') f1()

没有改变调用的逻辑也没有改变函数编码。是装饰器的意义所在。

@decorator相当于对f1()装饰。

装饰器 四

1.带参函数的装饰器:

import time

def decorator(func):

    def wrapper(func_name):

        print(time.time())

        func(func_name)

    return wrapper

@decorator

def f1(func_name):

    print('This is a function named' + func_name)

f1('test_func')

2.若多个函数接受不同数量的参数:

import time

def decorator(func):

    def wrapper(*args):

        print(time.time())

        func(*args)

    return wrapper

@decorator

def f1(func_name):

    print('This is a function named' + func_name)

@decorator

def f2(func_name1,func_name2):

    print('This is a function named'+func_name1 )
  print('This is a function named'+ func_name2) f1('test_func') f2('test_func1','test_func2')    #可以支持不同参数个数的函数

装饰器 五

1.*args不支持**关键字参数

支持关键字参数:

import time

def decorator(func):

    def wrapper(*args,**kw):    #加入**kw,较为完整

        print(time.time())

        func(*args,**kw)

    return wrapper

@decorator

def f1(func_name):

    print('This is a function named' + func_name)

@decorator

def f2(func_name1,func_name2):

    print(func_name1 + func_name2)

@decorator

def f3(func_name1,func_name2,**kw):

    print(func_name1 + func_name2)

    print(kw)

f1('test_func')

f2('','')

f3('','',a = 1, b = 2,c = '')

#1532408656.565761

#This is a function namedtest_func

#1532408656.5667255

#

#1532408656.5677273

#

#{'a': 1, 'b': 2, 'c': '123'}

2.

def decorator(func):

    def wrapper(*args,**kw):    #加入**kw,较为完整

        print(time.time())

        func(*args,**kw)

    return wrapper

func(*args,**kw)这个形式,无论什么方式都可以调用。

装饰器 六

如果想对某个封装单元修改,可以加上装饰器。

不需要破坏代码实现,易于代码复用。

一个函数能够有多个装饰器。

需要验证身份的函数上加上专门的装饰器之类的用途。

												

Python3(十) 函数式编程: 匿名函数、高阶函数、装饰器的更多相关文章

  1. Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍

    参考: 函数式编程 高阶函数 Note A.函数式编程(Functional Programming)介绍 1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任 ...

  2. day03 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...

  3. Python---12函数式编程------12.1高阶函数

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

  4. Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数

    文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() ...

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

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

  6. [Python3] 034 函数式编程 匿名函数

    目录 函数式编程 Functional Programming 1. 简介 2. 函数 3. 匿名函数 3.1 lambda 表达式也称"匿名函数" 3.2 lambda 表达式的 ...

  7. 函数式编程与React高阶组件

    相信不少看过一些框架或者是类库的人都有印象,一个函数叫什么creator或者是什么什么createToFuntion,总是接收一个函数,来返回另一个函数.这是一个高阶函数,它可以接收函数可以当参数,也 ...

  8. Python 编程基础之高阶函数篇(一)

      高阶函数:能接受函数作为参数的函数. 如: f=abs def   add(x,y,f): return f(x)+f(y) 如果我们用:add(-5,9,f)来调用该高阶函数,则返回结果为:14 ...

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

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

随机推荐

  1. Java类成员之属性

    属性含义:对应类中的成员变量. 语法格式:修饰符 数据类型 属性名 = 初始化值; 1.修饰符常用的有权限修饰符(private.default.protected.public) 以及其他修饰符(s ...

  2. 如何在ArcGIS中恢复注记文字

    文字标注是地图上一种特殊的视觉元素,可通过文字表达图形符号难以说明的地图内容,它与图形符号结合在一起存在于地图上,是关乎地图构图美的关键因素之一. MapGIS软件下子图对象和注释对象统统保存在点文件 ...

  3. 使用docker增加部署速度的一次实践

    问题: 公司给我们分配的服务器到期后不付费了,换成新服务商的服务器了.也就是说我们之前的环境需要重新搭建一次.光项目就50多个(微服务40+,其他服务不到10个),需要重新部署. 之前部署项目时,需要 ...

  4. CTO说|非容器化应用怎么玩多云?Kubernetes不管我们管啊

    Kubernetes已经成为容器编排系统的事实标准,是现在主流的跨云容器化应用操作系统. 但是,Kubernetes的目标并不是容器本身,而是承载其上的应用,本质上是为了解决(容器化)应用上云这个难题 ...

  5. 阿里开源服务发现组件 Nacos快速入门

    最近几年随着云计算和微服务不断的发展,各大云厂商也都看好了微服务解决方案这个市场,纷纷推出了自己针对微服务上云架构的解决方案,并且诞生了云原生,Cloud Native的概念. 云原生是一种专门针对云 ...

  6. Git创建远程分支并提交代码到远程分支

    1.可以在VS中新建分支 2.可以通过git branch -r 命令查看远端库的分支情况 这些红色都是远程的分支 3.从已有的分支创建新的分支(如从master分支),创建一个dev分支 (不用vs ...

  7. SpringCloud之Eureka(注册中心集群篇)(三)

    一:集群环境搭建 第一步:我们新建两个注册中心工程一个叫eureka_register_service_master.另外一个叫eureka_register_service_backup eurek ...

  8. python 进程Queue

    1.作用:进程之间的数据交互 2.常用方法 """ 对象.put() 作用:放入队列一个数据 对象.get() 作用:取队列一个数据,若队列没有值,则阻塞 对象.empt ...

  9. airtest启用本地python环境的方法

    实现目标,air如果想引用第三方python库,则需要在本地python欢迎执行运行 1.打开设置,红色箭头处,选择本地python路径 2.安装air的两个核心库airtest和pocoui 安装方 ...

  10. CSS-12-盒子模型

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...