猿问

这是什么类型的理解?

我遇到了以下 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()迭代器(以及生成器)一样工作,我们实际上在这里有一个生成器语法?()如果是,我们可以在函数调用中创建生成器对象时省略周围吗?


喵喔喔
浏览 122回答 2
2回答

梦里花落0921

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

ibeautiful

它创建了一个迭代器,就像在列表推导中一样。以pythonwiki 中的这个例子为例:# list comprehensiondoubles = [2 * n for n in range(50)]# same as the list comprehension abovedoubles = list(2 * n for n in range(50))两者都是列表推导,但前一种情况更熟悉。我相信你的例子依赖于后一种情况。我链接的 wiki 将此称为生成器表达式。
随时随地看视频慕课网APP

相关分类

Python
我要回答