1. 程式人生 > >2018-11-22

2018-11-22

基本資料型別

int

建立物件方式

建立物件的兩種方式

int a =1
int a = int(1)

實際呼叫的方法
__init__()

拓展

base

直接把字串解析為數字,跟10的效果一樣
int("11",0)
以二進位制的形式解析字串
int("11",2)

__call__

物件例項化時呼叫的方法

class Dog:
    def __init__(self):
        print("dog coming")
    def __call__(self):
        print("i'm invoked")
        
dog = Dog()  #dog coming
dog()   #i'm invoked
int型別長度

2位二進位制表示的最大數是2^2 -1 ,因為第三位的數是2^2次方
最大數除以2,32位表示最大正數是2^32-1
正負表示-2^31 ~ 2^31-0.5(估計是四捨五入,直接減1算了)
32位表示範圍是-2^31 ~ 2^31-1
64位表示範圍是-2^63 ~ 2^63-1

近似於無限

a = int(2**64)
print(a)

#18446744073709551616

記憶體分析

引用物件,用的一塊記憶體
n1=2 n2=n1

-5~257

如果很多數都是2
n1=2 n2=2...n1000=2每塊用的記憶體不同,浪費
python優化,這個區間的數n1000

n1的記憶體空間一樣
記憶體地址通過id(i)驗證

a = int(1)
c = int(1)
b = int(345)
print(id(a),id(c),id(b))
#140406456890528 140406456890528 140406437991216

str

兩種建立方式

st = "abc" st = str("abc")

引數

字元與位元組

一個位元組,是8位;一箇中文三個位元組,可以用最多兩位16進製表示
2**8 -1 == 16**2 -1

如果是utf-8編碼的,就以字元(預設三個位元組)取出

st = "好人"
#st = st.encode("gbk")
for i in st:
    print(i)

#好
#人

如果是其他編碼(如GBK)的,就每次兩個位元組取出


st = "好人"
st = st.encode("gbk")
for i in st:
    print(i)

#186
#195
#200
#203
互相轉換

字元轉位元組

st = "好人"
b = bytes(st,encoding="utf-8")
print(b)

#b'\xe5\xa5\xbd\xe4\xba\xba'

位元組轉字元

st = "好人"
b = bytes(st,encoding="utf-8")
name = str(b,encoding="utf-8")
print(name)
#好人

兩臺伺服器互相傳送訊息都是通過位元組傳送

list

兩種建立方式

li = [1,2] li=list()

引數

st = "好人"
li = list(st)

m = {"firstname":"好","lastname":"人"}
li2 = list(m)
print(li) # ['好', '人']
#預設只iterate字典的keys
print(li2) # ['firstname', 'lastname']

方法拾遺

清空
clear

li = [1,2]
li.clear()
print(li)
#[]

擴充套件
extend

li = [1,2]
li2 = [3,4]
li.extend(li2)
print(li)

#[1, 2, 3, 4]

翻轉
reverse

li = [1,2]
li.reverse()
print(li)
#[2, 1]

插入
insert

li = [1,2]
li.insert(0,4)
print(li)
#[4, 1, 2]