python - 使用高阶函数发现了一种模式。这种模式叫什么?
问题描述
我正在开发一个 python 项目,在该项目中我经常需要使用matplotlib
. 每次生成图形的代码都是相同的。但是,我正在调用我自己的函数,这些函数接受轴对象作为其参数之一并对其进行修改。在我的整个项目中,我调用这些函数的不同组合来填充我的图形轴。
然后我突然想到,我实际上将这些函数本身及其参数的元组传递给了一个更高阶的函数。高阶函数将负责调用函数来填充两个轴对象以生成我的图形。我在下面做了一个玩具示例来说明这一点。
import matplotlib.pyplot as plt
import numpy as np
def A(ax, x, a, b, c):
y = a*x**2+b*x+c
ax.plot(x, y)
return ax
def B(ax, x, a):
y = a*x**2
ax.scatter(x, y)
return ax
def C(ax, n):
ax.axhline(n)
return x
def plot(ax1, f1, args1, ax2, f2, args2):
ax1 = f1(ax1, *args1)
ax2 = f2(ax2, *args2)
return ax1, ax2
if __name__=="__main__":
x = np.linspace(0,10,10)
fig, (ax1, ax2) = plt.subplots(2, 1)
ax1, ax2 = plot(ax1, A, (x, 1, 2, 3), ax2, C, (5,))
plt.show()
x = np.linspace(0, 10, 10)
fig, (ax1, ax2) = plt.subplots(2, 1)
ax1, ax2 = plot(ax1, B, (x, 1), ax2, C, (5,))
plt.show()
这里的函数plot
就是这种高阶函数的一个例子。它可以采用任何功能组合f1
和f2
. 然后它在给定的坐标区对象上调用这些函数以生成图形。该函数plot
不关心有多少参数f1
,f2
这使得它足够通用以减少我拥有的重复代码的数量。
这是什么图案?这是装饰器的一个例子吗?如果没有,python 是否有任何内置的语法糖可以在更基础的层面上支持这一点?
解决方案
推荐阅读
- filesystems - 是否可以从 Service Worker 使用 webkitRequestFileSystem?
- matlab - 为什么我的 GUI 中的 uitable 元素偶尔会在 MATLAB 中丢失?
- pyspark - 如何像在 SAS 中一样在 PySpark 中创建多列添加 if then do 语句(没有别的)?
- javascript - 来自 C# 的 Highcharts 范围选择器日期格式
- html - 无法在网页上获得等间距的边距
- linux - Android Studio 看不到 Chrome 设备
- java - 从将为参数类型调用的 Java 类获取构造函数,不需要精确的参数和参数类型匹配
- c++ - C++:遍历字符串向量并使用 putenv 的索引
- python - 将 TensorFlow 1x 迁移到 TensorFlow 2x
- triggers - Odoo如何从制造订单触发套件采购订单