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 '",'')就行了。
希望能幫助到你!