什么是打印(f“...”)

48 python

我正在阅读一个 python 脚本,它接受 XML 文件的输入并输出一个 XML 文件。但是,我不明白打印语法。有人可以解释一下finprint(f"...")是做什么的吗?

args = parser.parser_args()

print(f"Input directory: {args.input_directory}")
print(f"Output directory: {args.output_directory}")
Run Code Online (Sandbox Code Playgroud)

Pra*_*iel 52

在 Python 3.6 中,引入了f 字符串(格式化字符串文字)( PEP 498)。简而言之,这是一种更易读且更快速的格式化字符串的方法。

\n

例子:

\n
agent_name = \'James Bond\'\nkill_count = 9\n\n\n# old ways\nprint("%s has killed %d enemies" % (agent_name,kill_count))\n\nprint(\'{} has killed {} enemies\'.format(agent_name,kill_count))\nprint(\'{name} has killed {kill} enemies\'.format(name=agent_name,kill=kill_count))\n    \n\n# f-strings way\nprint(f\'{agent_name} has killed {kill_count} enemies\')\n
Run Code Online (Sandbox Code Playgroud)\n

字符串前面的forF 告诉 Python 查看 {} 内的值、表达式或实例,并用变量值或结果(如果存在)替换它们。f 格式化的最大好处是您可以在 {} 中做很酷的事情,例如{kill_count * 100}

\n

您可以使用它来使用打印进行调试,例如

\n
print(f\'the {agent_name=}.\')\n# the agent_name=\'James Bond\'\n
Run Code Online (Sandbox Code Playgroud)\n

零填充、浮动和百分比舍入等格式设置变得更加容易:

\n
print(f\'{agent_name} shoot with {9/11 : .2f} or {9/11: .1%} accuracy\')\n# James Bond shoot with  0.82 or  81.8% accuracy \n
Run Code Online (Sandbox Code Playgroud)\n

更酷的是嵌套和格式化的能力。日期示例

\n
\nfrom datetime import datetime\n\nlookup = {\n    \'01\': \'st\',\n    \'21\': \'st\',\n    \'31\': \'st\',\n    \'02\': \'nd\',\n    \'22\': \'nd\',\n    \'03\': \'rd\',\n    \'23\': \'rd\'\n}\n\nprint(f"{datetime.now(): %B %d{lookup.get(\'%B\', \'th\')} %Y}")\n\n# April 14th 2022\n
Run Code Online (Sandbox Code Playgroud)\n

漂亮的格式也更​​容易

\n
tax = 1234\n\nprint(f\'{tax:,}\') # separate 1k \\w comma\n# 1,234\n\nprint(f\'{tax:,.2f}\') # all two decimals \n# 1,234.00\n\nprint(f\'{tax:~>8}\') # pad left with ~ to fill eight characters or < other direction\n# ~~~~1234\n\nprint(f\'{tax:~^20}\') # centre and pad\n# ~~~~~~~~1234~~~~~~~~\n
Run Code Online (Sandbox Code Playgroud)\n

允许__format__您使用此功能。例子

\n
\nclass Money:\n    \n    def __init__(self, currency=\'\xe2\x82\xac\'):\n        self.currency = currency\n        \n    def __format__(self, value):\n        \n        return f"{self.currency} {float(value):.2f}"\n        \n        \ntax = 12.34\nmoney = Money(currency=\'$\')\nprint(f\'{money: {tax}}\')\n# $ 12.34\n
Run Code Online (Sandbox Code Playgroud)\n

还有更多。读物:

\n\n


Ped*_*ito 48

f意味着格式化的字符串文字 ,它是Python 3.6.


格式的字符串文字F-串是前缀字符串文字'f''F'。这些字符串可能包含替换字段,这些字段是由花括号分隔的表达式{}。虽然其他字符串文字始终具有常量值,但格式化字符串实际上是在运行时计算的表达式。


格式化字符串文字的一些示例:

>>> name = "Fred"
>>> f"He said his name is {name}."
"He said his name is Fred."

>>> name = "Fred"
>>> f"He said his name is {name!r}."
"He said his name is Fred."

>>> f"He said his name is {repr(name)}." # repr() is equivalent to !r
"He said his name is Fred."

>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}" # nested fields
result: 12.35

>>> today = datetime(year=2017, month=1, day=27)
>>> f"{today:%B %d, %Y}" # using date format specifier
January 27, 2017

>>> number = 1024
>>> f"{number:#0x}" # using integer format specifier
0x400
Run Code Online (Sandbox Code Playgroud)

  • 对于那些刚接触 python 的人来说:“repr() 函数返回给定对象的可打印表示字符串。” (13认同)

Nil*_*sar 9

f 字符串也称为文字字符串,用于将变量插入字符串并使其成为一部分而不是这样做

x = 12
y = 10

word_string = x + ' plus ' + y + 'equals: ' + (x+y)
Run Code Online (Sandbox Code Playgroud)

相反,你可以做

x = 12
y = 10

word_string = f'{x} plus {y} equals: {x+y}'
output: 12 plus 10 equals: 22
Run Code Online (Sandbox Code Playgroud)

这也将有助于间距,因为它会完全按照字符串写入