没有打印功能的python 3中的字符串格式化

时间:2018-09-11 13:34:47

标签: python-3.x

试图了解下面的代码中"%s%s" %(a,a)的工作方式,到目前为止,我只在print函数中看到它。有人可以解释一下它在int()中的工作方式吗?

a=input()
b=int("%s%s" %(a,a))

2 个答案:

答案 0 :(得分:2)

%在某种程度上只是语法上的糖,它接受一个字符串和一个*args(一种格式和用于格式化的参数)并返回一个字符串,该字符串是嵌入了格式的字符串参数。因此,您可以在string可接受的任何地方使用它。

顺便说一句,%有点过时了,“ {} {}”。format(a,a)在这里是更“现代”的方法,并且显然是返回另一个字符串的字符串方法。

答案 1 :(得分:2)

"%s"格式是从C printf格式借来的,但更有趣,因为它不属于print语句。请注意,它只涉及传递给print(或任何函数BTW)的一个参数:

print("%s%s" % (a,a))

而不是(像C一样)传递给接受和理解它们的某些函数的可变数量的参数:

printf("%s%s,a,a);

这是从字符串模板及其参数创建字符串的独立方法(例如,它解决了一个乏味的问题:“我想要具有格式化功能的记录器”,可以使用C或C ++进行大量工作,使用可变参数+ vsprintf或C ++ 11可变递归模板)。

请注意,这种格式样式现在被认为是旧式的。现在,您最好使用format,将占位符包裹在{}中。

这里的直接优点之一是,由于重复了该参数,您只需要执行以下操作即可:

int("{0}{0}".format(a))

(它在位置0引用了唯一的参数两次)

https://pyformat.info/上的示例均详细说明了传统语法和format语法

或从python 3.6开始,您可以使用 fstrings

>>> a = 12
>>> int(f"{a}{a}")
1212