首页 > 编程语言 >python-面向过程与函数式

python-面向过程与函数式

时间:2022-09-28 18:33:48浏览次数:65  
标签:函数 python res salaries 匿名 面向 print lambda

面向过程与函数式

面向过程

”面向过程“核心是“过程”二字,“过程”指的是解决问题的步骤,即先干什么再干什么......,基于面向过程开发程序就好比在设计一条流水线,是一种机械式的思维方式,这正好契合计算机的运行原理:任何程序的执行最终都需要转换成cpu的指令流水按过程调度执行,即无论采用什么语言、无论依据何种编程范式设计出的程序,最终的执行都是过程式的。

1、优点

将复杂的问题流程化,进而简单化

2、缺点

程序的可扩展性极差,

3、应用场景

面向过程的程序设计一般用于那些功能一旦实现之后就很少需要改变的场景, 如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程去实现是极好的,但如果你要处理的任务是复杂的,且需要不断迭代和维护, 那还是用面向对象最为方便。

函数式

函数式编程并非用函数编程这么简单,而是将计算机的运算视为数学意义上的运算,比起面向过程,函数式更加注重的是执行结果而非执行的过程,代表语言有:Haskell、Erlang。而python并不是一门函数式编程语言,但是仍为我们提供了很多函数式编程好的特性,如lambda,map,reduce,filter

匿名函数lambda

对比使用def关键字创建的是有名字的函数,使用lambda关键字创建则是没有名字的函数,即匿名函数,语法如下

lambda 参数1,参数2,...: expression

案例:

# 1、定义
lambda x,y,z:x+y+z

#等同于
def func(x,y,z):
    return x+y+z

# 2、调用
# 方式一:
res=(lambda x,y,z:x+y+z)(1,2,3)

# 方式二:
func=lambda x,y,z:x+y+z # “匿名”的本质就是要没有名字,所以此处为匿名函数指定名字是没有意义的
res=func(1,2,3)
print(res)

匿名函数与有名函数有相同的作用域,但是匿名意味着引用计数为0,使用一次就释放,所以匿名函数用于临时使用一次的场景,匿名函数通常与其他函数配合使用

案例

salaries={
    'siry':3000,
    'tom':7000,
    'lili':10000,
    'jack':2000
}

要想取得薪水的最大值和最小值,我们可以使用内置函数max和min(为了方便开发,python解释器已经为我们定义好了一系列常用的功能,称之为内置的函数,我们只需要拿来使用即可)

print(max(salaries))
print(min(salaries))
#默认根据字符比较大小


"""结果如下"""
tom
jack

内置max和min都支持迭代器协议,工作原理都是迭代字典,取得是字典的键,因而比较的是键的最大和最小值,而我们想要的是比较值的最大值与最小值,于是做出如下改动

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

"""结果如下"""
lili
jack

直接对字典进行排序,默认也是按照字典的键去排序的

print(sorted(salaries))

"""结果如下"""
['jack', 'lili', 'siry', 'tom']

根据值的最大值与最小值排序

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

"""结果如下"""
['jack', 'siry', 'tom', 'lili']
  • 特点

    • 使用lambda关键字创建函数
    • 没有名字的函数
    • 匿名函数冒号后面的表达式只有一个,注意:是表达式,而不是语句
    • 匿名函数自带return,而这个return的结果是表达式计算后的结果
  • 缺点

    • lamdba只能是单个表达式:不是一个代码块,lamdba的设计就是为了满足简单的函数场景
    • 仅仅能封装有限的逻辑,复杂逻辑实现不了,必须使用def来处理
#匿名函数
m=lambda x,y:x+y
#通过变量去调用匿名函数
print(m(23,19))
M=lambda a,b,c:a*b*c
print(M(1,2,3))

age =15
print('可以继续参军,'if age>18 else'继续上学')
C=lambda x,y:x if x>y else y
print(C(1,5))

re=(lambda  x,y:x if x<y else y)(16,12)
print(re)

Rs=lambda x:(x**2)+890
print(Rs(10))
map、filter、reduce(了解)
l = ['zhoa', 'lisi', 'wangwu ']

res = map(lambda name: name + '_dsb', l)
print(res)  # 生成器
res1 = filter(lambda name: name.endswith('u'), l)
print(res1)

from functools import reduce

res3=reduce(lambda x, y: x + y, [1, 2, 3],10)
print(res3)

"""结果如下"""
<map object at 0x0000014D2CDF7E80>
<filter object at 0x0000014D2CDF7D60>
16

标签:函数,python,res,salaries,匿名,面向,print,lambda
From: https://www.cnblogs.com/saury/p/16739187.html

相关文章

  • 学习Python之变量
    一、变量的使用1、单个变量#变量aa="Helloworld1!"print(a)2、多个变量#变量aa="Helloworld1!"print(a)#变量bb="Helloworld2!"print(b)3、单个变量替换#变量aa="H......
  • Pythontext_3
    1实例一:输出每日一帖2importdatetime#导入日期时间表3#定义一个列表4mot=["今天星期一:\n坚持下去不是因为我很坚强,而是......
  • Go基础编程:自定义函数
    定义格式函数构成代码执行的逻辑结构。在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。Go语言函数定义格式如下:funcFuncName(/*参......
  • Go基础编程:递归函数、函数类型、匿名函数与闭包
    1.递归函数递归指函数可以直接或间接的调用自身。递归函数通常有相同的结构:一个跳出条件和一个递归体。所谓跳出条件就是根据传入的参数判断是否需要停止递归,而递归体则是......
  • Python字节流,字符串,16进制相互转换
    python版本:Python3.81.字节流转成字符串2.字符串变字节流3.16进制字节流变成字节流4.16进制字符串变成字符串字节流 ......
  • 8、python正式篇 for循环和range的使用
    目录一、while循环补充说明1、死循环2、嵌套及全局标志位二、for...循环1、for...循环特点2、for...循环语法结构三、range方法1、什么是range2、不同版本python,range区别3......
  • Python 基础入门(六)
    Python基础入门(六)目录Python基础入门(六)一、while循环补充说明1、死循环2、嵌套及全局标志位二、流程控制之for循环for循环特点不同取值类型结果三、range方法一、while......
  • Python 变量,注释,字符串,快捷键
    Python学习其他语言通过括号,大括号表示各个模块所属关系,而python是通过缩进,所以缩进对于python尤为重要1.变量1.1和其它语言不同,python中变量不用提前声明,每个语句之后......
  • 基于Python的socket套接字的简单使用
    socket:进行应用程序之间的网络信息交互的工具几乎市面上所有具有网络通讯功能的软件,底层都使用了socket两个进程,分别开启sokcet服务,使用scoket可以在进程间进行通讯......
  • 使用Python的Win32api接口实现后台的键鼠模拟的消息模拟
    importtimeimportwin32apiimportwin32conimportwin32guiclassVirtual_Keyboard(object):def__init__(self,hwnd):self.hwnd=hwnds......