讲讲Python中的普通函数和高阶函数_python 高级函数低级函数

def f(z):
    return z()

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

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

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

#!/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 : hello

def f1(x):
    return x


def f2(x, z=100):
    return x + z / 10


def f3(x, z=100, *dynamic_args):
    sum = 0
    for arg in dynamic_args:
        sum += arg
    return x + z / 10 + sum / 10000.0


def dummy_sum(*args):
    return 0


def f4(x, z=100, sum_func=dummy_sum):
    return x + z / 10 + sum_func() / 10000.0


print(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_func



print(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]

我们先看看输出结果:

屏幕快照 2021-10-31 下午9.19.28.png

f3 和f4 看起来结果一样。

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

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

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

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

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

#!/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 : hello
import math


def circle_area(r):
    return math.pi * r * r


def rectangle_area(a, b):
    return a * b

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

f

(

r

)

=

π

r

2

f® = \pi * r^2

f®=π∗r2
这是矩形面积的数学公式:

f

(

a

,

b

)

=

a

b

f(a, b) = a * b

f(a,b)=a∗b

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

读者可以思考一会。

下面是代码:

#!/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 : hello
import math


def circle_area(r):
    return math.pi * r * r


def rectangle_area(a, b):
    return a * b


def area(x, linear, factor):
    return x * linear(x, factor)


def relation(x, factor):
    return x * factor


a = 10
b = 20

print("长方形面积:", rectangle_area(a, b))
print("圆形面积:", circle_area(a))
print("长方形面积:", area(a, relation, factor=b / a))
print("圆形面积:", area(a, relation, factor=math.pi))

结果如下图:

屏幕快照 2021-10-31 下午9.41.56.png

这只是一种解法。

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

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值