在行继续中混合普通字符串和 f 字符串
Mixing normal string with f-string in line continuation
像这样混合普通字符串和新 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 字符串不是最佳实践?
这里的无意见问题是“编译时连接”格式化字符串“文字”是什么意思真正是运行时表达式?语言参考仅says that you can.
对 dis
的实验表明,即使是一个单独的 f 字符串也被分解为间隙字符串文字和格式化表达式(它们被编译为新的 FORMAT_VALUE
操作码,而不是调用 str.format
左右)。每个 f-string 都以这种方式 separately 处理(在连接之前,因此 f"{x" f"}"
无效)。 result 的前缀和后缀字符串文字(如果有的话)然后与相邻的普通字符串文字(或由相邻的 f 字符串生成的文字)连接。最后,同样新的 BUILD_STRING
操作码用于有效地连接片段。请注意,这意味着您的两个 format
函数编译为 相同的 字节码,任何时间差异都只是噪音。
从这个(实施者)的角度来看,规则是显而易见的;从用户的角度来看,格式化直观地发生在 f"…"
内部。写 f"v={{{x},{y}}}\n"
还是 "v={" f"{x},{y}" "}\n"
是个人喜好问题,但我当然可以想到后者更可取的情况。只要你愿意在人们对语义有疑问的情况下向他们指出这个问题,我会说这足以让 半意见 回答“是的,没关系” .
像这样混合普通字符串和新 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 字符串不是最佳实践?
这里的无意见问题是“编译时连接”格式化字符串“文字”是什么意思真正是运行时表达式?语言参考仅says that you can.
对 dis
的实验表明,即使是一个单独的 f 字符串也被分解为间隙字符串文字和格式化表达式(它们被编译为新的 FORMAT_VALUE
操作码,而不是调用 str.format
左右)。每个 f-string 都以这种方式 separately 处理(在连接之前,因此 f"{x" f"}"
无效)。 result 的前缀和后缀字符串文字(如果有的话)然后与相邻的普通字符串文字(或由相邻的 f 字符串生成的文字)连接。最后,同样新的 BUILD_STRING
操作码用于有效地连接片段。请注意,这意味着您的两个 format
函数编译为 相同的 字节码,任何时间差异都只是噪音。
从这个(实施者)的角度来看,规则是显而易见的;从用户的角度来看,格式化直观地发生在 f"…"
内部。写 f"v={{{x},{y}}}\n"
还是 "v={" f"{x},{y}" "}\n"
是个人喜好问题,但我当然可以想到后者更可取的情况。只要你愿意在人们对语义有疑问的情况下向他们指出这个问题,我会说这足以让 半意见 回答“是的,没关系” .