type类型python
Ⅰ python的type是什么
查看类型的,你可以输出一些代码试试,比如:
importmath
printtype(3)
printtype(3.4)
printtype(math)
Ⅱ Python 的 type 和 object 之间是怎么一种关系
我们先来看看 type 和 object 分别是什么。
type 实际上是:
#define PyVarObject_HEAD_INIT(type, size) \
1, type, size,
PyTypeObject PyType_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"type", /* tp_name */
sizeof(PyHeapTypeObject), /* tp_basicsize */
sizeof(PyMemberDef), /* tp_itemsize */
0, /* tp_base */
...
}
object 实际上是:
PyTypeObject PyBaseObject_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"object", /* tp_name */
sizeof(PyObject), /* tp_basicsize */
0, /* tp_itemsize */
0, /* tp_base */
...
}
也就是说,type 和 object 的前两个字段是一样的,都是1和 PyType_Type
ob_refcnt = 1 // 引用计数
ob_type = &PyType_Type // 指向一个类型对象,用来指定当前对象的类型
即,type 和 object 的 ob_type 都是 PyType_Type,而PyType_Type就是 type,所以 type 的ob_type 是自己。
我们来看看 isinstance() 做了什么:
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
[abstract.c]
PyObject_IsInstance(PyObject *inst, PyObject *cls)
{
static PyObject *name = NULL;
/* Quick test for an exact match */
if (Py_TYPE(inst) == (PyTypeObject *)cls)
return 1;
...
}
isinstance() 做的事情其实很简单,就是判断inst -> ob_type 指向的类型是不是 (PyTypeObject *)cls。
instance(object,type) <==> if object.ob_type == type return 1 else return 0;
从前面可以看到 ob_type = &PyType_Type,而 PyType_Type 就是 type,所以,显然object 被判断为了 type 的实例。
实际上他们在代码实现上并没有类与实例的关系,但是在判断的时候强加了这层关系。
================实例的关系说完了,下面说说继承关系===================
我们来看看 issubclass():
[abstract.c]
PyObject_IsSubclass(PyObject *derived, PyObject *cls)
{
...
return recursive_issubclass(derived, cls);
}
//最终转化成
[typeobject.c]
int PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)
{
mro = a->tp_mro;
if (mro != NULL) {
...
}
else{
do {
if (a == b)
return 1;
a = a->tp_base;
} while (a != NULL);
return b == &PyBaseObject_Type; //这一句!
}
}
从上面我们也可以看出 python 的继承机制。
我们也可以看到,如果一个类没有基类,那他的父类就是object ,即便在代码实现上它并没有基类,但是在 issubclass()中就是这样认为的!
那 type 到底有没有基类呢?目前我还没有找到 ,我会继续找的。即便有也只是给个标志位标识一下,并没有什么特殊的动作。
type 和 object 在代码实现上时平行的,没有父子类的关系,但是在判断的时候,开发者将 type 判断为了 object 的子类,以满足python 对外呈现的思想。
python 对外呈现的思想是:
object :是一切类的基类
type :一切类型都是它的实例
但实际上它的代码实现并不符合这样的思想,C 语言本身也没有类和继承的概念,开发者做了一些处理,让他们看起来是符合思想的。
总结:type 和 object 其实并没有继承与实例化的关系,只是开发者为了保持 python 纯正的思想,给他们添加了联系。添加联系的方式有两种:一种是设置标志位,如ob_type,一种是函数判断中做特殊处理(就像 PyType_IsSubtype 函数那样)。
Ⅲ Python中type(1)是什么意义
意义是查看数据类型。
type(s), 是一个很强大的函数,它告诉你Python任何一个东西的数据类型, 你可以
type("abc"), type("MyClass") where
class MyClass:
pass
Python由荷兰数学和计算机科学研究学会的Guido van Rossum于1990 年代初设计,作为一门叫做ABC语言的替代品。
Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
Ⅳ python type()函数的问题
python2.x版本是要在数字的后面加一个L,例 :
print(type(1L))
会输出 <type 'long'>
但是Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型,这么写就会报错
Ⅳ python 中的type
<class 'type'> 指的是 是一种 class 类型。
<class '__main__.bar'> 指的是 是class bar 的一个instance
参照python2.7
>>> class bar:pass
>>> b=bar()
>>> type(bar)
<type 'classobj'>
>>> type(b)
<type 'instance'>
>>>
Ⅵ python判断变量类型时,为什么不推荐使用type方法
python 2.x:导入 types 模块,例如测试变量a数据类型是否为列表,则
type(a) is types.ListType # return True
type(a) is types.TupleType # False
------------------------------------------------------------------------------
Python 3.x:版本3中types模块已经被取消了,这些内置数据类型已经被基础类型的名字取代了。
type(a) is list # return True
type(a) is set # return False
Ⅶ Python基本内置数据类型有哪些
内置类型是指任何语言在设计初期定义的类型,如C语言中的int、double、char等。它也是在一种语言中最基本的类型,与编译器编译出的代码具有重大关系。值得一提的是,不同语言也拥有不同的内置类型, 但是所有内置类型的定义都与计算机的运算方式相关。
Python主要内置类型包括数值、序列、映射、类、实例和异常等。
数值类型:全局中只有一个(Python在解释器启动的时候,Python会用None类型生成一个None的对象),包括int类型、float类型、complex类型、bool类型。
迭代类型:在Python中,迭代类型可以使用循环来进行遍历。
序列类型:list(是可变序列,通常用于存放同类项目的集合)、tuple(是不可变序列,通常用于储存异构数据的多项集)、str(在Python中处理文本数据是使用str对象,也称为字符串。字符串是由Unicode码位构成的不可变序列。)、array、range(表示不可变的数字序列,通常用于在for循环中循环指定的次数)、bytes(由单个字节构成的不可变序列)、bytearray(bytes对象的可变对应物)、memoryvie(二进制序列)
映射类型:映射对象将具有hash的值映射到任意对象。映射是可变的对象。目前只有一种标准映射,即dictionary。字典的键几乎是任意值,也就是说,包含列表、字典或其他可变类型的值。
集合类型:作为一种无序的多项集,集合并不记录元素位置或插入顺序。相应地,集合不支持索引、切片或其他序列类的操作。目前Python有两种内置集合类型:set和frozenset。
set类型是可变的,其内容可以使用add()和remove()这样的方法来改变。由于是可变类型,它没有哈希值,且不能被用作字典的键或其他集合的元素。
frozenset类型是不可变并且具有哈希值,其内容在被创建后不能再改变,因此它可以被用作字典的键或其他集合的元素。
上下文管理类型:with语句
其他类型:模块、class、实例、函数、方法、代码、object对象、type对象、ellipsis(省略号)、notimplemented
Ⅷ python type函数没有
type()函数得到的是一个类型而不是字符串,如果用用来输出,比如在文件中write,就要先将其转换为字符串类型。通过str(type(a))的方式,得到一个字符串"
"(python2.6下是这样的)。
你可以直接将其print或write。
比如一下代码示例:
a
=
3
s=str(type(a))
f=open('1.txt','w')
f.write(s)
f.close()
这样1.txt文本中就会出现"
"这几个字,如果你单纯只要’int‘这个类型的名称可以通过replace()函数将不需要的地方替换为空:比如上例中的s=str(type(a))改成s=str(type(a)).replace("
",'')。这样就只输出‘int’这个类型名。另外python3中的type返回值可能是
,你只要将replace("
评论
0
0
加载更多
Ⅸ python中print type是什么意思
python中type() 函数返回对象的类型,print函数为打印结果,
验证如下,
1、WIN+R快捷键,打开运行窗口,准备进入python环境,
Ⅹ python type()函数问题
type()函数得到的是一个类型而不是字符串,如果用用来输出,比如在文件中write,就要先将其转换为字符串类型。通过str(type(a))的方式,得到一个字符串"<type 'int'>"(Python2.6下是这样的)。
你可以直接将其print或write。
比如一下代码示例:
a = 3
s=str(type(a))
f=open('1.txt','w')
f.write(s)
f.close()
这样1.txt文本中就会出现"<type 'int'>"这几个字,如果你单纯只要’int‘这个类型的名称可以通过replace()函数将不需要的地方替换为空:比如上例中的s=str(type(a))改成s=str(type(a)).replace("<type '",'').replace("'>",'')。这样就只输出‘int’这个类型名。另外Python3中的type返回值可能是<class 'int'>,你只要将replace("<type '",'')改成replace("<class '",'')就行了。
希望能帮助到你!