我想知道如何使用f-strings以Pythonic方式格式化这种情况:
names = ['Adam', 'Bob', 'Cyril']
text = f"Winners are:\n{'\n'.join(names)}"
print(text)
Run Code Online (Sandbox Code Playgroud)
问题是'\'不能在f-string中使用.预期产量:
Winners are:
Adam
Bob
Cyril
Run Code Online (Sandbox Code Playgroud) 我正在玩f字符串(请参阅PEP 498),因此我决定检查f字符串解析(例如f“ {1}”)的速度与通常的str解析(例如str(1) ))。但是令我惊讶的是,当我使用timeit函数检查两种方法的速度时,我发现
>>> from timeit import timeit
>>> timeit("f'{1}'")
0.1678762999999961
Run Code Online (Sandbox Code Playgroud)
而
>>> timeit("str(1)")
0.3216999999999999
Run Code Online (Sandbox Code Playgroud)
甚至是repr func,在大多数情况下,它们都比str转换快
>>> timeit("repr(1)")
0.2528296999999995
Run Code Online (Sandbox Code Playgroud)
我不知道为什么呢?我以为f弦在内部调用了str,但是现在,我有点困惑了,有什么想法吗?提前致谢!
PD:就像有人想知道的那样:
assert f"{1}" == str(1) == repr(1)
Run Code Online (Sandbox Code Playgroud) 这两个print语句产生相同的结果,至少对我来说,第一个版本看起来更具可读性。
我是否应该坚持使用该f'版本,因为它会在以后给我带来问题,或者导致性能更差,或者不遵循当前的 Python 标准?或者这只是这些版本之一的一致使用问题?
print('My first bicycle was a ' + bicycles[1])
print(f'My first bicycle was a {bicycles[1]})')
Run Code Online (Sandbox Code Playgroud) 这两个电话之间有什么区别:
import logging
logging.getLogger().debug('test: %i' % 42)
Run Code Online (Sandbox Code Playgroud)
和
logging.getLogger().debug('test: {}'.format(42))
Run Code Online (Sandbox Code Playgroud)
我们假设42在被投射到字符串(例如750万年)时会被一些长计算所取代,产生最终答案为42.
在将日志记录设置为调试的情况下,是否对前一种方法进行了延迟评估?