本篇文章记录的是Python匿名函数和面向过程编程的知识。
一、lambda
对比使用def关键字创建的是有名字的函数,使用lambda关键字创建则是没有名字的函数,即匿名函数
语法如下:
lambda 参数1,参数2:返回值
[定义]
lambda x, y: x + y # lambda自带一个return
print(lambda x, y: x + y)
[调用]
# 调用匿名函数 : 函数内存地址 + ()
# 方式一:
res = (lambda x, y: x + y)(1, 2)
print(res)
# 方式2:
x = (lambda x, y: x + y)
res1 = x(3, 5)
print(res1)
以上都不是匿名函数的真正调用方式 , 因为匿名函数的精髓就在于没有名字 , 你这又搞出来一个名字 , 那你干嘛不
用有名函数 def 关键字定义呢?
[应用场景]
匿名函数与有名函数有相同的作用域,但是匿名意味着引用计数为0,使用一次就释放,所以匿名函数用于临时使
用一次的场景,匿名函数通常与其他函数配合使用
[max函数]
接收一个可迭代对象 , 然后比较 , 返回最大值 , 可设置比较的依据
# 需求:打印出薪资最高的那个人的名字
salary_dic = {'tom': 100, 'alex': 500, 'jack': 200}
res = max(salary_dic)
# max直接迭代字典,只会把字典的key作为比较依据,我们需要把值作为依据,可指定key的值
def func(k):
return salary_dic[k]
res = max(salary_dic, key=func)
# max会把迭代的每一个值传递给key指定的函数内存地址当做实参,然后通过函数的返回值作为比较的依据
print(res) # alex
但是你发现了吗 , func这个函数 , 只适用于这次比较大小 , 没有其他可用的作用了 , 既然只用一次 , 那么用匿名函
数岂不美哉
# k就是函数的形参,实参在代码层面你是看不到的,但是执行起来会传参
res = max(salary_dic, key=lambda k: salary_dic[k])
print(res)
[min函数]
salary_dic = {'tom': 100, 'alex': 500, 'jack': 200}
# max取最大,min取最小
res1 = min(salary_dic, key=lambda k: salary_dic[k])
print(res1)
[stored函数]
sorted 排序
,也可以指定比较依据,默认reserve=False
,是从小到大排列,可以设为True,从大到小排列
salary_dic = {'tom': 100, 'alex': 500, 'jack': 200}
res2 = sorted(salary_dic, key=lambda k: salary_dic[k])
print(res2)
二、面向过程编程
1、 介绍
面向过程
(Procedure Oriented)是一种以过程为中心
的编程思想,是一种基础的方法,它考虑的是实际地实现
基于该思想编写程序就好比一条流水线首先分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,
使用的时候一个一个依次调用就可以了
比如拿学生早上起来去上学这件事说明面向过程,粗略的可以将过程拟为:
(1) 起床
(2) 穿衣
(3) 洗脸刷牙
(4) 去学校
# 第一步,起床
def get_up():
print('我起床了')
# 第二步,穿衣
def dress():
print("穿衣服")
# 第三步,洗脸刷牙
def brush_teeth():
print('刷牙,洗脸')
# 第四步,去学校
def go_school():
print("去学校")
def main():
get_up()
dress()
brush_teeth()
go_school()
这4步就是一步一步地完成,它的顺序很重要,你只需要一个一个地实现就行了。而如果是用面向对象的方法的
话,可能就只抽象出一个学生的类,它包括这四个方法,但是具体的顺序就不一定按照原来的顺序。
2、 优缺点
[优点]
复杂问题流程化 , 进而简单化 , 这也是计算机最本质的工作模式 , 最喜欢的工作模式 , 一步一步的来
[缺点]
扩展性非常差
3、 应用场景
- 不是所有的软件都需要频繁更迭 : 比如编写脚本
- 即便是一个软件需要频繁更迭,也不并不代表这个软件所有的组成部分都需要频繁迭代
总结
对于我们 python&安全 , 基本上刚开始写的都是一些小脚本 , 这样写就ok了
如果你是做大型项目 , 这个需要学习一下系统的 python开发