Python笔记(二)
2024-10-07 03:41:42
python笔记
函数式编程
函数
- 函数是Python内建支持一种封装(将大段代码拆成函数)
- 通过函数的调用,可以将复制的任务分解。
函数式编程(Functional Programming)
计算机(Computer)和计算(Compute)
抽象程度 | 程序语言 | 距离硬件 |
---|---|---|
越高 | 越高级 | 越远 |
越低 | 越低级 | 越近 |
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程编写的函数是没有变量的。
是否允许使用变量的编程
没有变量 | 使用变量 |
---|---|
没有变量状态 | 内部变量状态不确定 |
没副作用 | 有副作用 |
特点:
允许把函数本身作为参数传入另一个函数,还允许返回一个函数
高阶函数(Higher-order function)
变量可以指向函数
例:
>>> abs(-10)
10
>>> abs #只写abs
<built-in function abs>
>>> x = abs(-10) #将函数调用的结果赋值给变量
>>> x
10
>>> f = abs
>>> f
<built-in function abs>
>>> f = abs
>>> f(-10)
10 #成功,变量f已经指向abs函数本身
结论:
函数本身也可以赋值给变量,即:变量可以指向函数
函数名也是变量
函数名其实就是指向函数的变量
例:
>>> abs = 10
>>> abs(-10) #将abs指向其他对象
Traceback (most recent call last):
File "<stdin>", line 1, in <moudule>
TpyeError: 'int' object is not callable
# 把abs指向10后无法调用该函数,因为abs指向了整数10
# 恢复abs函数,请重启Python交互环境
# 为什么重启就恢复,因为abs函数实际是定义在__bulitin__模块中,要使abs变量指向在其他模块生效,要用__builtin__.abs = 10
传入函数
高阶函数:一个可以接收另一个函数作为参数的函数
简单的高阶函数
def add(x, y, f):
return f(x) + f(y)
结论:
把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式
map()和reduce()函数
map()函数
- map()函数:两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
- map()作为高阶函数,把运算规则抽象化。
map()实践:
>>> def f(x)
... return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6])
>>> list(r) #将map传入的函数依次作用到序列
[1, 4, 9, 16, 25, 36]
reduce()函数
- reduce()函数:把结果继续和序列的下一个元素做累积计算。
reduce()实践:
>>> from functools import reduce
>>> def add(x, y):
... return x + y
...
>>> reduce(add, [1, 3, 5, 7]) #add(add(add(1, 3), 5), 7)
16
练习
利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。
输入:['adma', 'LISA', 'barT']
输出:['Adam', 'Lisa', 'Bart']
de
最新文章
- oracle 序列中cache 有什么用途
- [嵌入式开发]Linux性能分析——上下文切换
- ArcGIS创建tpk切片缓存
- Python数字,字符串
- C# winform 动态调用WebService
- linux下mysql的忘记root密码的解决办法
- eclipse有时候会报错:Cannot change version of project facet Dynamic Web Module to 2.5。这个错误不会影响程序的运行,不过看着总是不舒服。这个问题现在可以解决啦。
- MyEclipse+Struts+Hibernate+Mysql开发环境配置
- c++代码模板
- Python之路【第七篇】:线程、进程和协程
- Fragment 和 FragmentActivity的使用(二)
- DirectShow Filter 开发典型例子分析 ——字幕叠加 (FilterTitleOverlay)1
- bzoj 1088: [SCOI2005]扫雷Mine
- GDB: basics
- CentOS下LAMP环境安装配置
- PHP Laravel框架入门心得 | How to study PHP Laravel Framework
- 2019中山大学程序设计竞赛 	Triangle
- COGS 2396 2397 [HZOI 2015]有标号的强连通图计数
- VIM入门
- C#窗体布局技巧
热门文章
- Poj 3057 未AC http://poj.org/showsource?solution_id=15175171
- JDK_API剖析之java.util包
- ZooKeeper 简介说明
- hibernate一对多关联映射
- 套接字之recvfrom系统调用
- 第四周课程总结&;实验报告
- shell初级-----结构化命令
- linux_Ubuntu相对路径和绝对路径
- OpenStack 启动虚拟机 Booting from Hard Disk
- 监控Linux服务器上python服务脚本