我遇到了以下 Python 代码,但无法理解它:''.join(random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits) for i in range(length))for循环告诉我这是一种理解,但是是什么类型的?这不是列表理解,因为[]缺少(除非这里有特殊的语法)。我试图通过运行来解决它random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits) for i in range(length)直接在解释器中,但在for.我做了一些挖掘,得出了一个不太确定的结论,这就是所谓的生成器理解,但我没有找到任何看起来像这样的例子;他们都使用()符号来创建生成器对象。那么,它是否像join()迭代器(以及生成器)一样工作,我们实际上在这里有一个生成器语法?()如果是,我们可以在函数调用中创建生成器对象时省略周围吗?
2 回答

梦里花落0921
TA贡献1772条经验 获得超6个赞
您需要
join()
,因为列表包含字符,并且您想要获取一个字符串,因此join()
random.choice()
从参数列表中选择随机字符参数列表包含 ASCII 大写/小写字符和数字
结果字符串的长度是
length
总之,这行代码生成一个随机字符串,其长度length
包含大写/小写字母和数字。
这是一个简单的旧列表理解,只是[]
缺少,因为您使用时不需要join()

ibeautiful
TA贡献1993条经验 获得超6个赞
它创建了一个迭代器,就像在列表推导中一样。以pythonwiki 中的这个例子为例:
# list comprehension
doubles = [2 * n for n in range(50)]
# same as the list comprehension above
doubles = list(2 * n for n in range(50))
两者都是列表推导,但前一种情况更熟悉。我相信你的例子依赖于后一种情况。我链接的 wiki 将此称为生成器表达式。
添加回答
举报
0/150
提交
取消