当前位置: 首页 > news >正文

Python 函数式编程(一):高阶函数/函数名变量

      函数是面向过程的程序设计的基本单元。

      函数式编程就是一种抽象程度很高的编程范式。 纯粹的函数式编程语言编写的函数没有变量。 因此, 任意一个函数, 只要输入是确定的, 输出就是确定的, 这种纯函数我们称之为没有副作用。 而允许使用变量的程序设计语言, 由于函数内部的变量状态不确定, 同样的输入, 可能得到不同的输出, 因此, 这种函数是有副作用的。

      函数式编程的一个特点就是, 允许把函数本身作为参数传入另一个函数, 还允许返回一个函数!

 

高阶函数

变量可以指向函数

>> print(abs(-10))
10
>> print(abs)
<built-in function abs>

可以看到,print(abs) Python中这样居然是不报错

把函数本身赋值给变量

      函数本身也可以赋值给变量, 即:变量可以指向函数。

      如果一个变量指向了一个函数,那么,可以通过该变量来调用这个函数
 

>>f = abs
>>print(f(-10))

10

 

函数名也是变量

      函数名其实就是指向函数的变量! 对于 abs()这个函数, 完全可以把函数名 abs 看成变量, 它指向一个可以计算绝对值的函数

      如果把 abs 指向其他对象, 示例如下:

abs = 10
print(abs(-10))

       把 abs 指向 10 后, 就无法通过 abs(-10)调用该函数了! 因为 abs 这个变量已经不指向求绝对值函数了!

 

高阶函数

      既然变量可以指向函数, 函数的参数能接收变量, 那么一个函数就可以接收另一个函数作为参数, 这种函数就称之为高阶函数

def add(x,y,f):
	return f(x)+f(y)

print(add(-5,6,abs))

 

 

把函数作为参数传入, 这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。

Python 内建的高阶函数有 map、 reduce、 filter、 sorted。
 

 

 

 

 

 

相关文章:

  • Pycharm debug
  • MyOS(二):用Java和汇编开发一个helloworld操作系统内核
  • 仿QQ聊天室项目
  • 基于Python+Flask+Echarts的 COVID-19数据可视化项目
  • go语言相关知识
  • go语言相关库和函数
  • Windows内核文件
  • MyOS(三):软盘读写
  • Python函数式编程(二):map、 reduce、 filter、 sorted
  • OpenCV(一)——图片灰度转换(灰度图) 修改图片尺寸(cv2.resize) 读取视频
  • opencv人脸识别 (一):人脸检测 (Haar级联 静态图像中人脸检测 视频中的人脸检测 )
  • opencv人脸识别 (二):人脸识别 (基于 LBPH)
  • Caffe(一)——简介 优点 Caffe2 编译和安装
  • Pytorch之经典神经网络CNN(一) —— 全连接网络 / MLP (MNIST) (trainset和Dataloader batch training learning_rate)
  • 神经网络/深度学习 相关知识
  • [deviceone开发]-do_Webview的基本示例
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • CSS 专业技巧
  • CSS3 变换
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JavaScript 基本功--面试宝典
  • mongo索引构建
  • MySQL数据库运维之数据恢复
  • Otto开发初探——微服务依赖管理新利器
  • PHP 小技巧
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Vue.js 移动端适配之 vw 解决方案
  • vue2.0项目引入element-ui
  • 从setTimeout-setInterval看JS线程
  • 服务器之间,相同帐号,实现免密钥登录
  • 将 Measurements 和 Units 应用到物理学
  • 警报:线上事故之CountDownLatch的威力
  • 模型微调
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 深入浅出Node.js
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 移动端 h5开发相关内容总结(三)
  • 树莓派用上kodexplorer也能玩成私有网盘
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • %check_box% in rails :coditions={:has_many , :through}
  • (1)(1.13) SiK无线电高级配置(六)
  • (ibm)Java 语言的 XPath API
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (四) Graphivz 颜色选择
  • (转载)Linux网络编程入门
  • **CI中自动类加载的用法总结
  • .NET : 在VS2008中计算代码度量值
  • .net core 6 redis操作类
  • .NET NPOI导出Excel详解
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET开发不可不知、不可不用的辅助类(一)