为了账号安全,请及时绑定邮箱和手机立即绑定

这是什么类型的理解?

这是什么类型的理解?

喵喔喔 2022-06-28 17:59:02
我遇到了以下 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个赞

  1. 您需要join(),因为列表包含字符,并且您想要获取一个字符串,因此join()

  2. random.choice()从参数列表中选择随机字符

  3. 参数列表包含 ASCII 大写/小写字符和数字

  4. 结果字符串的长度是length

总之,这行代码生成一个随机字符串,其长度length包含大写/小写字母和数字。

这是一个简单的旧列表理解,只是[]缺少,因为您使用时不需要join()


查看完整回答
反对 回复 2022-06-28
?
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 将此称为生成器表达式。


查看完整回答
反对 回复 2022-06-28
  • 2 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号