當前位置:首頁 » 編程語言 » python的type類型

python的type類型

發布時間: 2024-02-01 05:39:02

python中的幾種數據類型


大體上把Python中的數據類型分為如下幾類:
Number(數字) 包括int,long,float,complex
String(字元串) 例如:hello,hello,hello
List(列表) 例如:[1,2,3],[1,2,3,[1,2,3],4]
Dictionary(字典) 例如:{1:nihao,2:hello}
Tuple(元組) 例如:(1,2,3,abc)
Bool(布爾) 包括True、False
由於Python中認為所有的東西都是對象,所以Python不用像其它一些高級語言那樣主動聲缺慎豎明一個變數的類型。
例如我要給一個變數i賦值100,python的實現 :
i=100
C#的實現:
int i = 100;
下面一一簡單介紹這幾種數據類型
數字類型
int和long
之所以要把int和long放在一起的原因是python3.x之後已經不區分int和long,統一用int。python2.x還是區分的。下面我以Python2.7為例:
i = 10
type(i)
i=10000000000
type(i)
那麼為什麼10就是int,10000000000就是long呢,當然這就和int的最大值有關了,int類孝毀型的最大值為231-1,即2147483647,也可以用sys.maxint。
2**31-1
2147483647L
sys.maxint
2147483647
為什麼用上面的方法求的值就是long型的呢(數字後面加『L』表示是long型),因為2**31的值為2147483648,這個值是一個long型,用一個long型減去1,結果還是一個long,但實際上int型的最大值就是2147483647
type(2147483647)
type(2147483648)
float類型
float類型和其它語言的float基本一致,浮點數,說白了,就是帶小數點的數,精度與機器相關。例如:
i = 10000.1212
type(i)
complex:復數類型,具體含義及用法可自行查看相關文檔。
字元串類型
字元串的聲明有三種方式:單引號、雙引號和三引號(包括三個單引號或三個雙引號)。例如:
str1 = hello world
str2 = hello world
str3 = hello world
str4 = hello world
print str1
hello world
print str2
hello world
print str3
hello world
print str4
hello world
Python中的字元串有兩種數據類型:str類型和unicode類型。str類型採用的ASCII編碼,也就是說它無法表示中文。unicode類型採用unicode編碼,能夠表示任意字元,包括中文及其它語言。並且python中不存在像c語言中的char類型,就算是單個字元也是字元串類型。字元串默認採用的ASCII編碼,如果要顯示聲明為unicode類型的話,需要在字伏大符串前面加上u或者U。例如:
str1 = hello
print str1
hello
str2 = u中國
print str2
中國
由於項目中經常出現對字元串的操作,而且由於字元串編碼問題出現的問題很多,下面,來說一下關於字元串的編碼問題。在與python打交道的過程中經常會碰到ASCII、Unicode和UTF-8三種編碼。具體的介紹請參見這篇文章。我簡單的理解就是,ASCII編碼適用英文字元,Unicode適用於非英文字元(例如中文、韓文等),而utf-8則是一種儲存和傳送的格式,是對Uncode字元的再編碼(以8位為單位編碼)。例如:
u = u漢
print repr(u) # uu6c49
s = u.encode(UTF-8)
print repr(s) # xe6xb1x89
u2 = s.decode(UTF-8)
print repr(u2) # uu6c49
解釋:聲明unicode字元串」漢「,它的unicode編碼為」u6c49「,經過utf-8編碼轉換後,它的編碼變成」xe6xb1x89「。
對於編碼的經驗總結:
1.在python文件頭聲明編碼格式 ;
#-*- coding: utf-8 -*-
2.將字元串統一聲明為unicode類型,即在字元串前加u或者U;
3.對於文件讀寫的操作,建議適用codecs.open()代替內置的open(),遵循一個原則,用哪種格式寫,就用哪種格式讀;
假設在一個以ANSI格式保存的文本文件中有「中國漢字」幾個字,如果直接用以下代碼,並且要在GUI上或者在一個IDE中列印出來(例如在sublime text中,或者在pydev中列印),就會出現亂碼或者異常,因為codecs會依據文本本身的編碼格式讀取內容:
f = codecs.open(d:/test.txt)
content = f.read()
f.close()
print content
改用如下方法即可(只對中文起作用):
# -*- coding: utf-8 -*-
import codecs
f = codecs.open(d:/test.txt)
content = f.read()
f.close()
if isinstance(content,unicode):
print content.encode(utf-8)
print utf-8
else:
print content.decode(gbk).encode(utf-8)
列表類型
列表是一種可修改的集合類型,其元素可以是數字、string等基本類型,也可以是列表、元組、字典等集合對象,甚至可以是自定義的類型。其定義方式如下:
nums = [1,2,3,4]
type(nums)
print nums
[1, 2, 3, 4]
strs = [hello,world]
print strs
[hello, world]
lst = [1,hello,False,nums,strs]
type(lst)
print lst
[1, hello, False, [1, 2, 3, 4], [hello, world]]
用索引的方式訪問列表元素,索引從0開始,支持負數索引,-1為最後一個.
lst = [1,2,3,4,5]
print lst[0]
1
print lst[-1]
5
print lst[-2]
4
支持分片操作,可訪問一個區間內的元素,支持不同的步長,可利用分片進行數據插入與復制操作
nums = [1,2,3,4,5]
print nums[0:3] #[1, 2, 3] #前三個元素
print nums[3:] #[4, 5] #後兩個元素
print nums[-3:] #[3, 4, 5] #後三個元素 不支持nums[-3:0]
numsclone = nums[:]
print numsclone #[1, 2, 3, 4, 5] 復制操作
print nums[0:4:2] #[1, 3] 步長為2
nums[3:3] = [three,four] #[1, 2, 3, three, four, 4, 5] 在3和4之間插入
nums[3:5] = [] #[1, 2, 3, 4, 5] 將第4和第5個元素替換為[] 即刪除[three,four]
支持加法和乘法操作
lst1 = [hello,world]
lst2 = [good,time]
print lst1+lst2 #[hello, world, good, time]
print lst1*5 #[hello, world, hello, world, hello, world, hello, world, hello, world]
列表所支持的方法,可以用如下方式查看列表支持的公共方法:
[x for x in dir([]) if not x.startswith(__)]
[append, count, extend, index, insert, pop, remove, reverse, sort]
def compare(x,y):
return 1 if xy else -1
#【append】 在列表末尾插入元素
lst = [1,2,3,4,5]
lst.append(6)
print lst #[1, 2, 3, 4, 5, 6]
lst.append(hello)
print lst #[1, 2, 3, 4, 5, 6]
#【pop】 刪除一個元素,並返回此元素的值 支持索引 默認為最後一個
x = lst.pop()
print x,lst #hello [1, 2, 3, 4, 5, 6] #默認刪除最後一個元素
x = lst.pop(0)
print x,lst #1 [2, 3, 4, 5, 6] 刪除第一個元素
#【count】 返回一個元素出現的次數
print lst.count(2) #1
#【extend】 擴展列表 此方法與「+」操作的不同在於此方法改變原有列表,而「+」操作會產生一個新列表
lstextend = [hello,world]
lst.extend(lstextend)
print lst #[2, 3, 4, 5, 6, hello, world] 在lst的基礎上擴展了lstextend進來
#【index】 返回某個值第一次出現的索引位置,如果未找到會拋出異常
print lst.index(hello) #5
#print lst.index(kitty) #ValueError: kitty is not in list 出現異常
#【remove】 移除列表中的某個元素,如果待移除的項不存在,會拋出異常 無返回值
lst.remove(hello)
print lst #[2, 3, 4, 5, 6, world] hello 被移除
#lst.remove(kitty) #ValueError: list.remove(x): x not in list
#【reverse】 意為反轉 沒錯 就是將列表元素倒序排列,無返回值
print lst #[2, 3, 4, 5, 6, world]
lst.reverse()
print lst #[2, 3, 4, 5, 6, world]
#【sort】 排序
print lst #由於上面的反轉 目前排序為 [world, 6, 5, 4, 3, 2]
lst.sort()
print lst #排序後 [2, 3, 4, 5, 6, world]
nums = [10,5,4,2,3]
print nums #[10,5,4,2,3]
nums.sort(compare)
print nums #[2, 3, 4, 5, 10]
列表轉換為迭代器。
所謂的迭代器就是具有next方法(這個方法在調用時不需要任何參數)的對象。在調用next方法時,迭代器會返回它的下一個值。如果next方法被調用,但迭代器沒有值可以返回,就會引發一個StopIteration異常。迭代器相對於列表的優勢在於,使用迭代器不必一次性將列表加入內存,而可以依次訪問列表的數據。
依然用上面的方法查看迭代器的公共方法:
lst = [1,2,3,4,5]
lstiter = iter(lst)
print [x for x in dir(numiter) if not x.startswith(__)]
[next]
沒錯,只有next一個方法,對於一個迭代器,可以這樣操作:
lst = [1,2,3,4,5]
lstiter = iter(lst)
for i in range(len(lst)):
print lstiter.next() #依次列印
1
2
3
4
5
元組類型
元組類型和列表一樣,也是一種序列,與列表不同的是,元組是不可修改的。元組的聲明如下:
lst = (0,1,2,2,2)
lst1=(hello,)
lst2 = (hello)
print type(lst1) # 只有一個元素的情況下後面要加逗號 否則就是str類型
print type(lst2) #
字典類型
字典類型是一種鍵值對的集合,類似於C#中的Dictionary
dict1 = {}
print type(dict1) # 聲明一個空字典
dict2 = {name:kitty,age:18} #直接聲明字典類型
dict3 = dict([(name,kitty),(age,18)]) #利用dict函數將列表轉換成字典
dict4 = dict(name=kitty,age=18) #利用dict函數通過關鍵字參數轉換為字典
dict5 = {}.fromkeys([name,age]) #利用fromkeys函數將key值列表生成字典,對應的值為None {age: None, name: None}
字典基本的操作方法:
#【添加元素】
dict1 = {}
dict1[mykey] = hello world #直接給一個不存在的鍵值對賦值 即時添加新元素
dict1[(my,key)] = this key is a tuple #字典的鍵可以是任何一中不可變類型,例如數字、字元串、元組等
#【鍵值對個數】
print len(dict1)
#【檢查是否含有鍵】
print mykey in dict1 #True 檢查是否含有鍵為mykey的鍵值對
print hello in dict1 #False
#【刪除】
del dict1[mykey] #刪除鍵為mykey的鍵值對
繼續利用上面的方法查看字典的所有公共方法:
[x for x in dir({}) if not x.startswith(__)]
[clear, , fromkeys, get, has_key, items, iteritems, iterkeys, itervalues,
keys, pop, popitem, setdefault, update, values, viewitems, viewkeys, viewvalues]
dict.clear() 刪除字典中所有元素
dict.() 返回字典(淺復制)的一個副本
dict.get(key,default=None) 對字典dict 中的鍵key,返回它對應的值value,如果字典中不存在此鍵,則返回default 的值(注意,參數default 的默認值為None)
dict.has_key(key) 如果鍵(key)在字典中存在,返回True,否則返回False. 在Python2.2版本引入in 和not in 後,此方法幾乎已廢棄不用了,但仍提供一個 可工作的介面。
dict.items() 返回一個包含字典中(鍵, 值)對元組的列表
dict.keys() 返回一個包含字典中鍵的列表
dict.values() 返回一個包含字典中所有值的列表
dict.iter() 方法iteritems(), iterkeys(), itervalues()與它們對應的非迭代方法一樣,不同的是它們返回一個迭代器,而不是一個列表。
dict.pop(key[, default]) 和方法get()相似,如果字典中key 鍵存在,刪除並返回dict[key],如果key 鍵不存在,且沒有給出default 的值,引發KeyError 異常。
dict.setdefault(key,default=None) 和方法set()相似,如果字典中不存在key 鍵,由dict[key]=default 為它賦值。
dict.setdefault(key,default=None) 和方法set()相似,如果字典中不存在key 鍵,由dict[key]=default 為它賦值。
布爾類型
布爾類型即True和False,和其它語言中的布爾類型基本一致。下面列出典型的布爾值
print bool(0) #False
print bool(1) #True
print bool(-1) #True
print bool([]) #False
print bool(()) #False
print bool({}) #False
print bool() #False
print bool(None) #False

㈡ python的type是什麼

查看類型的,你可以輸出一些代碼試試,比如:

importmath
printtype(3)
printtype(3.4)
printtype(math)

㈢ 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 和 object 之間是怎麼一種關系

Python的object和type理解

1、節選自Python Documentation 3.5.2的部分解釋

Objects are Python』s abstraction for data. All data in a Python program is represented by objects or by relations between objects. (In a sense, and in conformance to Von Neumann』s model of a 「stored program computer,」 code is also represented by objects.)

對象是Python對數據的抽象。 Python程序中的所有數據都由對象或對象之間的關系表示。(在某種意義上,並且符合馮·諾依曼的「存儲程序計算機」的模型,代碼也由對象表示的)。

Every object has an identity, a type and a value. An object』s identity never changes once it has been created; you may think of it as the object』s address in memory. The 『is『 operator compares the identity of two objects; the id() function returns an integer representing its identity.

每個對象都有一個標識,一個類型和一個值。 對象的身份一旦創建就不會改變; 你可以把它看作內存中的對象地址。'is'運算符比較兩個對象的標識; id()函數返回一個表示其身份的整數。

An object』s type determines the operations that the object supports (e.g., 「does it have a length?」) and also defines the possible values for objects of that type. The type() function returns an object』s type (which is an object itself). Like its identity, an object』s type is also unchangeable.

對象的類型決定對象支持的操作(例如,「它有長度嗎?」),並且還定義該類型對象的可能值。type()函數返回一個對象的類型(它是一個對象本身)。與它的身份一樣,對象的類型也是不可改變的。

2、Pyhtml的解釋:

object:

class object

The most base type

type:

class type(object)

type(object_or_name, bases, dict)

type(object) -> the object's type

type(name, bases, dict) -> a new type

從上面三個圖可以看出,對象obeject是最基本的類型type,它是一個整體性的對數據的抽象概念。相對於對象object而言,類型type是一個稍微具體的抽象概念,說它具體,是因為它已經有從對象object細化出更具體抽象概念的因子,這就是為什麼type(int)、type(float)、type(str)、type(list)、type(tuple)、type(set)等等的類型都是type,這也是為什麼instance(type, object)和instance(object, type)都為True的原因,即類型type是作為int、float等類型的整體概念而言的。那麼,為什麼issubclass(type, object)為True,而issubclass(object, type)為Flase呢?從第二張圖,即從繼承關系可以看到,type是object的子類,因此前者為True,後者為False。若從Python語言的整體設計來看,是先有對象,後有相對具體的類型,即整體優先於部分的設計思想。

如果從更加本質的視角去看待這些問題的話,就要從Python Documentation-->3. Data Model-->3.1 Objects,values and types找原因了[請參考Python官方標准庫],從標准庫里可以看到:

object是Python對數據的抽象,它是Python程序對數據的集中體現。

每個對象都有一個標識,一個類型和一個值。

對象的類型決定對象支持的操作。

某些對象的值可以更改。 其值可以改變的對象稱為可變對象;對象的值在創建後不可更改的對象稱為不可變對象。

因此,從Python整體設計體系來看的話,就是先有對象,再有標識、類型和值,接著是對對象的操作等等,這也就解釋了圖3的結果形成的原因了。

熱點內容
wow刷碎片腳本 發布:2024-11-29 15:58:24 瀏覽:590
明小子源碼 發布:2024-11-29 15:15:30 瀏覽:143
蘋果8plus什麼配置 發布:2024-11-29 14:16:36 瀏覽:677
androidmvp結構 發布:2024-11-29 14:16:34 瀏覽:535
androidsqlite命令 發布:2024-11-29 14:04:38 瀏覽:156
信用卡分期演算法 發布:2024-11-29 13:50:56 瀏覽:807
安卓手機dll文件為什麼打不開 發布:2024-11-29 13:40:49 瀏覽:1002
百分之五十石碳酸怎麼配置 發布:2024-11-29 13:38:56 瀏覽:972
我的世界伺服器如何裝資源包 發布:2024-11-29 13:25:48 瀏覽:22
mc伺服器的ip是什麼 發布:2024-11-29 13:23:33 瀏覽:568