python重构迭代_Python 代码重构:使用 any()和 all() 重构 for 循环

本文介绍了如何使用Python内置的any()和all()函数重构for循环,以提高代码简洁性和效率。通过两个实例展示了如何检查用户是否存在以及用户组是否所有成员都设置了密码,并对比了重构前后的代码运行效果。
摘要由CSDN通过智能技术生成

问题描述

使用 for 迭代一个可迭代对象,对每个对象进行条件判断,比如找到任何一个符合条件的元素,就返回 True,否则返回False。这种操作经常用于找符合条件的元素。

代码片段 例1def is_user_exist(name: str) -> bool:

for user in users:

if user['user'] == name:

return True

return False

运行:判断用户是否存在In [33]: users = [{'user':'john','password':'mypassword'}, {'user':'william', 'password':'yourpass'}]

In [38]: is_user_exist('john')

Out[38]: True

In [39]: is_user_exist('johny')

Out[39]: False

重构

使用 any(iterable)重构def is_user_exist_v2(name: str) -> bool:

return any(user['user'] == name for user in users)

运行In [43]: is_user_exist_v2('john')

Out[43]: True

In [44]: is_user_exist_v2('johnny')

Out[44]: False

In [45]:

代码片段 例 2from typing import List, Dict

def all_user_has_password(usergroup: List[Dict]) -> bool:

for user in usergroup:

if user['password'] == '':

return False

return True

运行:判断用户组是否都设置了密码In [49]: users_group1 = [{'user':'john','password':'mypassword'}, {'user':'william', 'password':'yourpass'}]

In [50]: users_group2 = [{'user':'john','password':'mypassword'}, {'user':'william', 'password':'yourpass'}, {'user': 'user1', 'password':''}]

In [58]: all_user_has_password(users_group1)

Out[58]: True

In [59]: all_user_has_password(users_group2)

Out[59]: False

重构

使用 all(iterable) 进行重构def all_user_has_password_v2(usergroup: List[Dict]) -> bool:

return all(user['password'] != '' for user in usergroup)

运行In [61]: all_user_has_password_v2(users_group1)

Out[61]: True

In [62]: all_user_has_password_v2(users_group2)

Out[62]: False

总结

适当地使用 all()和 any() 可以有效减少代码的复杂度,能够很容易的对一个可迭代对象进行条件判断。

注,v2 的后缀是个非常不好的命名,在这里使用仅仅为了区分两个函数,不应该在代码中这样命名

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值