2014-02-22 35 views
2

用下面的代碼Python的優先

import sys 
print "Hello " + sys.argv[1] if len(sys.argv) > 1 else "Joe" + "." 

當我運行

  • python hello.py,我得到Joe. - 該Hello丟失。
  • python hello.py Nick,我得到Hello Nick - 期間'。'最終失蹤。

但是,當我改變代碼覆蓋三元操作與(),那麼它工作正常。

import sys 
print "Hello " + (sys.argv[1] if len(sys.argv) > 1 else "Joe") + "." 

當我運行

  • python hello.py,我得到Hello Joe.
  • python hello.py Nick,我得到Hello Nick.

有人能解釋爲什麼不同的行爲時,我不包括三元操作員用大括號。

+1

這就是所謂的[條件表達式(http://docs.python.org/2/reference/expressions。 HTML#條件表達式);它是一個**三元操作符。它恰好是目前唯一的三元操作符,但是您始終不會調用''''和''''二元操作符。 –

+0

這是'format'幫助的地方。 'print'Hello {}。「。format(sys.argv [1] if len(sys.argv)> 1 else」Joe「)':) – thefourtheye

回答

6

參見documented operator precedence;條件表達式具有一個 - 但最低的優先級,只有lambda較低。

你可能想看看進入string format syntax,而不是手動串聯字符串對象:

print "Hello {}.".format(sys.argv[1] if len(sys.argv) > 1 else "Joe")