Python基础之函数式编程

文章目录

  • 简述
  • 方法应用
    • 纯函数
    • 高阶函数
    • 装饰器模式
  • python中可用于函数式编程的特性

简述

“函数式编程"是一种"编程范式”(programming paradigm),也就是如何编写程序的方法论。
它属于"结构化编程"的一种,主张放弃复杂的过程,以若干单元逐层推到运算过程,通过将输入数据与输入结果构建数学映射关系的方式来解决问题
核心理念:输入数据与输出结果之间的数学映射关系
主要特性

  • 函数是"第一等公民"
    • 函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。
  • 只用"表达式",不用"语句"
    • “表达式”(expression)是一个单纯的运算过程,总是有返回值;“语句”(statement)是执行某种操作,没有返回值。
    • 函数式编程的开发理念便是只处理计算,不考虑系统的读写
    • "语句"属于对系统的读写操作,所以就被排斥在外。
      当然,实际应用中,不做I/O是不可能的。因此,编程过程中,函数式编程只要求把I/O限制到最小,不要有不必要的读写行为,保持计算过程的单纯性。
  • 没有"副作用"
    • 不产生运算以外的其他结果,I/O操作或修改变量等
  • 数据不可变
    • 函数式编程只是返回新的值,不修改原有变量
  • 引用透明
    • 不依赖外部状态

优势: a. 易调试 b. 简洁 c.易被缓存 d. 有利于创建并发
劣势: a. 抽象,难学 b. 创建多余变量,占用内存高

方法应用

纯函数

a. 无副作用(不会改变作用域外的变量)
b. 相同的输入产生相同的输入(其内部不存在随机或可变的变量,且不能依赖函数外的变量)

案例一

# 非纯函数		
value_dic = {'a': 1}; 
def  func(input_dic): 
       b = 1
       input_dic['a'] = input_dic['a'] * b + 2
       return input_dic['a']
# 在计算输出值的同时,修改了输入值
# 纯函数
value_dic = {'a': 1}; 
def  func(input_dic): 
       b = 1
       a = input_dic['a'] * b + 2
       return a
# value_dic未发生改变,相同的输入产生相同的输入

案例二

# 非纯函数		
value_dic = {'a': 1}; 
b = 1
def  func(input_dic): 
       a = input_dic['a'] * b + 2
       return a
#  函数的返回值依赖外部变量b,当外部变量发生变化时,返回值也会发生变化
# 纯函数
 value_dic = {'a': 1}; 
def  func(input_dic, input_b): 
       b = 1
       a = input_dic['a'] * input_b + 2
       return a
# 将外部变量作为明确的输入值,防止出现不确定结果

高阶函数

  • 可以接收函数作为参数或者返回一个函数作为结果的函数
  • python自带的高阶函数
    1. lambda
    2. map
    3. filter
    4. sorted
    5. min
    6. max

装饰器模式

  • 面向切面编程思想
  • Python中的装饰器
  • 自定义装饰器

python中可用于函数式编程的特性

  • 元组: 满足值不可更改

  • 生成器

    • 生成器推导式

    • 生成器函数

  • 一类函数

    • 被视作数据类型的纯函数

    • lambda表达式

  • 高阶函数

  • 内建函数any、all

  • 递归函数替换迭代

你可能感兴趣的:(Python基础之函数式编程)