Python语言的高级特性

函数式编程

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

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

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

需要讲述:

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

lambda表达式

函数:最大程度复用代码

存在问题:

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

lambda表达式(匿名函数):

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

用法:

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

计算一个数字的100倍数

stm = lambda x: 100 * x
print(stm(89))
结果:
8900

多个参数

stm2 = lambda x,y,z,:x + y * 10 + z * 100
print(stm2(4,5,6))
结果:
654

高阶函数

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

变量可以赋值

a = 100
b = a 

函数名称就是一个变量

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

以上代码得出结论:

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


#写一个高阶函数
def funC(n,f):
    #假定函数是把n扩大100倍
    return f(n) * 3
print(funC(9,funA))

系统高阶函数-map

  • 映射,把集合或列表的元素,每个元素都按照一定规则进行操作,生成一个新的列表或者集合
  • map函数是系统提供的具有映射功能的函数,返回值是一个迭代对象
#map 举例
#有一个列表,想对列表里的每个元素乘以10

L1 = [ i for i in range(10)]
l2 = []
for i in L1:
     l2.append(i * 10)
print(l2)

或高阶函数
def mulTen(n):
    return n*10
l3 = map(mulTen,L1)
for i in l3:
    print(i,end=" ")

reduce

  reduce
    归并,缩减
    把一个可迭代对象最后归并成一个结果
    对于函数参数的函数要求:必须由两个参数,必须由返回结果
    reduce([1,2,3,4,5]) == f(f(f(f(1,2),3),4),5)
    reduce 需要导入functools包

from functools import reduce
def myAdd(x,y):
    return x + y
rst = reduce(myAdd,[1,2,3,4,5,])
print(rst)
结果:
15

filter函数

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

高阶函数-排序

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

猜你喜欢

转载自www.cnblogs.com/wanglan/p/9284217.html