首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在试图查看符号是否是函数之前,Python是否假定符号是类型?

在试图查看符号是否是函数之前,Python是否假定符号是类型?
EN

Stack Overflow用户
提问于 2014-06-22 18:32:57
回答 1查看 204关注 0票数 6

在Python中,符号int既用作类型,也用作内置函数。但是当我在REPL中使用int或请求它的类型时,REPL告诉我它是一种类型。

代码语言:javascript
运行
复制
>>> int
<type 'int'>
>>> type(int)
<type 'type'>

这很好,但是int也是一个内置函数:它列在内置函数就在Python文档中的表中。

其他内置函数在REPL中报告如下:

代码语言:javascript
运行
复制
>>> abs
<built-in function abs>
>>> type(abs)
<type 'builtin_function_or_method'>

但我不能让type给我看这个给int看。显然,如果我想使用int作为函数(抱歉使用map而不是理解,我只是想说明一点):

代码语言:javascript
运行
复制
>>> map(int, ["4", "2"])
[4, 2]

因此Python知道如何使用该函数。但是为什么type要选择类型而不是函数呢?函数中没有任何东西能让人期待这一点。然后作为后续,这个表达的意义是什么:

代码语言:javascript
运行
复制
id(int)

这是给我类型或函数的id。我想是前者。如果是前者,我如何获得内置函数int的id?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-22 18:35:39

只有一个东西叫做int,只有一个东西叫做abs

区别在于int是一个类,abs是一个函数。然而,两者都是可以调用的。调用int(42)时,调用int类的构造函数,返回类int的实例。

这和以下几点并没有什么不同:

代码语言:javascript
运行
复制
class Int(object):

  def __init__(self, init_val=0):
    self.val = init_val

obj = Int(42)
print Int, type(Int), obj, type(obj)

在这里,Int是可调用的,可以用来构造类的实例。

一旦你意识到这一点,其他人就会跟进。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24354395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档