函数式编程

基于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. windows环境变量PATH顺序的重要性

    PATH是路径的意思,PATH环境变量中存放的值,就是一连串的路径.不同的路径之间,用英文的分号间隔开.系统在执行用户命令时,若用户未给出绝对路径,则首先在当前目录下寻找相应的可执行文件.批处理文件等 ...

  2. mysql主从配置 转自http://www.cnblogs.com/sustudy/p/4174189.html

    1.确保主数据库与从数据库一模一样. 例如:主数据库里的a的数据库里有b,c,d表,那从数据库里的就应该有一个模子刻出来的a的数据库和b,c,d表 2.在主数据库上创建同步账号. GRANT REPL ...

  3. centos6.5报错:checking filesystems failed问题处理

    centos系统重启报错:checking filesystems failed checking filesystems /dev/mapper/vg_0-root: 搜了下可能是文件系统损坏 根据 ...

  4. Android中PopupWindow用法

    参考资料链接:http://developer.android.com/reference/android/widget/PopupWindow.html 在Android中有很多级别的Window, ...

  5. js实现星级评分效果(非常规5个li代码)

    1. 前言 此方案受到JS单行写一个评级组件启发,自己写了一个简单Demo. 功能有正常滑动,动态显示实心星星个数:当点击确认,则保持当前的实心星星个数:再移动时未点击,则离开后还是保持之前的状态. ...

  6. wpf 加阴影效果导致内容模糊的问题解决

    这个和GPU有关,参考地址 https://www.cplotts.com/2009/02/25/gpu-effects-blurry-text/ 产生问题的代码如下: <Window x:Cl ...

  7. laravel使用when搜索遇到状态参数(有0的状态)的坑

    今天,使用when()方法写活动列表的接口,有两个状态搜索,都有0这个状态,当传参为0时when()就失效了... 反反复复的验证参数,传参确实是0和1啊...百思不得其解~~~后面仔细想想when( ...

  8. cf789c

    主要是线性时间内求最大连续和 #include<bits/stdc++.h> using namespace std; #define maxn 200005 #define ll lon ...

  9. poj3667 区间合并,找最左边的空余块

    题很简单:给两个操作1:查找最左边的a个空余块并填满 2:把从第a个开始的连续b个块置空 线段树维护左连续,右连续,最大连续,lazy-tag即可,query函数值得学习 #include<io ...

  10. Python 索引迭代

    1.使用enumerate函数 L = ['Adam', 'Lisa', 'Bart', 'Paul'] for index, name in enumerate(L):     print inde ...