函数式编程1

Log 模块资料

https://www.cnblogs.com/yyds/p/6901864.html

Python 语言的高级特性:

 函数式编程(FunctionalProgramming)

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

   程序中只有函数

   函数可以作为参数,同样可以作为返回值

   纯函数式编程语言:LISP ,Haskell

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

    包含的内容:

            高阶函数

            返回函数

            匿名函数

            装饰器

             偏函数

匿名函数:Lambda 表达式

    函数 :最大程度复用代码,如果函数很小,很短,则会造成啰嗦

                  如果函数被调用的次数少,则会造成浪费

                  对于读者来说,造成阅读流程的被迫中断

      Lambda 表达式(匿名函数):

                    一个表达式,函数体相对简单

                     不是一个代码块,仅是一个表达式,可以有一个或多个参数,参数间用逗号隔开

      Lambda 表达式用法:

                       以 Lambda 开头

                       紧跟一定的参数(如果有的话)

                       参数后面用冒号将表达式和主体隔开

                        只是一个表达式,所以,没有return

使用 Lambda 表达式计算一个数字的100倍数

因为就是一个表达式,所以没有 return

stm = lambda x: 100 * x

Lambda 函数的调用与函数的调用一模一样

stm(89)

多个参数的 Lambda 表达式

stm1 = lambda x,y,z: x + y * 10 + z * 10
stm1(4,5,6)

高阶函数

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

      变量可以赋值

 a = 100
 b = a

      函数名就是一个变量

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

以上代码得出的结论:

      函数名称是变量

       funA 和 funB 只是名称不一样而已

       既然函数名称是变量,则应该可以被当成参数传入到另一个函数中

高价函数实例:

# funA 是普通函数,返回一个数字的一百倍

 def funA(n):
     return n *100
# 在写个函数,把传入的参数乘以 300 倍,利用高阶函数
 
  def funB(n):
      reutrn funA * 3
funB(9)

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

比较两种函数的写法,可以看出 funC 写法要优于 funB

例如:

def funD(n):
    return n * 10
# 需求变更,需要把 n 放大 30 倍,此时 funB 无法实现
print(funC(7,funD))

系统高阶函数  -  map

     本意就是映射,把集合或列表的元素,每一个元素都按照一定规则进行操作,生成一个新的列表或集合

       map 函数是系统提供的具有映射功能的函数,返回值是一个迭代对象

# map 函数实例

# 有一个列表,想对列表的每一个元素乘以 10 ,并的到新的列表

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

利用 map 实现此功能

def mulTen(n):
      return n * 10
L3 = map(mulTen,L1)
for i in L3:
     print(i)

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

# 对于列表 [1,2,3,4,5,6]执行myAdd 的 reduce 操作
rst = reduce(myAdd,[1,2,3,4,5,6])
print(rst)
原文地址:https://www.cnblogs.com/yuanjian6/p/10176583.html