06 函数

作者: leacoder | 来源:发表于2019-07-03 00:06 被阅读0次

目录链接:https://www.jianshu.com/p/e1e201bea601

函数定义

def name(param1, param2, ..., paramN):
    statements
    return/yield value # optional

其中:
def 是函数的声明;

my_func 是函数的名称;

括号里面的 message 则是函数的参数;

在函数最后, 你可以返回调用结果(return 或 yield) , 也可以不返回。

闭包

闭包其实和嵌套函数类似,不同的是, 这里外部函数返回的是一个函数, 而不是一个具体的值。 返回的函数通常赋于一个变量, 这个变量可以在后面被继续执行调用。
比如, 我们想计算一个数的 n 次幂, 用闭包可以写成下面的代码:

def nth_power(exponent):
    def exponent_of(base):
        return base ** exponent
    return exponent_of # 返回值是 exponent_of 函数

square = nth_power(2) # 计算一个数的平方
cube = nth_power(3) # 计算一个数的立方 
square
# 输出
<function __main__.nth_power.<locals>.exponent(base)>

cube
# 输出
<function __main__.nth_power.<locals>.exponent(base)>

print(square(2))  # 计算 2 的平方
print(cube(2)) # 计算 2 的立方
# 输出
4 # 2^2
8 # 2^3

匿名函数

什么是匿名函数?

lambda argument1, argument2,... argumentN : expression

例子:
匿名函数计算一个数的平方

square = lambda x: x**2
square(3)
9

常规函数计算一个数的平方

def square(x):
    return x**2
square(3)
 9

匿名函数 lambda 和常规函数一样, 返回的都是一个函数对象(function object) ,它们的用法也极其相似, 不过还是有下几点区别。

  • 第一, lambda 是一个表达式(expression) , 并不是一个语句(statement) 。

所谓的表达式, 就是用一系列“公式”去表达一个东西, 比如 x + 2、 x**2 等等;
所谓的语句, 则一定是完成了某些功能, 比如赋值语句 x = 1完成了赋值

lambda 可以用在用些常规函数 def 不能用的地方:
lambda 可以在list内部使用
[(lambda x: x
x)(x) for x in range(10)]
输出
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

lambda 可以作为函数的参数
l = [(1, 20), (3, 0), (9, 10), (2, -1)]
l.sort(key=lambda x: x[1]) # 按列表中元祖的第二个元素排序
print(l)
输出
[(2, -1), (3, 0), (9, 10), (1, 20)]*

  • 第二, lambda 的主体是只有一行的简单表达式, 并不能扩展成一个多行的代码块。

Python 函数式编程

所谓函数式编程, 是指代码中每一块都是不可变的(immutable) , 都由纯函数(pure function) 的形式组成。 这里的纯函数, 是指函数本身相互独立、 互不影响, 对于相同的输入, 总会有相同的输出, 没有任何副作用。

例子:
对于一个列表, 我想让列表中的元素值都变为原来的两倍

def multiply_2(l):
    for index in range(0, len(l)):
        l[index] *= 2
    return l

这不是一个纯函数的形式, 因为列表中元素的值被改变了,我多次调用multiply_2()这个函数, 那么每次得到的结果都不一样。

纯函数的形式写法如下,重新创建一个新的列表并返回。

def multiply_2_pure(l):
    new_list = []
    for item in l:
        new_list.append(item * 2)
    return new_list

Python 主要提供了这么几个函数:map()、 filter() 和 reduce(), 通常结合匿名函数 lambda 一起使用。

函数 参考链接
map() 函数 https://www.runoob.com/python/python-func-map.html
filter() 函数 https://www.runoob.com/python3/python3-func-filter.html
reduce() 函数 https://www.runoob.com/python/python-func-reduce.html

关于Python 函数式编程可参看
https://blog.csdn.net/u013398034/article/details/78701714

参考资料:

极客时间 Python核心技术与实战学习

Python核心技术与实战(极客时间)链接:
http://gk.link/a/103Sv

一篇文章搞懂Python中的函数式编程:
https://blog.csdn.net/u013398034/article/details/78701714


GitHub链接:
https://github.com/lichangke/LeetCode

知乎个人首页:
https://www.zhihu.com/people/lichangke/

简书个人首页:
https://www.jianshu.com/u/3e95c7555dc7

个人Blog:
https://lichangke.github.io/

欢迎大家来一起交流学习

相关文章

  • 第05天C语言(00):笔记总结

    01-函数-基本概念 02-函数-定义格式 03-函数-调用过程 04-函数-注意点 05-函数-练习 06-函数...

  • Python 数字

    2018-06-28 ###Python数学函数 ###Python数字类型转换 #abs() 函数返回数字的绝对...

  • day06.函数【Python教程】

    day06.函数【Python教程】 一、函数介绍 <1>什么是函数 请看如下代码: 运行后的现象: 想一想: 如...

  • [转载]虚函数与构造函数、析构函数

    原文地址:新浪博客 | zjdtc | 虚函数与构造函数、析构函数 | 2011-06-22本文在原文之上,增加了...

  • C++虚函数表

    虚函数表[https://pabloariasal.github.io/2017/06/10/understand...

  • python 基础 06 匿名函数,闭包和重要的内置函数

    python 基础 06 1.匿名函数 匿名函数也叫一句话函数。基础就是列表推导式。 2. 闭包 3. 重要的内置函数

  • 06 函数

    目录链接:https://www.jianshu.com/p/e1e201bea601 函数定义 其中:def 是...

  • 06 | 函数

    函数 函数可以没有参数,也可以接受多个参数,当连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其它都...

  • 06 函数

    函数是一段完成特定任务的独立代码片段。你可以通过给函数命名来标识某个函数的功能,这个名字可以被用来在需要的时候“调...

  • 函数06(函数参数)

网友评论

    本文标题:06 函数

    本文链接:https://www.haomeiwen.com/subject/apwxhctx.html