Python中如何对函数多参数求和并赋值给变量?
密码生成函数中参数求和的更优实现方法
你尝试用zip()和sum()时触发的错误翻译为:
TypeError: 不支持的操作数类型 +: 'int' 和 'tuple'
这个错误的原因是zip()会把三个单个整数打包成元组序列,而sum()无法将整数与元组相加——sum()需要的是由数值组成的可迭代对象(比如列表、元组),而非zip处理后的元组集合。
更优的求和实现方式
你可以把三个参数放进元组或列表中,用sum()计算总和,比逐个相加更简洁,后续参数数量增加时也更易维护:
写法1:使用元组传入sum()
password_length = sum((num_letters, num_digits, num_special_char))
写法2:使用列表传入sum()
password_length = sum([num_letters, num_digits, num_special_char])
额外优化:让函数参数更灵活
如果后续可能新增密码字符类型的参数,可以把函数定义改为接受可变数量参数,求和逻辑无需修改:
def password_gen(*counts): password_length = sum(counts) # 对应调整字符类型列表,与参数顺序匹配 char_types = [string.ascii_letters, string.digits, string.punctuation] password = [] for count, chars in zip(counts, char_types): password.extend(secrets.choice(chars) for _ in range(count)) # 其余生成、打乱、输出逻辑不变
补充说明
你最初直接相加的写法num_letters + num_digits + num_special_char本身没有问题,针对固定三个参数的场景可读性很强。sum()写法的优势在于参数数量增多时,无需逐个编写加号,代码更简洁易维护。
内容的提问来源于stack exchange,提问作者Feb Anene
相关产品推荐
相关产品推荐

