函数式编程

基于lambda演算的一种编程方式

  • 函数中只有函数
  • 函数可以作为参数,同样可以作为返回值
  • 纯函数式编程语言:LISP , Haskell

python函数式编程只是借鉴函数式编程的一些特点,可以理解成一半函数一半python

需要讲述:

  • 高阶函数
  • 返回函数
  • 匿名函数
  • 装饰器
  • 偏函数

lambda表达式

函数:最大程度复用代码

存在问题:

  • 如果函数很小,很短,则会造成啰嗦
  • 如果函数被调用次数少,则会造成浪费
  • 对于阅读者来说,造成阅读流程的被迫中断

lambda表达式(匿名函数):

  • 一个表达式,函数体相对简单
  • 不是一个代码块,仅仅是一个表达式
  • 可以有参数,有多个参数也可以,用逗号隔开

用法:

  • 以lambda开头
  • 紧跟一定的参数(如果有的话)
  • 参数后用冒号和表达式主题隔开
  • 只是一个表达式,所以没有return

计算一个数字的100倍数

stm = lambda x:  * x
print(stm())
结果:

多个参数

stm2 = lambda x,y,z,:x + y *  + z *
print(stm2(,,))
结果:

高阶函数

  • 把函数作为参数使用的函数,叫高阶函数

变量可以赋值

a =
b = a

函数名称就是一个变量

def funA():
print(" In funA")
funB = funA
funB()

以上代码得出结论:

  • 函数名称是变量
  • funB和funA只是名称不一样
  • 既然函数名称是变量,则应该可以被当做参数传入另一个函数
#高阶函数举例
#funA是普通函数,返回一个传入数字的100倍数字
def funA(n):
return n *
# 再写一个函数,把传入参数乘以300倍
def funB(n):
#最终返回300n
return funA(n) *
print(funB()) #写一个高阶函数
def funC(n,f):
#假定函数是把n扩大100倍
return f(n) *
print(funC(,funA))

系统高阶函数-map

  • 映射,把集合或列表的元素,每个元素都按照一定规则进行操作,生成一个新的列表或者集合
  • map函数是系统提供的具有映射功能的函数,返回值是一个迭代对象
#map 举例
#有一个列表,想对列表里的每个元素乘以10 L1 = [ i for i in range()]
l2 = []
for i in L1:
l2.append(i * )
print(l2) 或高阶函数
def mulTen(n):
return n*
l3 = map(mulTen,L1)
for i in l3:
print(i,end=" ")

reduce

  reduce
归并,缩减
把一个可迭代对象最后归并成一个结果
对于函数参数的函数要求:必须由两个参数,必须由返回结果
reduce([,,,,]) == f(f(f(f(,),),),)
reduce 需要导入functools包 from functools import reduce
def myAdd(x,y):
return x + y
rst = reduce(myAdd,[,,,,,])
print(rst)
结果:

filter函数

  • 对一组数据进行过滤,符合条件的数据会生成一个新的列表并返回
  • 调用函数:filter(f,data),f是过滤函数,data是数据
def isRven(a):
return a % ==
l = [,,,,,,,,,]
rst = filter(isRven,l)
print(rst)
print([i for i in rst])

高阶函数-排序

  • 把一个序列安照给定算法进行排序
  • key:在排序前对每个元素进行key函数运算,可以理解成按照key函数定义的逻辑进行排序

Python语言的高级特性的更多相关文章

  1. C、C++、C#、Java、php、python语言的内在特性及区别

    C.C++.C#.Java.PHP.Python语言的内在特性及区别: C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言.C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作 ...

  2. Python面向对象编程高级特性

    ***这里还是根据网上资料,主要是廖雪峰老师的教程学习的笔记,主要介绍python面向对象的高级特性,笔记不全,只是记录自己觉得容易出错的地方*** 1.python作为一种动态语言,他的动态绑定机制 ...

  3. Python的一些高级特性

    内容基本上来自于廖雪峰老师的blog相当于自己手打了一遍,加强加强理解吧. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493 ...

  4. Python:笔记(4)——高级特性

    Python:笔记(4)——高级特性 切片 取一个list或tuple的部分元素是非常常见的操作.Python提供了切片操作符,来完成部分元素的选取 除了上例简单的下标范围取元素外,Python还支持 ...

  5. 大数据笔记(二十六)——Scala语言的高级特性

    ===================== Scala语言的高级特性 ========================一.Scala的集合 1.可变集合mutable 不可变集合immutable / ...

  6. Python的一些高级特性以及反序列化漏洞

    0x01 简述 文章主要记录一下python高级特性以及安全相关的问题 python作为脚本语言,其作为高级语言是由c语言开发的,关于python的编译和链接可以看向这里https://github. ...

  7. python 9学习 高级特性

    高级特性 掌握了Python的数据类型.  语句      和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n ...

  8. python:函数的高级特性

    很多语言中,都允许把函数本身做为参数,传递给其它参数:即所谓的高阶函数.python中也有类似特性: 一.map/reduce.filter.sorted hadoop里的map-reduce思想在p ...

  9. Python学习之高级特性

    切片 在Python基础篇里,我们知道Python的可序列对象可以通过索引号(下标)来引用对象元素,索引号可以由0开始从左向右依次获取,可以从-1开始由右向左获取.这种方法可以帮助我们依次获取我们想要 ...

随机推荐

  1. plsql developer日期类型数据格式不对如何设置?

    当把一个数据库中的数据复制到另一个数据库时,如果数据中包含日期类型,会提示数据格式不正确.或者两个plsql developer设置不同,但实际上建表语句一样. 此时可在plsql中做如下设置: 首选 ...

  2. P3567 [POI2014]KUR-Couriers

    题目描述 Byteasar works for the BAJ company, which sells computer games. The BAJ company cooperates with ...

  3. nginx访问报错403 is forbidden

    由于开发需要,在本地环境中配置了nginx环境,使用的是Centos 6.5 的yum安装,安装一切正常,于是把网站文件用mv命令移动到了新的目录,并相应修改了配置文件,并重启Nginx. 重启就报个 ...

  4. CentOS 6.5环境实现corosync+pacemaker实现DRBD高可用

    DRBD (Distributed Replicated Block Device)分布式复制块设备,它是 Linux 平台上的分散式储存系统,通常用于高可用性(high availability, ...

  5. n个月后兔子的个数问题(for循环)

  6. CCF2014123集合竞价(C语言版)

    问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘价和开盘成交量. 该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种: 1. buy p s 表示一个 ...

  7. ECLIPSE 导入外部文件或源码包

    步骤: 点击Project->Properties->Libraries->Add External Class Folder.. ->选择你的文件路径->确定 注:如果 ...

  8. DDD领域模型数据访问之对象(十一)

    在工程DDD.Domain中文件夹ModelPermission新建类:BAS_Object public partial class BAS_Obejct:AggreateRoot { //仓储接口 ...

  9. ThinkPHP3.1快速入门教程

    ThinkPHP3.1快速入门教程 http://www.thinkphp.cn/info/155.html   ------------------------------------------- ...

  10. A. 【UNR #1】争夺圣杯

    题解: 一道比较水的题目 按照最一般的思路离散化后枚举最大值 然后考虑最大值的贡献 会发现需要分类讨论一下 发现对一段k的影响是等差数列 所以可以用线段树维护差分数组