Python笔记(二)
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
Python笔记(二)的更多相关文章
- python笔记二(数据类型和变量、编码方式、字符串的编码、字符串的格式化)
一.数据类型 python可以直接处理的数据类型有:整数.浮点数.字符串.布尔值.空值. 整数 浮点数 字符串:双引号内嵌套单引号,可以输出 i'm ok. 也可以用\来实现,\n 换行 \t tab ...
- guxh的python笔记二:函数基础
1,函数的参数 1.1,查看函数的参数类型 def run(a, *args, b, **kwargs): return a + b 可以通过如下方式查看参数类型: import inspect k ...
- python笔记二
一 运算符 1算术运算+ - * / % ** //其中%为取余,**为取幂如2**10=1024 9//4=2 需要注意的是python2.7中如9/2=4 需要正确表示,则在开头添加 fr ...
- python笔记二(mysql数据库操作)
python2.x使用MySQLdb python3.x使用pymysql代替MySQLdb 不过我使用的是python3.5,MySQLdb还是可以在python3.5使用的. #!/usr/bin ...
- Python笔记(二)查找重复元素
一.查找数列重复元素---count() >>> list = [,,,,,,,,,,,] >>> set = set(list) >>> for ...
- python 笔记二
17.进程线程 进程间通信方式:管道Pipe:队列Queue:共享内存Value.Array.Manager: 多进程同步:锁Lock.递归锁RLock.Condition(条件变量):事件event ...
- Python笔记(二十九)_模块
模块 在Python中,一个.py文件就是一个模块 if __name__ == '__main__':所有模块都有一个 __name__ 属性,__name__ 的值取决于如何应用模块 run当前文 ...
- Python笔记(二十六)_魔法方法_属性的魔法方法
属性的魔法方法 __getattribute__(self,name):当该类的属性被访问时,自动触发,是最先被触发的属性方法 __setattr__(self,name,value):当一个属性被设 ...
- Python笔记(二十四)_魔法方法_运算符的魔法方法
算数运算方法 .反运算方法 以对象A+对象B为例,都是将A作为self值,而B作为other值传入__add__(self,other)方法: 当用户输入A+B,就会调用重写的add方法: >& ...
随机推荐
- Windows Server 快速生成免费SSL证书 (letsencrypt)
最近官网需求部署个SSL证书,一番操作后把借鉴的网站与实际过程记录下来 Let's Encrypt,官网是https://letsencrypt.org/,它是一个由各大公司赞助的公益组织: 有趋势有 ...
- day_work_01
day_work_01 ------Python是一个优雅的大姐姐 作业一:http://www.cnblogs.com/xzmxddx/p/8331568.html 作业二:编写登录接口 代码 # ...
- Visual Stdio C++ 编译器、链接器常用命令
概览: cmd常用命令配合使用: del 删除指定文件 同erase cls 清屏 rd 删除空目录文件夹 dir 显示目录 cd 在当前盘符跳转指定目录(不同盘符跳转用盘符号)(分别表示根目录 上一 ...
- FJOI2017前做题记录
FJOI2017前做题记录 2017-04-15 [ZJOI2017] 树状数组 问题转化后,变成区间随机将一个数异或一,询问两个位置的值相等的概率.(注意特判询问有一个区间的左端点为1的情况,因为题 ...
- cp:复制文件和目录
cp 命令,主要用来复制文件和目录,同时借助某些选项,还可以实现复制整个目录,以及比对两文件的新旧而予以升级等功能. cp 命令的基本格式如下:cp [选项] 源文件 目标目录/文件 选项: -a:相 ...
- unittest详解(四) 批量执行用例(discover)
前面我们说了,对于不同文件用例,我们可以通过addTest()把用例加载到一个测试套件(TestSuite)来统一执行,对于少量的文件这样做没问题,但是如果有几十上百个用例文件,这样做就太浪费时间了. ...
- [CF1172E]Nauuo and ODT:Link-Cut Tree
分析 lxl大毒瘤. 感谢Ouuan等CNOIER提供了这么好的比赛. 这里只是把官方题解复述一遍,可以直接去看官方题解:点我. 考虑将问题转化为对于每个颜色,求出没有经过这个颜色的节点的路径有多少条 ...
- java中 在一个异常处理中什么语句块是可多个的
MM们 异常处理一般格式:捕获异常:try{//代码块}catch(异常类型,例如:Exception e){//需要抛出的异常,例如:e.printStackTrace();}catch(异常类型) ...
- Python列表解析和字典解析
python笔记_列表解析 相比于for循环,列表解析的语法是由底层c语言实现的,它和使用for循环遍历pyobject对象相比,性能会有很大的提升. 无条件子句的列表解析式 In [2]: [2*i ...
- vue下实现input实现图片上传,压缩,拼接以及旋转
背景 作为一名前端工作人员,相信大家在开发系统的时候,经常有遇到需要这么一种需求,就是需要为用户保存上传的图片,很多小白遇到这个问题的时候,都会虎躯一震,以为会是一个棘手的问题,当你读完这篇文章的时候 ...