博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python函数式编程之返回函数、匿名函数、装饰器、偏函数学习
阅读量:5132 次
发布时间:2019-06-13

本文共 1989 字,大约阅读时间需要 6 分钟。


python函数式编程之返回函数

高阶函数处理可以接受函数作为参数外,还可以把函数作为结果值返回。

  • 函数作为返回值

    def laxy_sum(*args):      def sum():          ax = 0;          for n in args:              ax = ax + n;          return ax;      return sum;  print(laxy_sum(1, 3, 5, 7));  # 
    .sum at 0x000001F2E3272F28>返回一个函数而不是一个值

    在这个函数中,内部函数sum可以引用外部函数laxy_sum的参数和局部变量,当外部函数返回函数sum时,相关参数和变量都保存在返回的函数中,这种情况称为“闭包”个人觉得和JavaScript的闭包很相似,这种程序结构拥有极大的威胁。

    当我们调用lazy_sum时,每次调用都会返回新的函数,即使传入相同的参数。

  • 闭包

    当一个函数返回了一个函数后,其内部的局部变量还被新函数引用。返回的函数并没有立即执行,而是直到调用了外部函数才执行

python函数式编程之匿名函数

当我们在传入函数时,有时候不需要显式的定义函数,而是直接传入匿名函数。

匿名函数就是没有函数名的函数,python用关键字lambda表示匿名函数,冒号前面的x表示函数的参数

#匿名函数p = list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6]));print(p);# [1, 4, 9, 16, 25, 36]

匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

python函数式编程之装饰器

由于函数也是一个对象,函数对象也可以赋值给变量,所以我们可以通过变量也能调用函数。

def now():    print('2017-11-22');    f = now;print(f());# 2017-11-22

函数对象有一个属性__name__属性,可以拿到函数的名字:像上面的例子就可以用 f.__name__取到函数的名字now

在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。如,在函数now调用前后自动打印日志,但又不希望修改now()函数的定义。装饰器本质上是一个干返回函数的高阶函数。

def log(func):    def wrapper(*args, **kw):        print('call %s():' % func.__name__);        return func(*args, **kw);    return wrapper;@logdef now():    print('2017-11-22');print(now());# call now():# 2017-11-22

Python的@语法后续

python函数式编程之偏函数

  • 简单理解

    如int()函数可以把字符串转换成整数形式:

    print(int("1234"));#字符串转换成整数

    int函数还提供了base参数,用来把字符串转换成N进制的数,默认是10.

    print(int("12345", base=8));

    但是当我们要进行很多的值转换的时候,一个个传入函数的话,就会很低效,那么我们就可以编写一个这样的函数,让他能实现我们的想法。

    def int2(x, base=2):      return int(x, base)  print(int2("100001"));#33  print(int2("1101110"));#110

    向上面这样我们就不用多次输入int(x, base=n),python的functools.partial就帮我们创建了一个偏函数,不需要我们编写函数int2,可以直接创建一个int2函数:

    #偏函数  import functools;  int2 = functools.partial(int, base=2);  print(int2("11101"));#29

    所以,functools.partial的作用就是,把一个函数的某些参数设置默认值,返回个新的函数,调用这个新函数会更简单。但也可以传入其他的值,如:int2("10010", base=10);

  • 总结

    当我们函数参数个数很多,需要简化时,我们可以使用python的functools.partial来创建一个偏函数来固定一些参数,使得我们在使用新函数的时候更加方便。

转载于:https://www.cnblogs.com/yehui-mmd/p/7886767.html

你可能感兴趣的文章
Android Bitmap 和 Canvas详解
查看>>
最大权闭合子图
查看>>
oracle 创建暂时表
查看>>
201421410014蒋佳奇
查看>>
导入导出数据库和导入导出数据库表
查看>>
linux下操作mysql
查看>>
【03月04日】A股滚动市盈率PE历史新低排名
查看>>
Xcode5和ObjC新特性
查看>>
jvm slot复用
查看>>
高并发系统数据库设计
查看>>
LibSVM for Python 使用
查看>>
入坑的开始~O(∩_∩)O~
查看>>
Centos 7.0 安装Mono 3.4 和 Jexus 5.6
查看>>
Windows 7 上安装Visual Studio 2015 失败解决方案
查看>>
iOS按钮长按
查看>>
Shell流程控制
查看>>
CSS属性值currentColor
查看>>
[Leetcode|SQL] Combine Two Tables
查看>>
《DSP using MATLAB》Problem 7.37
查看>>
ROS lesson 1
查看>>