python面向过程和函数式

面向过程式编程

面向过程实际上是一种编程思想,指将一个事件分解为多个小的事件,用编程实现每一个小事件(就是先做什么,在做什么,最后做什么…),这样符合人的思维,并且降低了程序的复杂度

# 写一个用户登录认证程序:
# 获取用户的姓名和密码——>与数据库中的数据进行比对——>根据比对返回登陆结果

# 获取用户姓名和密码
username=input('请输入姓名')
password=input('请输入密码')
# 与数据库中的文件进行对比
with open('a.text',mode='r',encoding='utf-8') as f:
	info=f.read()
# 根据结果返回结果
if username==info['username'] and  password==info'[assword']:
	print('登陆成功')
else:
	print('登陆失败,重新出入')
  • 优点:
    将复杂的问题简化,更加清晰
  • 缺点:
    程序的拓展性差,一旦其中的一个环节发生变化,可能需要修改全部的代码

函数式编程

函数式编程是将计算机的运算视为数学意义上的运算,比起面向过程,函数式更加注重的是执行结果而非执行的过程,换句话说,对于不重要的东西可以设“未知数”

未知数——匿名函数lambda

匿名函数顾名思义,就是没有名字的函数,能够进行一些简单的计算,复杂的计算还是使用函数比较好

# lambda函数介绍
# 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)

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

组合使用——map、filter、reduce函数

# map函数:对单个元素进行处理
res=map(lambda x:x**2,array)  # 两个参数,第一个是函数,第二个是可迭代对象
# map函数能够将可迭代对象中的元素传给前面的函数,返回的结果还是一个可迭代对象
# <map object at 0x1033f45f8>

# filter函数:过滤操作
res=filter(lambda x:x>3,array) # 两个参数,第一个是函数,第二个是可迭代对象
# 该函数可迭代对象中的元素依次传给匿名函数,如果函数的返回值为真,则过滤出该元素,函数返回的结果仍然是迭代器

# reduce函数:对可迭代对象进行合并
from functools import reduce 
res=reduce(lambda x,y:x+y,array)  # 三个参数,一个是函数,第二个是可迭代对象,第三个是初始值(可以不写)
'''
1 没有初始值,reduce函数会先迭代一次array得到的值作为初始值,作为第一个值数传给x,然后继续迭代一次array得到的值作为第二个值传给y,进行一次运算

2 将上一次reduce运算的结果作为第一个值传给x,然后迭代一次array得到的结果作为第二个值传给y,依次类推,直到迭代完array的所有元素,
'''

面向对象

面向对象编程就是要造出一个个的对象,把原本分散开的相关数据(就是一些属性)与功能(函数)整合到一个个的对象里,这么做既方便使用,也可以提高程序的解耦合程度,进而提升了程序的可扩展性
举一个简单的例子,我们打游戏时遇到的各种任务就是一个个对象,属性包括血量,蓝量,攻击力等等,一个个的既能就能看成是一个个函数,整合到一起形成角色这个对象

おすすめ

転載: blog.csdn.net/m0_47438967/article/details/120035883