2012-04-27 125 views
3

我讀了Python功能 ,看到這樣的代碼:無法理解這個Python代碼

def happyBirthday(person): 
    print("Happy Birthday to you!") 
    print("Happy Birthday to you!") 
    print("Happy Birthday, dear " + person + ".") 
    print("Happy Birthday to you!") 

happyBirthday('Emily') 
happyBirthday('Andre') 

我無法理解爲什麼這些括號正在使用 的打印命令,所以我把他們趕走。

def happyBirthday(person): 
    print "Happy Birthday to you!" 
    print "Happy Birthday to you!" 
    print "Happy Birthday, dear " + person + "." 
    print "Happy Birthday to you!") 

happyBirthday('Emily') 
happyBirthday('Andre') 

即使在拆除這些我越來越 同樣的結果括號後,所以我不知道哪一個是正確 還是我應該用這些括號的。 真的有必要使用這些括號嗎?

還有一件事。 當我使用括號時,+person+給出 作爲生日快樂的結果,親愛的安德烈。 但是當我使用,person,然後它給 結果作爲<「生日快樂,親愛的」,」‘安德烈’,‘’>

我無法理解,結果這些差異。 你能對此有所瞭解嗎?

回答

13

是否真的有必要使用這些括號?

在Python 2.x中,print是一個語句,括號是可選的。

在Python 3.x中,print()是一個函數,括號是必需的。

甚至在Python 2.x中使用括號也被認爲是很好的做法,以便最終過渡到Python 3.x.

我無法理解結果中的這些差異。你能對此有所瞭解嗎?

下面是當您打印在Python 2.x的幾個逗號分隔的事情發生了什麼:

In [1]: print(1,2,3) 
(1, 2, 3) 

以上被解釋爲print語句,後跟一個參數,這是一個元組。該元組用圓括號和逗號表示。

In [2]: print 1,2,3 
1 2 3 

以上被解釋爲print語句,後跟三個參數。每個參數都是分開打印出來的,它們之間有空格。

就Python 3的兼容性而言,這兩個版本都不是很好:第一個版本的渲染方式不同,第二個版本的Python 3代碼無效。

考慮到這一點,我建議你還是堅持使用:

print("Happy Birthday, dear " + person + ".") 

這正好產生在這兩個的Python 2.x和Python的3.x的相同的結果

+2

值得注意這是爲什麼。在Python 2.x中,print是一個語句(比如''return''或''if''),而在3.x中,它是一個函數(比如'sum()''或''all '')。 – 2012-04-27 13:17:10

+0

@Lattyware:好的,謝謝。 – NPE 2012-04-27 13:18:10

+0

等各種功能。我們必須使用括號。總之,使用括號更好。對? – faraz 2012-04-27 13:19:19

3

在Python2中,print是一個語句。在Python3它是一個功能

對於一些簡單的情況下,它的工作原理與括號相同,但一般是不那麼容易,因爲只是拍打括號周圍的print語句將它移植到Python3

如。

Python 2.7.2+ (default, Oct 4 2011, 20:06:09) 
[GCC 4.6.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print "hi", 
hi 
>>> print("hi",) 
('hi',) 

VS

Python 3.2.2 (default, Sep 5 2011, 21:17:14) 
[GCC 4.6.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print "hi", 
    File "<stdin>", line 1 
    print "hi", 
      ^
SyntaxError: invalid syntax 
>>> print("hi",) 
hi 
+0

我沒有使用python 3。這兩個結果都來自Python 2.7 – faraz 2012-04-27 13:17:34

+0

@faraz,否則顯然括號將是強制性的 – 2012-04-27 13:18:31

+0

好吧,現在就明白了。 – faraz 2012-04-27 13:34:34

1

如前所述,打印在Python 2 聲明之後,當你打印( 'XXX'),整個

('xxx') 

解釋第一。單個parens被忽略,所以這只是一個打印的字符串。

當你做'字符串'+名稱+'字符串'時,首先連接字符串(添加),產生一個字符串。 然後在parens中進行評估,然後自行返回,然後打印。

在相反,當你做打印( 'X', 'Y', 'Z'),整個

('x', 'y', 'z') 

元組,其被打印爲<「生日快樂,親愛的 '' '安德烈', ''>

+0

嗯,好吧,我現在做的是我刪除了+人+,現在這行只是打印(「生日快樂,親愛的」。「),但我得到的結果是生日快樂,親愛的。爲什麼這不是一個元組?我的意思是不應該這樣('x','y') – faraz 2012-04-27 13:26:47

+0

顯示整條線,plz – Guard 2012-04-27 13:28:51

+0

啊,明白了。我沒有把逗號放在那裏,因此它不是一個元組。現在,當我輸入一個逗號時,它就是一個元組。整行是: print(「生日快樂,親愛的」「。」),其中不包括逗號。 但是,當我將它寫成(「生日快樂,親愛的」,「。」)時,它會完全按照您提及的方式給出結果。我現在明白了。謝謝 – faraz 2012-04-27 13:32:49

0

嘗試str(person)在打印staement