Python中对字符串调用random.choice是否可能返回空字符串?
结论
random.choice(string.ascii_letters) 绝对不会返回空字符串""。
原因说明
- Python 中字符串的
in运算符存在特殊规则:空字符串""被定义为所有字符串的子串,因此无论字符串内容是什么,"" in 任意字符串的返回值永远为True,这个判断结果只代表子串匹配关系,不代表空字符串是该字符串的组成元素。 string.ascii_letters是由26个大写英文字母、26个小写英文字母拼接而成的长度为52的字符串,它的每一个元素都是长度为1的单字符,不存在空字符串元素。random.choice()的运行逻辑是从传入的序列中随机选取一个序列元素,因此只会在52个单字符中做选择,永远不会返回空字符串。
补充说明
如果想要更直观验证空串不是可选元素,可以将ascii_letters转为列表后再做in判断,此时"" in list(string.ascii_letters)会返回False,也可以直接转列表后再调用random.choice(),逻辑和直接传入字符串完全一致:
import string import random char_list = list(string.ascii_letters) res = random.choice(char_list)
内容的提问来源于stack exchange,提问作者veracruz
相关产品推荐
相关产品推荐

