函数式编程

基于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. spring事物深入了解

    1.问题 1.以前对事物的了解只是停留在声明式事物,配置xml,或使用注解,事物的传播行为也只用过REQUIRED和SUPPORTS,可以说对事物的了解很模糊. 2.直到在开发中遇到问题.. 问题的描 ...

  2. .net下web页生产一维条形码

    code-39 前台 aspx <asp:Image ID="imgBandCode" runat="server" ImageUrl="~/W ...

  3. DNS详解: A记录,子域名,CNAME别名,PTR,MX,TXT,SRV,TTL

    DNS DNS,Domain Name System或者Domain Name Service(域名系统或者域名服务).域名系统为Internet上的主机分配域名地址和IP地址.由于网络中的计算机都必 ...

  4. SQL类型转换和数学函数

  5. dispatchers 设置

    Oracle连接方式(dispatchers 设置) oracle 响应客户端请求有两种方式: 1 专有连接:用一个服务器进程响应一个客户端请求 2 共享连接:用一个分派器(dispatcher)响应 ...

  6. Java 清理和垃圾回收

    java.lang.ref.cleaner包 finalize()//该方法已过时,有风险,慎用 1.对象不可能被垃圾回收 2.垃圾回收并不等于"析构" 只有当垃圾回收发生时fin ...

  7. poj3579 二分套二分

    和poj3685类似,都是二分答案然后在判断时再二分 这题的内层二分可以用stl代替 /* 二分套二分,思路:升序排序数据,先二分答案x进行判断,判断时枚举每个元素,二分找到和其之差小于等于x的所有值 ...

  8. 使用css3美化复选框

    声明:文章为转载(略改动),点击查看原文.如有侵权24小时内删除,联系QQ:1522025433. 我们知道HTML默认的复选框样式十分简陋,而以图片代替复选框的美化方式会给页面表单的处理带来麻烦,那 ...

  9. TCP连接的3次握手和4次挥手

    TCP连接的3次握手和4次挥手笔记 三次握手 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确 ...

  10. centos6.9上mongdb安装

    一.设置yum源 vi /etc/yum.repos.d/mongodb.repo [mongodb-org-3.2] name=MongoDB Repository baseurl=https:// ...