面向过程编程

一、面向过程编程

面向过程是一门编程思想

面向 | 过程 | 编程:

​ 核心是‘过程’,过程指的是一种解决问题的步骤,即先做什么再做什么,基于编程思想写程序,好比在设计一条工厂流水线,一种机械师的思维方式

  • 优点
    • 将复杂的问题流程化,进而简单化
  • 缺点
    • 可扩展性差(牵一发而动全身,若修改当前程序设计的某一部分,会导致其他部分同时需要修改,扩展性差)
def get_user_pwd(): # 获取用户注册的用户名和密码
    while True:
        username = input('请输入注册的用户名:').strip()
        if username.isalpha():
            break
        else:
            print('您输入的用户名不合法,请重新输入')
    while True:
        password = input('请输入注册的密码:').strip()
        re_password = input('请确认密码:').strip()
        if password == re_password:
            break
        else:
            print('您输入的两次密码不一致')
    return username, password


def cut_user_pwd(user, pwd):    # 用户名密码拼接字符串
    user_pwd_str = f'{user}:{pwd}
'
    return user_pwd_str


def save_data(user_pwd_str):
    with open('user_name.txt', 'a', encoding='utf-8') as f:
        f.write(user_pwd_str)


def register(): # 注册
    # 先让用户输入用户名和密码,效验合法性
    user, pwd = get_user_pwd()
    # 设计字符串的拼接,得到拼接好的字符串
    user_pwd_str = cut_user_pwd(user, pwd)
    # 写入文件
    save_data(user_pwd_str)


register()

二、匿名函数

匿名函数:无名字的函数

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

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

举例:

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

匿名函数需要一次使用,单独使用毫无意义,它必须配合“内置函数”一起使用

函数中的关键字 def 和 return已经自动添加了,所以只需 lamdba 参数即可


三、内置函数

Python内部提供的内置方法,如

print()
range()
len()
  • max 求最大值

  • min 求最小值

获取字典(字典中,value最大的key的名字)

max(dict1,key=lambda x:dict1[x])

例如:

dict1 = {
     'tank': 1000,
     'egon': 500,
     'sean': 200,
     'jason': 500
 }

print(max(dict1,key = lambda x:dict1[x]))
print(min(dict1,key = lambda x:dict1[x]))
tank
sean
  • sorted:默认升序(从小到大) reverse:反转 reverse默认是False

例如:

list1 = [3, 5, 4, 8, 9, 7, 6, 1, 2]
print(sorted(list1))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
# 反转 
print(sorted(list1, reverse= True))
[9, 8, 7, 6, 5, 4, 3, 2, 1]
  • map:映射
    • map(函数地址,可迭代对象)——> map对象

​ map会将可迭代对象中的每一个值进行修改,然后映射到一个map对象中

​ 可以再将map对象转换成列表/元组。 注意:只能转一次

定义一个可迭代对象

array = [1, 2, 3, 4, 5])

对每个元素做平方处理

res1 = map(lambda x : x **2, array)
print(res1)		#直接打印是一个内存地址
print(list(res1))	# 所以转换成list后打印

<map object at 0x0000021E34B376D8>	
[1, 4, 9, 16, 25]
  • reduce:合并
    • reduce(函数地址, 可迭代对象, 初始值 默认为0)

​ 每次从可迭代对象中获取两个值并合并

​ 初始值:执行reduce函数时,都是从初始值开始合并

​ reduce函数可以接收三个参数,一个是函数,第二个是可迭代对象,第三个是初始值

求上面array的和

from functools import reduce
res2 = reduce(lambda x, y: x + y, array)
print(res2)
15

默认第三个参数初始值为0 ,但也可以自己指定

from functools import reduce
res2 = reduce(lambda x, y: x + y, array, 100)
print(res2)
115
  • filter:过滤
    • filter(函数地址 可迭代对象)

例如将array中大于3的元素过滤出来

res3 = filter(lambda x : x > 3, array)
print(res3)	# 得到的结果仍然是迭代器
print(list(res3))

<filter object at 0x000002350F8E76D8>
[4, 5]
原文地址:https://www.cnblogs.com/YGZICO/p/11889306.html