【问题标题】:Can for loop be used as part of a function variable in Python? [closed]可以将 for 循环用作 Python 中函数变量的一部分吗? [关闭]
【发布时间】:2020-12-21 21:35:55
【问题描述】:

我遇到了这样一行python代码:

''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(8))

这有点令人困惑..有人知道它的作用吗?

【问题讨论】:

  • 这是一个生成器表达式。还有语法类似的列表、字典和集合推导。
  • 旁注:在现代 Python 中,生成器表达式不是必需的,因为 random 产生了 choices(复数)方​​法。所以你可以只写''.join(random.choices(string.ascii_lowercase + string.digits, k=8))(这也可以避免重复连接ascii_lowercasedigits)。
  • 具体是哪一部分的问题?请参阅How to Askhelp center

标签: python generator-expression


【解决方案1】:

''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(8))

当你看到这样的表情时,最好是把它拆开,一步一步来。

  • '' 是一个空字符串
  • .join(...) 将连接所有字符(...部分)并将其添加到空字符串中
  • random.choice(...) 会随机选择任意字符
  • string.ascii_lower + string_digits 创建一个包含所有小写字符和所有数字的字符串
  • for _ in range(8) 表示执行了 8 次(从技术上讲,这是一个生成器表达式)

因此,整个表达式返回一个由 8 个字符组成的随机字符串,全部小写或数字。

要了解有关生成器表达式的更多信息,Dan Bader has a nice tutorial。如果您想知道如何得出这样的表达式,最好学习 Python 文档,the official tutorial 是一个好的开始。

【讨论】:

    【解决方案2】:

    我试过这段代码:

    import random
    import string
    
    a = 'abcdefghijk'
    print(a.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(8)))
    

    它给了我这个输出:

    tabcdefghijk2abcdefghijk7abcdefghijktabcdefghijklabcdefghijkoabcdefghijkfabcdefghijk0
    

    我相信它需要一个输入字符串并将其与随机小写字母或随机数字粘贴在一起 7 次。 (7 次,因为两端各有一个,因此有 8 个连接数字)。

    【讨论】:

    • 你为什么在问题中使用a.join而不是''.join
    • 对不起...认为 '' 是 .join 周围的引号,因为那是在它被编辑之前并且不太明显。最后,我觉得它让 .join 函数实际上在做什么变得更加清晰。
    猜你喜欢
    • 2013-06-18
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2018-01-01
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多