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']