Python string formatting
我正在研究一个开源项目的代码。它是用Python编写的代码,不幸的是我对它不太有经验。我在代码中发现了很多这样的语句:
1 | print"the string is %s" % (name_of_variable, ) |
我知道,与C语言类似,这是一种正确格式化输出的方法,但我真的不理解在括号内的"变量名"后面逗号的含义。
我搜索了python文档,但没有找到关于这种语句的任何信息。有人知道它的意思吗?
如果
1 | print"the string is %s" % (name_of_variable) |
将抛出一个
因此,您必须使用
尾随逗号是一种创建单元素元组的方法。通常,通过在括号中列出一组值或变量(用逗号分隔)来创建元组:
1 | my_tuple = (1, 2, 3) |
然而,括号实际上并不必要。您可以创建这样的元组:
1 | my_tuple = 1, 2, 3 |
当然,这会引起一个元素元组的问题。如果省略括号,则只需将变量赋给单个变量:
1 | my_tuple = 1 # my_tuple is the integer 1, not a one-element tuple! |
但是使用括号是不明确的,因为括号中的值是完全合法的:
1 | my_tuple = (1) # my_tuple is still the integer 1, not a one-element tuple |
因此,通过添加尾随逗号来指示一个元素元组:
1 2 3 | my_tuple = 1, # or, with parentheses my_tuple = (1,) |
字符串格式采用一个元组作为参数,因此如果使用的是一个元素元组,则使用一个尾随逗号。(当然,字符串格式对于只传递一个要格式化的变量的情况有特殊的处理,在这些情况下,您可以只使用一个值,而不是元组。)
当有多个变量时使用逗号。如
1 | print"the string is %s %s" % (name_of_variable1, name_of_variable2) |
更多详情请访问:https://stackoverflow.com/a/5082482/2382792
1 2 3 4 5 6 7 8 9 10 | >>> mytup=("Hello world!",) >>> print"%s"%(mytup) Hello world! >>> print"%s"%(mytup,) ('Hello world!',) >>> mytup=("Hello world!","Yoo-hoo, big summer blow-out!") >>> print"%s"%(mytup) Traceback (most recent call last): File"<stdin>", line 1, in <module> TypeError: not all arguments converted during string formatting |
该运算符尝试类似于函数调用,其中参数列表始终作为元组(也可能是命名参数的字典)传递。当以str.format的形式调用时,这种差异就会消失,因为构成括号的元组是方法调用语法的一部分。
这是创建一个元素元组的语法。例如,请参见此链接。这里并不重要,因为
1 2 3 4 5 6 7 8 9 10 | >>> x = 0 >>> (x) 0 >>> (x,) (0,) >>> type((x)) <type 'int'> >>> type((x,)) <type 'tuple'> >>> |
此外,不需要括号:
1 2 | >>>x, >>>(0,) |
您可能还需要阅读有关格式化语法的百分比。
当您只使用一个变量时,是否使用逗号并不重要,您也不需要只有一个变量的括号。
它使用元组(括号和逗号)在这里只是与多变量情况一致。
而且,如果在一个元素元组中没有逗号,它就不再是元组。
例如,
a = (1)
type(a) #
人们还喜欢在元组的最后一个元素后面追加一个逗号,即使它们有不止一个元素来保持一致性。
这里,
1 2 3 4 5 | In [96]: print"the string is %s" % (name_of_variable, ) the string is assdf In [97]: print"the string is %s" % name_of_variable the string is assdf |
输出相同。
但如果
1 2 3 4 5 6 7 8 9 10 11 | In [4]: tup = (1,2,) In [6]: print ("the string is %s" % (tup)) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-6-fb9ef4de3ac3> in <module>() ----> 1 print ("the string is %s" % (tup)) TypeError: not all arguments converted during string formatting In [7]: print ("the string is %s" % (tup,)) the string is (1, 2) |