2016-04-24 98 views
1

这是非常基本的:Python字符串格式错误

my_name="nishant" 
my_age=24 
print "My name is %s"%my_name 
print "My age is %d & my name is %s, what are you ?" %(my_age, my_name) 

它工作正常,并打印出想要的结果,但如果我代替最后一行是这样的:

print "My age is %d & my name is %s, what are you ?" %my_age , %my_name 

我得到这个错误:

File "my_tests.py", line 7 
    print "My age is %d & my name is %s, what are you ?" %my_age, %my_name 
                   ^
SyntaxError: invalid syntax 

我的问题是:

  1. 为什么%(my_age, my_name)!= %my_age , %my_name
  2. Python如何解释这样的事情?

回答

3

你的代码片段执行的是binary arithmetic operation,它需要单个对象作为第二个参数。

使用括号,将此参数定义为两元素元组。我添加了另外的括号来强调代码的解释方式。

print ("My age is %d & my name is %s, what are you ?" % (my_age, my_name)) 

当不,参数为单个元件和, %my_name被解释为第二个参数print statement

print evaluates each expression in turn and writes the resulting object to standard output

print ("My age is %d & my name is %s, what are you ?" % my_age), (%my_name) 

由于%my_name无效Python表达式,SyntaxError上升。

+0

这种感觉对我来说很有意义 –

0
>>> print "My name is %s & my age is %d, what are you?" % (my_name, my_age) 
My name is nishant & my age is 24, what are you? 

你在你需要的变量的元组传递%之后。

对不起,我在我以前的答案中误解了你的问题。

0

因为格式化程序需要一个元组。

+1

你的意思是,如果你想在你的字符串中打印多个变量的多种格式,你需要把它们放在()(括号)之内,(逗号)分隔。 ? –

+0

是一个%和包含字符串变量数量等于%的元组 –

0

这对字符串的Python语法,您可以阅读具有两个以上的变量转换操作符是如何工作的Python文档:

https://docs.python.org/2/library/stdtypes.html#string-formatting-operations

这只是一个设计方案,该开发商认为是最好的。当有多个变量时,Python需要一个元组。

+0

是的..我读了文档..仍然他们为什么要这样做 –

+0

@NishantSingh你有两个值,需要将它们包装为一个'''tuple' ''。 –

+0

因为,这就是Python的开发人员所希望的。这是一个将变量放入字符串的设计解决方案。 – cenh

0

%运算符只应出现一次 - 它不是变量名的一部分。这就是你通常会看到它使用:

print "My age is %d & my name is %s, what are you ?" % (my_age, my_name) 

%之间的空间和元组仅仅是为了强调自己的独特性。

1

%是运营商就像+-/*&|等,正如你不能做4 * 5, * 6,你不能这样做'%s %s' % 'here', % 'there'。实际上,x % y只是x.__mod__(y) 的快捷方式。因此,

'%s %s' % ('here', 'there') -> '%s %s'.__mod__(('here', 'there')) 

使用%两次只是没有任何意义:

'%s %s'.__mod__('here'), .__mod__('there') 

y.__rmod__(x)如果x.__mod__()不存在。