【问题标题】:How does the f-string in this Python function work?这个 Python 函数中的 f 字符串是如何工作的?
【发布时间】:2020-06-16 08:37:45
【问题描述】:

您好,我在某个网站的某个地方找到了以下功能,但有几个问题。该函数返回由星号组成的 n 行菱形。

  1. 这是一个串联的 for 循环吗?你能做到吗?
  2. 那个 f-string 发生了什么? '':*<{line*2+1} 是如何工作的?
def diamond(n):
    result = ""
    for line in list(range(n)) + list(reversed(range(n-1))):
        result += f"{'': <{n - line - 1}} {'':*<{line*2+1}}\n"

    return result

【问题讨论】:

  • 它在文档中。我不想将其复制粘贴到答案中,所以这是链接:docs.python.org/3/reference/lexical_analysis.html#f-strings
  • 当您说“级联循环”时,您指的是循环的哪一部分?
  • fstring 基本等同于' ' * (n - line - 1) + '*' * (line*2+1) + "\n"
  • 也可以查看this docs了解更多信息
  • @Arcanefoam for line in list(range(n)) + list(reversed(range(n-1))): 带有加法运算符的部分。这样使用有什么效果?说两个 for 循环的语法糖是公平的吗?

标签: python python-3.x f-string pep


【解决方案1】:

关于迭代:是的,它对两个范围的串联进行迭代,但这不是最优化的方法。使用itertools.chain() 似乎是一个更好的选择。

对于格式化部分:f"{'':*&lt;{n}}" 的字面意思是“用* 将空字符串右填充到n 字符的长度”。换句话说,'*' * n 是一种神秘的说法。

更一般地说,: 之后的所有内容都定义了format specification mini-language 中的格式。

总的来说,这是一段相当糟糕的代码,不要拿它当例子。

【讨论】:

  • 啊,谢谢,这更有意义!您能否举一个不同的例子来说明 :&lt; 运营商在这里所做的事情?冒号只是附加到字符串的一种方式吗?
  • @MaxPhillips 格式语言描述为here,但也有一个很棒的网站PyFormat 提供了大量示例。
  • 你说得对,这是一个很棒的网站!会仔细看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多