无法理解这个python代码

时间:2012-04-27 13:15:01

标签: 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,时,它会给出 结果为<'生日快乐,亲爱的',''安德烈','。'>

我无法理解结果中的这些差异。 你能否对此有所了解?

4 个答案:

答案 0 :(得分: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中产生完全相同的结果。

答案 1 :(得分:3)

在Python2中,print是一个声明。在Python3中,它是一个函数

对于一些简单的情况,它与括号的作用相同,但一般情况下,它并不像在print语句周围打一个parens将其移植到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

答案 2 :(得分:1)

如前所述,print是Python 2中的一个声明 然后,当你打印('xxx'),整个

('xxx')
首先解释

。单个parens被忽略,因此这只是一个打印的字符串。

当你执行'string'+ name +'string'时,首先连接(添加)其他字符串,从而产生一个字符串。 然后在parens中进行评估,返回,然后打印。

相反,当你打印('x','y','z')时,整个

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

元组,打印为&lt;'生日快乐,亲爱的',''安德烈','。'&gt;

答案 3 :(得分:0)

在print statement

中尝试str(person)