像这样混合普通字符串和新f字符串是否可以:
cvtColor(src, bwsrc, cv::COLOR_RGB2GRAY);
可以使用吗?还是不建议将普通弦和f弦混合使用?
答案 0 :(得分:2)
这里没有意见的问题是,平均是“编译时串联”格式化字符串“ literal”(实际上是运行时表达式)是什么意思?语言参考仅says that you can。
使用dis
进行的实验表明,即使是一个孤立的f字符串也被分解为非页内字符串文字和格式表达式(它们被编译为新的FORMAT_VALUE
操作码,而不是对{{1}的调用) } 或者)。每个f字符串均采用单独的方式进行处理(在连接之前,因此str.format
无效)。然后,将根据此分解得到的结果的前缀和后缀字符串文字与相邻的普通字符串文字(或由相邻f字符串产生的文字文字)连接起来。最后,使用同样新的f"{x" f"}"
操作码来有效地合并各个部分。请注意,这意味着您的两个BUILD_STRING
函数可以编译为相同字节码,并且任何时序差异都只是噪声。
从这个(实施者)的角度来看,规则很明显;从用户的角度来看,格式化仅在format
内部进行。编写f"…"
还是f"v={{{x},{y}}}\n"
是一个喜好问题,但是我可以肯定会想到使用后者的情况。只要您愿意向人们指出这个问题(如果他们对语义有疑问),我会说这足以使半意见回答“是的,没关系”。>