Python中为何用str.isdigit配合map检测密码中的数字?
关于Python中isdigit()方法的两种用法差异解析
先看你用到的密码校验代码:
def is_acceptable_password(password: str) -> bool: cond1 = len(password) > 6 cond2 = any(map(str.isdigit, password)) if cond1 & cond2 == True: return True else: return False
为什么password.isdigit()不符合需求?
password.isdigit()是字符串的实例方法,它的作用是检查整个字符串的所有字符是否都是数字。只有当字符串里每一个字符都是数字时,才会返回True。比如"123456".isdigit()返回True,但"abc123".isdigit()返回False,完全没法满足「检测密码中是否包含至少一个数字」的需求。
str.isdigit配合map和any的工作机制
str.isdigit的本质:这是字符串类str的方法,可以直接作为一个函数来使用,它接收单个字符作为参数,判断该字符是否为数字,返回布尔值。map的作用:map(str.isdigit, password)会遍历password字符串中的每一个字符,把每个字符依次传入str.isdigit方法中执行(等价于对每个字符c调用c.isdigit()),最终生成一个迭代器,里面装着每个字符的检测结果(True/False)。any()的作用:any()函数会遍历这个迭代器,只要其中存在至少一个True,就立刻返回True,正好实现了「密码中包含至少一个数字」的检测逻辑。
代码小优化
原代码里的cond1 & cond2 == True可以简化,另外&是按位与运算符,这里应该用逻辑与and,最终可以把函数简化成:
def is_acceptable_password(password: str) -> bool: return len(password) > 6 and any(map(str.isdigit, password))
内容的提问来源于stack exchange,提问作者Stanislav Ismailov
相关产品推荐
相关产品推荐

