Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';带括号和不带括号的函数之间的区别是什么?_Python_Function_Object - Fatal编程技术网

Python 什么';带括号和不带括号的函数之间的区别是什么?

Python 什么';带括号和不带括号的函数之间的区别是什么?,python,function,object,Python,Function,Object,现在我正在阅读Think Python,目前正在阅读第4章,但我有一个问题 在4.1海龟模块中,有如下内容: >>> import turtle >>> bob = turtle.Turtle() 这让我很困惑。我认为不带括号的函数名(如print、math.sqrt或int)代表函数对象,带括号的函数名代表该函数的返回值。所以我认为turtle.turtle()应该是该func执行后的值 但后来这本书告诉我: turtle模块(带小写字母“t”)提供了一

现在我正在阅读Think Python,目前正在阅读第4章,但我有一个问题

在4.1海龟模块中,有如下内容:

>>> import turtle

>>> bob = turtle.Turtle()

这让我很困惑。我认为不带括号的函数名(如print、math.sqrt或int)代表函数对象,带括号的函数名代表该函数的返回值。所以我认为turtle.turtle()应该是该func执行后的值

但后来这本书告诉我: turtle模块(带小写字母“t”)提供了一个名为turtle(带大写字母“t”)的函数,该函数创建一个turtle对象,我们将其分配给一个名为bob的变量

好的,然后我试了一下。当bob被分配到turtle.turtle()时,我得到:

>类型(bob)
还有一件事让我很困惑

我读这本书就像我的编程101书一样,所以我不知道它们是从哪里来的。
有人能回答这个问题并告诉我更多关于“对象”的概念吗?

turtle。turtle
是一个类,而不是一个函数(尽管两者都属于被称为“可调用函数”的类,可以在后面加括号以触发其他代码执行)。当您无法调用它时,您只是在给类本身添加别名
bob=turtle.turtle
只是为您提供了另一个名称,您可以使用它来构造
turtle.turtle
对象,因此您可以(如果您愿意)执行以下操作:

作为一种避免键入全名的方法,同时获得与以下相同的效果:

myturtle = turtle.Turtle()
myturtle2 = turtle.Turtle()
本例中的
type(bob)
返回
,因为Python类本身就是“元类”的实例;如果没有另外指定,则它们是
类型的隐式实例
(所有类的最终根元类)

基本上,你的书有点不精确(它是一个类,不是一个函数),但它的行为是正确的
bob=turtle.turtle()
创建一个
turtle.turtle
bob=turtle.turtle
的实例,只是将
turtle.turtle
化名为一个新名称,
bob
,而不是实际创建它的实例

在4.1海龟模块中,有如下内容:

>>> import turtle

>>> bob = turtle.Turtle()
导入海龟

bob=turtle.turtle()


这让我很困惑。我想一个函数名w/o 括号(如print、math.sqrt或int)表示函数 对象,函数名w/括号表示返回值 那一职能。所以我认为,turtle.turtle()应该是 在它被执行之后

但后来这本书告诉我:“海龟模块(带小写字母‘t’) 提供一个名为Turtle(大写“T”)的函数,用于创建 一个Turtle对象,我们将其分配给名为bob的变量。“

两种说法都是正确的。在本例中,函数对象是turtle.turtle

可以使用语法Turtle.Turtle()返回一个Turtle对象。您可以将海龟对象视为函数返回的值

好的,然后我试了一下。当bob被分配到turtle.turtle()时,我得到:

类型(bob)


>>您自己的描述很好地解释了这一点,“我认为不带括号的函数名(如print、math.sqrt或int)代表函数对象,带括号的函数名代表该函数的返回值”您在这里使用的是类实例/类though@RussJ不,事情不是这样的
turtle
是一个模块,
turtle
是该模块中的一个类(或者可能只是一个函数,但在本例中是一个类)。“这确实让我感到困惑。我认为没有括号的函数名(比如print、math.sqrt或int)代表函数对象,而带括号的函数名代表该函数的返回值。”这基本上是正确的。更精确地说,w/括号是一个函数调用表达式,其计算结果为函数的返回值。I“对象”的概念在教程中有广泛的介绍。您可以在internet上找到许多很棒的教程,但堆栈溢出不是其中之一。请拿着这本书,读一读。欢迎来到堆栈溢出!是的,Python是一种面向对象的语言,一切都是对象。整数、字符串、浮点数、
None
、函数等。目前,基本上,您可以将对象视为可以分配给变量的任何对象。所以如果你能做
x=
,那么“whatever”就是一个对象。太详细了!非常感谢,它确实有帮助。
bob = turtle.Turtle
myturtle = bob()
myturtle2 = bob()
myturtle = turtle.Turtle()
myturtle2 = turtle.Turtle()