2016-04-24 105 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__()不存在。