2012-04-27 63 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