Python学习【84】:数学里面的泛函分析与python的高阶函数的异同
Python学习
一、学前花絮
我们在前面的文章中专门学习了高阶函数,比如装饰器就是通过高阶函数实现的。所谓的高阶函数,一个典型的特点就是把函数当做返回值。突然想到大学数学里面有一门课叫“泛函分析”,所谓的泛函也可以简单理解为函数的函数。比如一般的函数的输入都是一个值,比如f(x),x作为一个值当做函数f的输入。那么泛函中的输入x也是一个函数。既然这么相似,二者有何异同呢?二、泛函分析与python高阶函数对比
泛函分析(Functional Analysis)和高阶函数(Higher-order Functions)在“函数作为输入/输出”这一点上的表面相似性。但它们的目标、语境、数学基础和用途有本质区别。下面我们从多个维度对比它们的异同。2.1核心思想的相似点(“同”)
二者都体现了 “函数是一等对象” 的思想——函数不仅可以被调用,还可以被当作数据来处理。2.2 本质差异(“异”)
是纯数学/应用数学分支,属于无穷维线性代数 + 拓扑 + 测度论的结合;目的是研究函数空间的结构(完备性、紧性、对偶性等),为微分方程、量子力学、优化理论等提供基础;不关心函数的数学性质(是否连续、可积),只关心“能否调用”;处理的是无限维函数空间(如所有平方可积函数构成的 Hilbert 空间);泛函通常是线性且连续的(如积分、求导在某些空间上是线性泛函);处理的是有限、具体的函数对象(Python 函数是闭包+字节码);不要求线性、连续,甚至不要求数学意义(比如 lambda x: print(x));输出可以是任意类型:另一个函数、列表、None 等;所以严格来说,Python 的高阶函数 ≠ 数学中的“泛函”。泛函分析研究“函数的宇宙”,而 Python 高阶函数只是在这个宇宙中搭积木的工具——前者是望远镜,后者是螺丝刀。2.3 针对数学中的泛函和python的高阶函数编写程序示例
注意:这里 f 必须是可调用且数学良好定义的函数(如连续、可积),否则积分会失败——这体现了泛函对函数空间的隐含要求。(1) 接受函数作为参数(类似泛函,但输出不一定是数)关键特征:
l灵活:输入/输出可以是函数、列表、None 等;l不关心 f 是否“数学良好”,只要 callable 就行;所有(返回标量的)泛函都可以用高阶函数实现,但高阶函数 ≠ 泛函。三、小结
今天的文章,属于思考性的内容。是在学习python高阶函数过程中,突然想到的大学数学中的泛函分析课程。但二者在思想上还是有那么一点点相似之处,但在更大的范围是不同。毕竟二者所在的行业领域差异很大。