在行延拓中混合普通字符串和fstring

2024-04-24 00:50:31 发布

您现在位置:Python中文网/ 问答频道 /正文

可以这样混合普通字符串和新的f字符串吗:

import timeit

format = """
def format(name, age):
    return (
        f'He said his name is '
        f'{name} and he is '
        f'{age} years old.'
    )
""", """
def format(name, age):
    return (
        'He said his name is '
        f'{name} and he is '
        f'{age} years old.'
    )
"""

test = """
def test():
    for name in ('Fred', 'Barney', 'Gary', 'Rock', 'Perry', 'Jackie'):
        for age in range (20, 200):
            format(name, age)
"""

for fmt in format:
    print(timeit.timeit('test()', fmt + test, number=10000))

[out]:
3.4188902939995387
3.3931472289996236

这是可以使用的还是混合普通字符串和f字符串不被认为是最佳实践?你知道吗


Tags: and字符串nameintestformatforage
1条回答
网友
1楼 · 发布于 2024-04-24 00:50:31

这里的无意见问题是,真正是运行时表达式的“编译时连接”格式化字符串“文本”是什么意思?语言引用仅仅是says that you can。你知道吗

dis的实验表明,即使是一个单独的f字符串,也会分解为间隙字符串文字和格式化表达式(这些文字和表达式被编译为新的FORMAT_VALUE操作码,而不是转换为对str.format的调用或类似的调用)。每个f字符串都是这样处理的(在连接之前,f"{x" f"}"是无效的)。从该分解得到的前缀和后缀字符串文字(如果有)随后与相邻的普通字符串文字(或由相邻的f字符串生成的文字)连接起来。最后,使用同样新的BUILD_STRING操作码来高效地连接各个部分。请注意,这意味着您的两个format函数编译为相同的字节码,任何时间差都只是噪声。你知道吗

从这个(实现者的)角度来看,规则是显而易见的;从用户的角度来看,格式化直观地发生在f"…"内部。写f"v={{{x},{y}}}\n"还是"v={" f"{x},{y}" "}\n"是一个品味问题,但我肯定能想到后者更可取的情况。如果人们对语义有疑问,只要你愿意指出这个问题,我就说这足以让半点意见回答“是的,没关系”。你知道吗

相关问题 更多 >