详解Python中的普通函数和高阶函数

详解Python中的普通函数和高阶函数
目录
  • 什么是函数
  • 函数的嵌套调用
    • 高阶函数
  • 我们思考一下计算圆形和方形的面积
    • 为何高阶函数能够降低维度
  • 总结

    什么是函数

    每个语言都有函数,甚至大家用的Excel里面也有函数,我们以前学习的数学也很多各种各样的函数。

    Python中的函数也是一样的。

    ?123def f(x): print("参数为:",x) return x

    这里的函数 y = f(x), 在数学中表示为一条斜率为1的直线。

    函数的嵌套调用

    ?12345def z(x): passdef f(x): print("参数为:",x) return z(x)

    像这样,我们在f(x)中调用了z(x)函数(这里使用了pass关键字,实现先不写,仅作展示目的)

    我们能不能不定义z(x)就定义一个函数调用别的函数呢?

    就像实现一个数的平方,函数的‘平方',大概这个意思。

    高阶函数

    ?12def f(z): return z()

    这就是高阶函数,f函数需要外界提供一个参数,这个参数必须是一个函数。

    在使用f(z)的时候,我们不能给一个f(2), f(3)这样的值。或者有个函数如d(x)返回非函数值结果,我们不能这样调用:f(d(1))。

    学委准备了下面的代码,从简单函数逐步演化为高阶函数:

    ?1234567891011121314151617181920212223242526272829303132#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/10/24 11:39 下午# @Author : LeiXueWei# @CSDN/Juejin/Wechat: 雷学委# @XueWeiTag: CodingDemo# @File : func_demo2.py# @Project : hellodef f1(x): return xdef f2(x, z=100): return x + z / 10def f3(x, z=100, *dynamic_args): sum = 0 for arg in dynamic_args: sum += arg return x + z / 10 + sum / 10000.0def dummy_sum(*args): return 0def f4(x, z=100, sum_func=dummy_sum): return x + z / 10 + sum_func() / 10000.0print(f1(100))print(f2(100, z=50))print(f3(100, 50, 4, 5, 6))def sum_g(*dynamic_args): def sum_func(): sum = 0 for arg in dynamic_args: sum += arg return sum return sum_funcprint(f4(100, 50, sum_g(4, 5, 6)))

    这里我们看到函数f1, f2, f3, f4。

    补充一个知识点: *dynamic_args 是一个动态参数,不定长度的参数。
    也就是f3明明声明了3个参数,最后我们给了5个参数。
    这里f3认为x=100, z=50, dynamic_args = [4, 5, 6]

    我们先看看输出结果:

    f3 和f4 看起来结果一样。

    但是性质完整不一样,读者可以思考十秒。

    f4弹性非常大,因为第三个参数为函数。

    高阶函数可以帮助我们把计算‘降维'(三维变成二维,二维变一维)。

    我们思考一下计算圆形和方形的面积

    相信大家闭着眼都能写出下面两个函数:

    ?12345678910111213#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/10/24 11:39 下午# @Author : LeiXueWei# @CSDN/Juejin/Wechat: 雷学委# @XueWeiTag: CodingDemo# @File : func_demo2.py# @Project : helloimport mathdef circle_area(r): return math.pi * r * rdef rectangle_area(a, b): return a * b

    这是圆形面积的数学公式:

    f ( r ) = π ∗ r 2

    这是矩形面积的数学公式:

    f ( a , b ) = a ∗ b

    我们看到这里有的有1个参数的,有的有两个的怎么变成高阶函数?

    读者可以思考一会。

    下面是代码:

    ?1234567891011121314151617181920212223#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/10/24 11:39 下午# @Author : LeiXueWei# @CSDN/Juejin/Wechat: 雷学委# @XueWeiTag: CodingDemo# @File : func_demo2.py# @Project : helloimport mathdef circle_area(r): return math.pi * r * rdef rectangle_area(a, b): return a * bdef area(x, linear, factor): return x * linear(x, factor)def relation(x, factor): return x * factora = 10b = 20print("长方形面积:", rectangle_area(a, b))print("圆形面积:", circle_area(a))print("长方形面积:", area(a, relation, factor=b / a))print("圆形面积:", area(a, relation, factor=math.pi))

    结果如下图:

    这只是一种解法。

    从代码可以看到,我们把圆形和矩形都看作某一个参照物(半径/一条边)的平方,再成乘以一个系数。

    下面,我们把正方形面积计算加上:

    ?123456789101112131415161718192021222324252627#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/10/24 11:39 下午# @Author : LeiXueWei# @CSDN/Juejin/Wechat: 雷学委# @XueWeiTag: CodingDemo# @File : func_demo2.py# @Project : helloimport mathdef circle_area(r): return math.pi * r * rdef square_area(a): return a * adef rectangle_area(a, b): return a * bdef area(x, linear, factor): return x * linear(x, factor)def relation(x, factor): return x * factora = 10b = 20print("长方形面积:", rectangle_area(a, b))print("正方形面积:", square_area(a))print("圆形面积:", circle_area(a))print("长方形面积:", area(a, relation, factor=b / a))print("正方形面积:", area(a, relation, factor=1))print("圆形面积:", area(a, relation, factor=math.pi))

    上面的代码执行结果如下:

    这就是高阶函数的神奇之处,我们从正方形的角度思考。

    只用一个area函数和relation函数,这两个函数都不必修改,只需要给一个factor(经验因子),就能快速计算它的面积。

    为何高阶函数能够降低维度

    从上面距离的计算面积的函数,我们可以看到计算圆形和长方形,都能看成一个一维函数。

    然后以正方形面积为参照物,快速估算出圆形和方形的面积。

    当然上面的计算圆形面积采用了半径,还不够直观,读者可以自行改为直径,这样factor = math.pi / 4。

    这样在感受上会更贴切。

    总结

    除了上面介绍的函数,参数,高阶函数。我们还可以使用lambda函数:

    ?1lambda 参数1, 参数2,。。。,第n个参数 : 计算表达式

    上面的函数relation函数可以省略不写,最后调用改为:

    ?123print("长方形面积:", area(a, lambda x, f: x * f, factor=b / a))print("正方形面积:", area(a, lambda x, f: x * f, factor=1))print("圆形面积:", area(a, lambda x, f: x * f, factor=math.pi))

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

    您可能感兴趣的文章:
    • Python常见内置高阶函数即高阶函数用法
    • Python技巧匿名函数、回调函数和高阶函数
    • Python全栈之迭代器和高阶函数
    • 深入了解python高阶函数编写与使用
    • python 高阶函数简单介绍
    • 一篇文章带你学习Python3的高阶函数

    推荐阅读

      excel怎么用乘法函数

      excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

      计算机主板BIOS设置详细-BIOS知识

      计算机主板BIOS设置详细-BIOS知识,,什么是电脑BIOS,一般电脑主板已经设置完毕后,电脑就开始按del键进入BIOS。系统启动BIOS,即微机的基本输入

      计算机蓝屏故障的计算机蓝屏解决方案

      计算机蓝屏故障的计算机蓝屏解决方案,,电脑蓝屏电脑故障经常使用电脑的朋友经常遇到,因为电脑蓝屏是一个非常普遍的现象,所以很难预测,什么时

      excel中乘法函数是什么?

      excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

      计算机自动关机的原因是什么

      计算机自动关机的原因是什么,,计算机(计算机),通常称为计算机,是一种用于高速计算的电子计算机。它可以进行数值计算和逻辑计算,还具有存储记忆

      电脑功率计算|电脑功率计算公式

      电脑功率计算|电脑功率计算公式,,电脑功率计算公式  从设计角度出发一般取300w/台基本都可以满足要求,可以从以下几个方面分析一下电脑功

      标准差excel用什么函数?

      标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细

      如何设置计算机视图视图的统一视图

      如何设置计算机视图视图的统一视图,,不知道你是否有这样的使用电脑经验,电脑在不同的文件夹打开,有时这个文件夹是用来查看列表的方式,但是当

      的故障_计算机解决无法打印文档

      的故障_计算机解决无法打印文档,,核心提示:最近,打印机出现了一个奇怪的现象,在打印正常之前,打印机不能打印最近的突然,提示发送打印作业,计算