高阶函数讲解

1. 常规高阶函数

  1. 递归函数

    格式:def func_name(variable):
    '''__doc__'''#函数的说明文档
    if 条件表达式:#限制递归退出值
    pass
    return func_name(variable2)#variable2必须是通过一系列等运算后的值。
    例如:def jiecheng(n):
    if n <= 1:
    return n
    return jiecheng(n-1)*n
    print(jiecheng(5))
    >>> 120
    #递归就是函数自身调用自身,Python最大递归层数为999层。

    注:递归的三大特性:

    1. 一定要有一个结束的条件
    2. 每次进入更深一层递归时,问题规模相比上次递归应有所减少
    3. 效率不高
  2. 遍历(迭代)函数

    格式:def func_name(variable):
    for variable2 in range(1,variable):
    variable *= variable2
    return variable
    例如:def jie1(n):
    for i in range(1,n):
    n *= i
    return n
    print(jie1(5))
    >>> 120
    例如:def jie2(n):
    for i in range(n-1,0,-1):#由于顾头不顾尾,所以是n-1
    n *= i
    return n
    >>> 120
    #当range的步长为负数时,序列将end值到start值。

    注:一般迭代函数要比递归常用,主要原因就是速度快。

  3. 函数作为参数

    格式:def func_name1():
    expression
    def func_name2(func_name1):
    expression
    例如:def num1():
    print(123)
    def num2(n):
    print(1234)
    return n()
    num2(num1)
    >>> 1234
    >>> 123
    #函数1作为函数2的参数传入到函数2中,执行函数2的代码。

2. 内置高阶函数

  1. filter(过滤)

    格式:filter(function or None, iterable)
    例如:x = filter(lambda m:m > 1,[1,2,3])
    for i in x:
    print(i)
    >>> 2
    >>> 3
    #使用filter过滤时,当条件为Ture时,则返回符号条件的。需要两个参数,第一个是函数(不声明时,则直接把后面传入的参数转换为迭代器),第二个则是可迭代的对象(列表、元祖、字典和集合),返回值为迭代器。
  2. map(映射)

    格式:map(function,iterable)
    例如:x = map(lambda m:m+10,(1,2,3))
    for i in x:
    print(i)
    >>> 11
    >>> 12
    >>> 13
    #与filter类似,不同于map对第二个参数的中元素进行映射,传入到第一个参数(即函数)中进行映射,返回值仍是一个迭代器。

3. closure(闭包)

闭包是函数返回函数,多用于装饰器函数中。

格式:def func_name1(args):
def func_name2():
expression
return func_name2
例如:def outt(num):
def inn():
print('ab')
return inn
print(outt(2))
#上述的返回值为函数体inn即为闭包。

4. 装饰器

装饰器属于闭包的一种应用,主要表示符为@,装饰器的定义为:装饰器是一个高阶函数+嵌套函数,同时也是一个‘变量’。用于装饰函数,主要有两大原则,1.不能修改原代码,2.不能修改原代码的调用方式。

1. 格式:def zhuang(arg1):
'''__doc__'''#函数的说明文档
expression
return arg1()
@zhuang
def bzhuang():
'''__doc__'''#函数的说明文档
expression
例如:def zh(n1):
print(123)
return n1()
@zh
def bzh():
print('123')
print(bzh())
>>> 123
>>> '123'
#上述为最简单的装饰器,一般很少用。主要是由于装饰器在没有调用的情况下直接执行了。
2. 例如:def login(x):
def inner():
return x()
return inner
@login
def beiz():
return 'abc'
print(beiz())
>>> 'abc'
#上述装饰器为常用装饰器,在调用函数前,装饰器是没有执行完,只返回一个函数体。
3. 例如:def login(arg):#符号@即调用该函数
def outter(func):#由于装饰器需要一个参数,因此这里调用装饰器也需要一个参数
def inner(*args,**kwargs):#这里直接调用it和xinxi两个函数
if arg == 'abc':
print('arg is abc')
elif arg == '123':
print('arg is 123')
return func(*args,**kwargs)
return inner#返回该函数体即为it和xinxi两个函数体
return outter#由于装饰器调用,因此该返回的函数也将进行调用
@login(arg='abc')#装饰器直接调用
def it():
print('It')
@login(arg='123')#装饰器直接调用
def xinxi():
print('信息')
it()
xinxi()
#该实例为装饰器的终极版,即一个装饰器可以带参数。当然也可以带动态参数,具体不再详细介绍。

Python中高阶函数讲解的更多相关文章

  1. Python中高阶函数sorted()用法

    在Python中,有内置的排序方法:sorted(iterable, key, reverse). Sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序.key指定的函数 ...

  2. python中高阶函数与装饰器

    高阶函数的定义:传入参数有函数名或者返回值有内置函数名的函数. 最简单的高阶函数: def add(x, y, f):    return f(x) + f(y) add(-5, 6, abs) 常用 ...

  3. python中高阶函数学习笔记

    什么是高阶函数 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数 def fun(x, y, f): print f(x), f(y) fun ...

  4. python中高阶函数与装饰器(3)

    >>> f = lambda x: x * x>>> f<function <lambda> at 0x101c6ef28> >> ...

  5. python中高阶函数与装饰器(2)

    函数返回值为内置函数名: def sum(*args):    def sum_in():        ax = 0        for n in args:            ax = ax ...

  6. 用一个简单的例子来理解python高阶函数

    ============================ 用一个简单的例子来理解python高阶函数 ============================ 最近在用mailx发送邮件, 写法大致如 ...

  7. Python高阶函数_map/reduce/filter函数

    本篇将开始介绍python高阶函数map/reduce/filter的用法,更多内容请参考:Python学习指南 map/reduce Python内建了map()和reduce()函数. 如果你读过 ...

  8. Python高阶函数及函数柯里化

    1 Python高阶函数 接收函数为参数,或者把函数作为结果返回的函数为高阶函数. 1.1 自定义sort函数 要求:仿照内建函数sorted,自行实现一个sort函数.内建函数sorted函数是返回 ...

  9. python——高阶函数:高阶函数

    python高阶函数 00初识高阶函数 一等公民 函数在python中是一等公民(First-Class Object),同样和变量一样,函数也是对象,只不过是可调用的对象,所以函数也可以作为一个普通 ...

随机推荐

  1. 静态链表的C实现(基于数据结构 严蔚敏)

    静态链表是利用一维数组实现逻辑上的单链表结构,结点的逻辑上相邻但物理位置上不一定相邻,因为内存分配上是一次性的,故称为静态. 特点: 预先需要一片连续的存储空间: 非随机存取: 无现成的"内 ...

  2. Mego开发文档 - 保存关系数据

    保存关系数据 由于没有对象的更改跟踪,因此关系的操作需要开发者明确指定,在成功执行后Mego会影响到相应的关系属性中. 添加关系 在以下示例中如果成功执行则source的Customer属性会变为ta ...

  3. 安装 go 语言环境

    操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 安装go 这里直接安装二进制,其它方式请自行搜索. 1.下载并安装go 命令如下: ? 1 2 3 wget https://st ...

  4. GIT入门笔记(11)- 多种撤销修改场景和对策--实战练习

    1.检查发现目前没有变化$ git statusOn branch masternothing to commit, working tree clean $ cat lsq.txt2222 2.修改 ...

  5. docker实践4

    我的docker学习笔记4-守护式容器   $docker run -i -t ubuntu /bin/bash $ctrl-p 或 ctrl-q # 转到后台   $docker ps $docke ...

  6. Tesseract-OCR4.0识别中文与训练字库实例

    关于中文的识别,效果比较好而且开源的应该就是Tesseract-OCR了,所以自己亲身试用一下,分享到博客让有同样兴趣的人少走弯路. 文中所用到的身份证图片资源是百度找的,如有侵权可联系我删除. 一. ...

  7. hdu1443 Joseph---约瑟夫环

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1443 题目大意: 一共有2k个人,分别为k个好人和k个坏人,现在我们需要每隔m个人把坏人挑出来,但是 ...

  8. C# QQ & 163 邮件发送

    这篇文章的目的并不是说明如果进行右键的发送,因为在.net 坝坝的怀抱下邮件发送的功能实现并不会很难,当然邮件发送的代码,还是会贴上的,昨天在写一个邮件发送的功能,我直接找到了原来的代码,想着直接就可 ...

  9. Vue项目模板--和--webpack自动化构建工具的---项目打包压缩使用

    [首先安装node.js]: 1. 从node.js官网下载并安装node,安装过程很简单. 2. npm 版本需要大于 3.0,如果低于此版本需要升级它: # 查看版本 npm -v2.3.0 #升 ...

  10. 新购阿里云服务器ECS创建之后无法ssh连接的问题处理

    作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 问题描述 由于原服务器将要到期,因此趁着阿里云搞促销活动重新购买了一 ...