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笔记(二)的更多相关文章

  1. python笔记二(数据类型和变量、编码方式、字符串的编码、字符串的格式化)

    一.数据类型 python可以直接处理的数据类型有:整数.浮点数.字符串.布尔值.空值. 整数 浮点数 字符串:双引号内嵌套单引号,可以输出 i'm ok. 也可以用\来实现,\n 换行 \t tab ...

  2. guxh的python笔记二:函数基础

    1,函数的参数 1.1,查看函数的参数类型 def run(a, *args, b, **kwargs): return a + b 可以通过如下方式查看参数类型: import inspect k ...

  3. python笔记二

    一 运算符 1算术运算+ - * /  % ** //其中%为取余,**为取幂如2**10=1024    9//4=2 需要注意的是python2.7中如9/2=4 需要正确表示,则在开头添加 fr ...

  4. python笔记二(mysql数据库操作)

    python2.x使用MySQLdb python3.x使用pymysql代替MySQLdb 不过我使用的是python3.5,MySQLdb还是可以在python3.5使用的. #!/usr/bin ...

  5. Python笔记(二)查找重复元素

    一.查找数列重复元素---count() >>> list = [,,,,,,,,,,,] >>> set = set(list) >>> for ...

  6. python 笔记二

    17.进程线程 进程间通信方式:管道Pipe:队列Queue:共享内存Value.Array.Manager: 多进程同步:锁Lock.递归锁RLock.Condition(条件变量):事件event ...

  7. Python笔记(二十九)_模块

    模块 在Python中,一个.py文件就是一个模块 if __name__ == '__main__':所有模块都有一个 __name__ 属性,__name__ 的值取决于如何应用模块 run当前文 ...

  8. Python笔记(二十六)_魔法方法_属性的魔法方法

    属性的魔法方法 __getattribute__(self,name):当该类的属性被访问时,自动触发,是最先被触发的属性方法 __setattr__(self,name,value):当一个属性被设 ...

  9. Python笔记(二十四)_魔法方法_运算符的魔法方法

    算数运算方法 .反运算方法 以对象A+对象B为例,都是将A作为self值,而B作为other值传入__add__(self,other)方法: 当用户输入A+B,就会调用重写的add方法: >& ...

随机推荐

  1. 信息提示框:MessageBox

    一 函数原型及参数 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer;   1.参数列表    hW ...

  2. k8s中flannel:镜像下载不了

    重新部署一套K8S集群时,由于K8S需要扁平化的网络,所以当执行下面的 root@master ~]# kubectl apply -f kube-flannel.yml 会开始下载镜像,然后去启动, ...

  3. confluence部署

    confluence -- 团队文档的管理平台. 首先要在confluence官网买key. 部署 安装jdk 1.8 环境 查看机器是否自带 java -version,没有再安装. yum ins ...

  4. Mysql 执行安装脚本报错Changed limits:

    安装Mysql软件的时候报错,如下: [root@db bin]# ./mysql_install_db --basedir=/usr/local/mysql --datadir=/u01/app/m ...

  5. Unity3D_(游戏)控制物体的上、下、左、右移动

    通过键盘上↑.↓.←.→实现对物体的控制 using System.Collections; using System.Collections.Generic; using UnityEngine; ...

  6. kafka监控指标项

    监控配置 ​ kafka基本分为broker.producer.consumer三个子项,每一项的启动都需要用到 $KAFKA_HOME/bin/kafka-run-class.sh 脚本,在该脚本中 ...

  7. hive 调优(三)tez优化

    我们采用亚马逊emr构建的集群,用hive查询的时候报错,FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.e ...

  8. sqli-labs(42)

    0x01 喔? 熟悉的界面? 注册一下 但是好像不行了 那我们只有 嘻嘻看看页面了 也是以失败告终的  那我们该怎么办  我们来看看源码 我们看见login的页面未对 password进行任何的过滤 ...

  9. vue router 如何使用params query传参,以及有什么区别

    写在前面: 传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,喜欢的可以点波赞 ...

  10. is == 编码与解码

    is 和 ==  主要是数字和字符串的比较 1 区别: ==比较的是两边的值     is比较的是两边值的id    id获取的方法 id() 2 小数据池: -5~256 3 字符串中特殊字符有id ...