Python中语句和函数的区别是什么?

17
编辑:建议的重复问题并没有回答我的问题,因为我主要关心Python中的区别。 建议的重复问题比这个问题广泛得多。

我最近开始学习Python。 我目前正在阅读“Learn Python the Hard Way”。 我有一些临时编程经验,但这次我要从头开始学习所有的东西。

在书中,第一课之一涉及print,作者提供了有关其在Python 2.7中使用的各种说明,例如:

print "This is fun."

我发现自己在编程方面想知道print的技术名称是什么。 一些研究发现这个,PEP-3105 在这种情况下,将print变成函数:
引用:

打印语句长期以来一直出现在Python 3000要删除的可疑语言功能列表中,例如Guido的“Python Regrets”演示1。因此,这个PEP的目标并不是新的,尽管它可能在Python开发人员中引起争议。

所以,在Python 2.7中print是一个语句,在Python 3中是一个函数。
但是我一直找不到一个简单明了的定义来区分一个“语句”和一个“函数”。我发现this,这也是Python的发明者Guido van Rossum所写的,他在其中解释了为什么将print变成函数而不是语句会更好。

从我所读的内容中,似乎一个函数是一些接收参数并返回值的代码。但是在Python 2.7中,print不是也在做这个吗?它不是接收字符串并返回连接的字符串吗?

在Python中,“语句”和“函数”有什么区别?


6
FYI: http://sopython.com/wiki/LPTHW_Complaints. 而且,print语句并不会返回任何内容(与print函数不同,后者会返回None)。 - jonrsharpe
1
可能是语句和函数之间的区别的重复问题。 - mkrieger1
我看到了那个问题,但我主要关注的是 Python,其他语言只是附带的。在建议的重复问题中,所选的答案声明“在大多数语言中,语句不返回值。”该答案没有区分 Python 中语句和函数之间的区别。 - Gary
1
在我引用的问题的被接受的答案中,用一种与语言无关且对Python也有效的方式很好地解释了它。第二高票的答案是针对Python特定的。如果你对这两个答案都不满意,那么你应该阅读Python Language Reference,尤其是复合语句的部分,在那里你将学到函数定义是语句的一个例子。 - mkrieger1
我很感激你的努力,mkrieger。我正在尝试理解函数和语句之间的区别。函数定义可能是语句的一个例子,但这并没有帮助我,反而有些循环。我正在尝试理解Python中函数与语句之间的独特特性,即语句和函数在Python中的区别。Jim Fasarakis Hilliard的答案已经在某种程度上帮助了我,如果还有其他人能够详细说明,那将非常有用。 - Gary
3个回答

10

语句是一种语法结构。函数是一个对象。有语句可以创建函数,比如 def

def Spam(): pass

所以,语句是指示Python创建函数的方式之一。除此之外,它们与函数之间实际上并没有太多关系。


1
你能详细解释一下这个答案吗?难道不是“所有东西”都是语法结构吗? - Mike B

2

在Python中,语句是您编写的任何代码块。它更多是一个理论概念而不是一个真正的东西。如果您在编写代码时使用正确的语法,您的语句将被执行(“评估”)。如果您使用不正确的语法,您的代码将抛出错误。大多数人可以交替使用“语句”和“表达式”。

可能最容易看到语句和函数之间的区别的方法是查看一些示例语句:

Original Answer: 最初的回答

5 + 3 # This statement adds two numbers and returns the result
"hello " + "world" # This statement adds to strings and returns the result
my_var # This statement returns the value of a variable named my_var
first_name = "Kevin" # This statement assigns a value to a variable.
num_found += 1 # This statement increases the value of a variable called num_found
print("hello") # This is a statement that calls the print function
class User(BaseClass): # This statement begins a class definition
for player in players: # This statement begins a for-loop
def get_most_recent(language): # This statement begins a function definition
return total_count # This statement says that a function should return a value
import os # A statement that tells Python to look for and load a module named 'os'

# This statement calls a function but all arguments must also be valid expressions.
# In this case, one argument is a function that gets evaluated
mix_two_colors(get_my_favorite_color(), '#000000')

# The following statement spans multiple lines and creates a dictionary
my_profile = {
  'username': 'coolguy123' 
}

以下是一个无效语句的示例:

"最初的回答"

first+last = 'Billy Billson'
# Throws a Syntax error. Because the plus sign is not allowed to be part of a variable name.

在Python中,你倾向于将每个语句放在自己的一行上,除了嵌套语句的情况。但是在其他编程语言如C和Java中,只要用冒号(;)分隔开,可以将多个语句放在单行上。

在Python2和Python3中,你都可以调用

Original Answer翻译成"最初的回答"

print("this is a message") 

它会将字符串打印到标准输出。这是因为它们都定义了一个名为print的函数,该函数接受一个字符串参数并将其打印出来。

Python2还允许您发出一条语句,而无需调用函数即可打印到标准输出。此语句的语法是以单词print开头,后面跟着要打印的内容。在Python3中,这不再是有效的语句。

print "this is a message"

同样在Python中,只要语句之间用冒号(;)分隔,你可以将尽可能多的语句放在一行上。 - Avizipi

0

函数和语句都是Python理解的词汇。

函数需要括号来作用于任何东西(包括空值)。

语句则不需要。

因此在Python 3中,print是函数而不是语句。

让我们看一个有趣的例子。 not Truenot(True) 都可以工作。但是 type(not) 不是函数,因此 not 是语句。 not(True) 之所以能够工作,仅仅是因为Python也将括号视为分组。这是一个糟糕的设计。

另一个区别: (not) 失败了,(print) 没有失败,因为语句没有值,而函数有一个值(对于解释器而言,不是某个前提的数学意义上的形象)。


not 是一个运算符,而不是一个语句。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接