首页 > 解决方案 > 将各种数量的参数转换为字符串?

问题描述

我有以下从可变大小参数创建名称的函数:

def create_name(*argv):
    """Create a name from passed arguments."""
    return f"%s" % "_".join(str(arg) for arg in argv)

运行 pylint 时,我收到以下警告。

 W1309: Using an f-string that does not have any interpolated variables (f-string-without-interpolation)

只是好奇是否可以进行任何改进来解决此警告。

标签: pythonstringf-string

解决方案


你的表情f"%s" % "_".join(str(arg) for arg in argv)分解如下:

  • f"%s"格式化为"_".join(str(arg) for arg in argv), 使用%运算符
  • f"%s"反过来是一个插值字符串,但没有做任何事情,因为它没有{},所以"%s"会达到同样的效果
  • "%s"使用另一个字符串格式化%只会让你再次获得相同的字符串,所以整个表达式可能只是"_".join(str(arg) for arg in argv)

所以,这些都有效:

return "_".join(str(arg) for arg in argv)
return "%s" % "_".join(str(arg) for arg in argv)
return f'{"_".join(str(arg) for arg in argv)}'

但是没有理由不使用第一个,其余的只是增加了复杂性并且没有功能。

具体来说,您会收到该警告,因为 Python 中的插值字符串(或“f-strings”){}需要替换表达式,但您的 f-string 没有任何内容,因此 pylint 告诉您可以删除f. 因为您的 f 字符串“没有任何插值变量”。


推荐阅读