20、初识面向过程与函数式编程

Python函数 / 2020-12-05

1、何为编程范式?

简单来说就是编程的套路,常见的编程范式有:

  • 面向对象编程

  • 函数式编程

  • 面向对象编程

    它们之间并没有高低之分!

2、面向过程编程

面向过程的编程思想核心是过程,过程即流程,指的是做事的步骤:先、再、后!基于该思想编写程序就好比在工厂设计一条流水线,既然是流水线那么优缺点也会一目了然!

2.1、优点

流水线能把一个复杂的问题流程化,进而简单化,各工位只需要专注做好自己的事情即可,毋须关心其它地方!

2.2、缺点

可调整性、可扩展性差!很容易理解,流水线当中只要其中一环出问题,后续全遭殃,改造也是牵一发而动全身!

2.3、为什么还要用它

1、并非所有软件都需要频繁更迭,比如脚本,写完后撂那基本就不会改了!

2、即便是软件需要频繁更迭,也不代表软件的所有的组件都需要一起更迭。还是脚本,你可能只是修复错误而已!

3、函数式编程

将计算机的运算视为数学意义上的运算,主要思想是把运算过程尽量写成一系列嵌套的函数调用!其实Python并不是一门一函数式编程为主要思想的编程语言,但是Python仍然提供了一系列函数式编程的一些特性的函数!

3.1、匿名函数lambda

顾名思义,匿名即没有名字,统一叫lambda!与之对应的是有名函数,即用def定义的函数!既然没有名字,按照Python垃圾回收机制,引用次数为零的名称会被立即回收!因此,lambda是一次性函数,适用于嵌套在别的函数中充当一次性消耗品使用!

下面来个最简单的有名与匿名函数定义对比

# 下面是有名函数定义
>>> def number(a, b):
...     print(a + b)
number(3, 5)

# 下面是匿名函数定义
>>> print(lambda a, b: a + b)
<function <lambda> at 0x03937070>
3.2、max与lambda

max()函数可以用来比较大小!比如我们下面的例子,因此是字典因此默认迭代出来的是key,所以得手动指定用来比较的key,这时候max与lambda组合就派上用场了!

# max(args, key),其中参数是可迭代对象,key必须是函数
salaries = {'xuxin': 2600, 'andy': 4500, 'sanxi': 6500, 'chrystal': 10000}

print(max(salaries, key=lambda k: salaries[k]))

# 执行得到结果
chrystal

# 在这其中涉及到的原理:
# 1、max会迭代可迭代对象salaries,将每次取出来的值作为参数传递给后面的函数
# 2、后面的字典拿到key后,返回key所对应的value
# 3、比较大小
3.3、min与lambda

很明显是比较最小值,用法同上!

salaries = {'xuxin': 2600, 'andy': 4500, 'sanxi': 6500, 'chrystal': 10000}
print(min(salaries, key=lambda k: salaries[k]))

# 执行得到结果
xuxin
3.4、sorted与lambda

sorted用来排序的,用法同上!

salaries = {'andy': 4500, 'sanxi': 6500, 'chrystal': 10000, 'xuxin': 2600, }
# sorted前两个参数用法同上函数,但是第三个默认参数是顺序参数,默认为从低到高,reserve为倒序!
print(sorted(salaries, key=lambda k: salaries[k]))

# 执行得到结果
['xuxin', 'andy', 'sanxi', 'chrystal']
世间微尘里 独爱茶酒中