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

Python 在行延拓中混合普通字符串和f字符串,python,python-3.x,f-string,Python,Python 3.x,F String,可以这样混合普通字符串和新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

可以这样混合普通字符串和新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字符串的最佳实践?

这里没有意见的问题是,“编译时串联”格式化字符串“文本”是什么意思,它们实际上是运行时表达式?语言仅仅是参考

dis
进行的实验表明,即使是一个单独的f字符串也会分解成间隙字符串文字和格式表达式(它们被编译成新的
FORMAT\u值
opcode,而不是调用
str.FORMAT
等等)。每个f字符串都是以这种方式分别处理的(在连接之前,
f“{x”f”}”
是无效的)。由此分解产生的前缀和后缀字符串文字(如果有)随后与相邻的正常字符串文字(或由相邻f字符串生成的文字)连接在一起。最后,使用同样新的
BUILD\u字符串
opcode有效地连接各个部分。请注意,这意味着您的两个
format
函数编译为相同的字节码,任何时间差都只是噪声


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

这不是观点,而是不同方法的已知缺点。没关系,在字符串中,
f
只是另一个字符。只要你不试图同时使用
str.format
。@MadPhysician FYI Rahul是OP.@TylerH。显然我是文盲。谢谢你的收获:)@Rahul。我为自己是个白痴而道歉。你能把那句话插入问题吗?这将使它更加明确。谢谢你的解释。我不知道这会很有帮助。