對於前幾天數據類型的補充1、整形inta.幾種輸入的方法 a = 123 a = int(123) 對於當我們在設備上輸入a = 123時其實Python內部他們會把他轉換為int(123),對於後面的括弧在Python的內部其實是調用了__init__ b.int的內部優化 像下麵這種情況他們在內 ...
對於前幾天數據類型的補充
1、整形int
a.幾種輸入的方法
a = 123
a = int(123)
對於當我們在設備上輸入a = 123時其實Python內部他們會把他轉換為int(123),對於後面的括弧在Python的內部其實是調用了__init__
b.int的內部優化
像下麵這種情況他們在記憶體里是共用一塊地址的:
n1 = 123
n2 = n1
對於下麵這種情況他們在記憶體里使用不同的地址來存儲
n1 = 123
n2 = 123
但是在Python的內部他會把-5----127之間的數做一個優化,認為他們是常用的數字,所以在程式中他們還是會使用同記憶體地址來存儲
c.長度的限制
對於操作系統的不同對於int的長度也不同
32bit -2**31-----------2**31-1
64bit -2**63-----------2**63-1
但是對於Python來說如果我們使用的數超過了int的最大數那麼他不會報錯,而是會把轉換為長整形。也就是會在數字的後面加上l
長整形的範圍可以說是無限的大,只要你的記憶體越大他就越大可以把記憶體消耗完
2、字元串、str
a.創建方式
s1 = "rasir"
s2 = str("rasir")
b.特有功能,一般需要記住的
s1.strip()----------------------------移除字元串兩端的空格
s1.startswith()----------------------查找字元串中,關與自己查找的是否相同
s1.find()-----------------------------查找字元串中某個字元
s1.replace()-------------------------將字元串中某個序列替換成自己想要替換的字元
s1.upper()---------------------------將字元串的所有字母變成大寫
s1.isapha()---------------------------查找字元串中是否只有字母如果只有字母則返回True否則返回False
c.公共功能
索引:只能取一個元素
切片:可以取多個元素
編碼、for
舉例:
temp = "你好"
for i in temp:
print (i)
bytes_list = bytes(i,encoding='utf-8')
print(bytes_list)
for i in bytes_list:
print (i)
print(bin(i))
輸出結果:
你
b'\xe4\xbd\xa0'
228
0b11100100
189
0b10111101
160
0b10100000
好
b'\xe5\xa5\xbd'
229
0b11100101
165
0b10100101
189
0b10111101
總結:對於utf-8的編碼來說漢字是以三個位元組來存儲的,並且會以十六進位進行來表現的,而對gbk碼是2個位元組來存儲
對於2.7與3.7版本,在for迴圈輸出漢字的時候,對於2.7的版本是以位元組的形式輸出的,而對於2.7的版本是以字元的形式輸出
從上面的舉例可以看出對於for迴圈的時候會自動把別的進位自動轉換成十進位
d. str與Bytes的轉換
(1)、將字元串轉換為位元組:
a = '小白'
n1 = bytes(a ,encoding='utf-8')
n2 = bytes(a ,encoding='gbk')
print(n1)
print(n2)
輸出結果:
b'\xe5\xb0\x8f\xe7\x99\xbd'
b'\xd0\xa1\xb0\xd7'
(2)、將位元組轉換成字元串
a = '小白'
n1 = bytes(a ,encoding='utf-8')
n2 = bytes(a ,encoding='gbk')
new1 = str(n1,encoding="utf-8")
new2 = str(n2 ,encoding='gbk')
print(new1,new2)
輸出結果:
小白 小白
總結:Bytes可以強制定義創建位元組,也可以用來對其他類型進行轉換到位元組
Str可以強制定義一個字元串,也可以用來對其他類型的對象轉換到字元串
對於漢子utf-8是以三個位元組來存儲的而GBK是以兩個位元組來存儲的
3、列表:list
a1 = ['cui','rain','sir']----------------創建一個列表
a2 = list()-------------------------------創建一個空的列表
a2 = list(['cui','rain','sir'])
def __init__(self, seq=())---------------------------------------對於轉換的對象要是可迭代(可以這麼理解可迭代的就是可以for迴圈的)
(1)、字元串轉換成列表
舉例:
a = '小白'
a1 = list(a)---------------------------這時的a在括弧的內部相當於一個for的迴圈
print(a1)
輸出結果: ['小', '白']
(2)、將元組轉換為列表
舉例:
a = ('cui','rain','sir')
a1= list(a)----------------------------------------------------for迴圈,將每一個迴圈的元素當做列表的元素
print(a1)
輸出結果:
['cui', 'rain', 'sir']
(3)、將字典轉換為列表
舉例:
a = {'rain':'sir',
'yan':'sea'}
a1 = list(a)
a2 = list(a.values())
a3 = list(a.items())
print(a1)
print(a2)
print(a3)
輸出結果:
['rain', 'yan']
['sir', 'sea']
[('rain', 'sir'), ('yan', 'sea')]
a、特別的一些列表的功能
a1.clear()---------------------------------------------------------------------清除列表功能
a1.append()-------------------------------------------------------------------追加某個元素
a1.extend()--------------------------------------------------------------------以迭代的方式追加元素
a1.insert()--------------------------------------------------------------------添加元素,在指定的位置添加元素
a1.reverse()-------------------------------------------------------------------將列表反轉
b、共有的特性
都可以索引--------------------對於索引索引之後一定是個元素
都可以切片--------------------對於切片如果切片之前是字元那麼切片之後也是字元,如果之前是列表那麼之後也是列表
都可以for迴圈
c、嵌套的索引
a1 = ['rain','sir','sea',123,{'aaa':'bbb','ccc':{'ddd':'eee'}}]
a2 = a1[4]["ccc"]['ddd']
4、元祖.tuple
a、創建和轉換
a1 = ('cui','rain','sir')
a2 = tuple(a1)---------------------------------也是可以迭代的
a3 = tuple(('cui','rain','sir'))
b、基本特性
count------------------------------------------------統計有多少個元素
index------------------------------------------------查找查個元素並返位置
c、元素不可被修改
a1 = ('cui','rain','sir',['hell','keke'])
print(a1)
a1[3].append('while')
print(a1)
輸出結果:
('cui', 'rain', 'sir', ['hell', 'keke'])
('cui', 'rain', 'sir', ['hell', 'keke', 'while'])
總結:對於元祖來說他的元素是不可以被修改,但是他元素內的內容是可以被修改,向上面的舉例來說,如果我們想修改元素‘cui’是不可以
重要:一般來說對於字元串在使用一個功能的時候一般不會改變原來的內容,而對於list,tuple,dict來說一般會在原來對象上進行修改
5、字典、dict
a、創建和轉換
n1 = {'rain':'sir','tan':'aaa'}
n1 = dict({'rain':'sir','tan':'aaa'})
列表到字元串
a1 = ['rain','sir']
a2 = dict(enumerate(a1))
print(a2)
b、基本的特性
n1.fromkeys()--------------------------------------------------用來創建一個新的字典
如果一個方法的上面有staticmethod這上單詞那麼這個是用類來調用的,像平常我們一般是用對象來調用方法
舉例:
n1 = dict.fromkeys(['k1','k2','k3'],[])
print(n1)
n1["k1"].append('bbb')
print(n1)
輸出結果:
{'k1': [], 'k2': [], 'k3': []}
{'k1': ['bbb'], 'k2': ['bbb'], 'k3': ['bbb']}
總的結:
對於fromkeys來說後面所創建的vlan值他們使用的是同一個記憶體地址。這也就解釋了為什麼在對於k1的Value值添加之後其他的都添加了
n1.get()--------------------------------------------------------------------------------------------------------------------根據key值來獲取Value,與用索引不同的是,如果沒有這個key值那麼get會給它返回一個空值,而索引不會則會報錯,這裡的d是預設的填充的值,當vlaue沒有時我們可以用預設值來填充