基本数据类型
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]