溪明轩

  • Python全栈开发
  • 三溪杂选
  • 爬虫快速入门
  • 首页
  • 文章归档
  • 关于页面

  • 搜索
consul ELK Loki M3DB Thanos TSDB federate ALertmanager PromQL Grafana prometheus nginx Rest Framework 热视图 ansible 网络安全 云盘 wiki Python 爬虫

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

发表于 2020-12-05 | 分类于 Python函数 | 0 | 阅读次数 162

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']
Donate comment here
三溪 微信支付

微信支付

三溪 支付宝

支付宝

  • 本文作者: 三溪
  • 本文链接: https://blog.sanxi.info/archives/2-0--chu-shi-mian-xiang-guo-cheng-yu-han-shu-shi-bian-cheng
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-ND 4.0 许可协议。转载请注明出处!
19、Python算法之二分法
21、Python之模块基础
  • 文章目录
  • 站点概览
三溪

三溪

作诗不作法

120 日志
23 分类
20 标签
RSS
Creative Commons
Links
  • halo官网
  • 玻璃之空
0%
© 2022 三溪
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4
世间微尘里 独爱茶酒中