如何在未定义输入类型的Python函数中获取不同类型的多输入
首先你需要明确:当前你要处理的是混合类型输入,包含布尔值、整数两种类型,直接全量转int的写法会直接抛出转换错误,完全不适用你的场景。两种常用的处理方案如下:
按行输入场景(第一行输入False,第二行输入31, 57, 78)
- 先注意Python版本差异:
- Python 2 内置的
raw_input()会把所有输入当字符串返回,而input()会自动解析输入的字面量类型,输入False会直接返回布尔值False - Python 3 已经把两个方法合并为
input(),所有输入默认返回字符串,需要手动处理类型转换
- Python 2 内置的
- 通用兼容写法参考:
def func(): res = [] # 处理第一行布尔值 line1 = input().strip() if line1 == 'False': res.append(False) elif line1 == 'True': res.append(True) # 处理第二行数字,先去掉逗号再拆分转整数 line2 = input().strip() num_list = [int(i) for i in line2.replace(',', '').split()] res.extend(num_list) return res
- 不建议一次性读取所有输入,不同行的输入类型规则不同,拆分处理逻辑更清晰,后续维护成本更低
注意:Python 2 的
input()会直接执行输入的代码,存在安全风险,不可信输入场景下建议统一手动判断类型转换,不要依赖自动解析特性
同行输入场景(所有内容在同一行输入,例如False, 31, 57, 78)
提前约定用逗号作为分隔符,遍历每个元素逐个判断类型即可:
def func(): input_str = input().strip() items = [i.strip() for i in input_str.split(',')] res = [] for item in items: if item in ('False', 'True'): res.append(eval(item)) elif item.isdigit(): res.append(int(item)) # 其他类型按需补充转换逻辑 return res
内容的提问来源于stack exchange,提问作者rusttree
相关产品推荐
相关产品推荐

