python的数据类型

个人觉得一个编程语言的主要内容可以分为数据类型,程序控制流,函数,面向对象这几块。

python的数据类型相对来说更接近PHP,毕竟都是解释型语言,而且变量都采用了弱类型这种形式。相对来说python的更有特色,在变量声明的时候和PHP相似,不用考虑变量类型,但和PHP是用一个包含多类型的容器去实现弱类型不同,python是采用了类似java的包装类的技术,对所有基础类都实现了相应的包装类,声明变量的时候直接按照需要的确切类型使用对应的包装类,至少表面如此,至于底层实现就不清楚了。

常用的基础类型几乎和PHP一致,就不细说了,需要注意的是python的4个容器,list,tuple,dict,set

list可以理解为C++的数组,或者java的容器,当然使用的时候其实更像是php的无key数组,弱类型的语言便利性在这点上无法否认。

tuple相当于常量数组,也就是内容只读的list

dict也叫字典,对应php中的键值对数组和java中的map容器,需要注意的是key具有唯一性

set是一种去重集合,只有value没有key

对于变量的基本操作和认识,用以下代码来说明

a="111"
b=111
print(type(a))#type可以用于类型检测
print(type(b))
print(id(a))#id用于显示变量地址
print(id(b))
b=a
print(id(a))
print(id(b))#a和b指向同一个地址,可以看出应该是类似于java字符常量池的机制,在节省内存
a="222"
print(a)
print(b)#b并没有跟着a改变,从这里可以看出并非引用传递,这说明python的变量1地址只表示存储的值的实际地址,并非变量申请的存储空间
c=[1,2,3]
d=c
print(id(c))
print(id(d))
c[0]=3
print(c)
print(d)#d跟着改变,可以看出这里是浅拷贝

 对list的常见操作见下面的代码

#声明
a=[0,1,2,3,4,5]
#切片,也就是定位element
print(a[1])
print(a[2:5])#不包括index是5的element
b=[0,1,[0,1,2,["here"]]]
print(b[2][3][0])#可以进行级连操作
#一些常用操作
print(len(b))#len为关键字,不能进行b.len()之类的操作
#print(','.join(a))#报错,只有字符串list才能被join
a=["0","1","2","3"]
print(",".join(a))
#list支持像java中的list容器那样的常见操作
#追加一个元素
a.append("4")
print(a)
#插入
a.insert(1,"5")
print(a)
#删除
a.pop(1)
print(a)
#获取索引
print(a.index("3"))
#排序
c=[2,3,6,1,8,4,2]
c.sort()
print(c)
#合并
d=[2,3,"a","b","c"]
c.extend(d)
print(c)

tuple的使用相对简单,dict的具体使用注意事项和常规操作可以见代码

a=1
b="2"
c=3
#d={a:"1",b:"2","3":c,[1,2]:"d"}#字典类型的key必须是基础类型
d={a:"1",b:"2","3":c}
print(d)
print(d["2"])
print(d[1])
#print(d[5])溢出错误
print(d.get(5,"d don't has this key"))#get比直接使用[key]的方式取值更安全
#获取keys
print(type(d.keys()))#直接调用keys获取到的是一种叫dict_keys的特殊数据类型,需要用list转化为list类型
print(list(d.keys()))
#获取values
print(list(d.values()))#与获取keys类似,同样需要使用list转化
#赋值,方式和php极为相似
d["new"]="new element"
print(d)
#判断
#如果d中没有value为last的element,新加一个
if not("last" in d):
    d["last"]="last element"
print(d)
#删除对应key的element
d.pop("last")
print(d)
#dict合并,实质是用后一个dict对前一个进行更新/覆盖(以key为准进行操作)
d.update({"new":"new new element","last":"new last element"})
print(d)
#删除,python中del是一个关键字,并不能使用d.del("last")这种方式
del d["last"]
print(d)
#清空
d.clear()
print(d)
#拷贝,也就是进行深拷贝
a={"1":"1","2":[1,2,3],"3":{"1":(1,2),"2":[3,4,5]}}
b=a.copy();
print(a)
print(b)
print(id(a))
print(id(b))

 需要特别说明的是list,tuple,dict,set这四种类型赋值时候都是浅拷贝,也就是引用赋值,和int,str等基础类型不同

set的使用见代码

print(type(set({})))#set类型
set({1,2,"3"})
#set({1,[]})#set的element只能为基础数据类型
print(set({1,1}))#set的本质是去重容器,声明时候可以是重复的,但最终结果是去重的
#set的常见操作
a=set({1,2,"a","b"})
print(len(a))
#添加元素
a.add("b")
a.add("c")
print(a)#从顺序上可以看出是乱序的,set的本质是一个无序去重集合
#移除元素
#a.remove("e")#移除不存在的元素会报错
a.remove("b")
print(a)
#集合运算
a=set({1,2,3})
b=set({3,4,5})
print(a&b)#求交集
print(a^b)#求差集,就是并集减去交集
print(a|b)#求并集
a=set({1,2})
b=set({1,2,3})
c=set({1,2})
#判断一个集合是否是另一个集合的子集
print(a<=b)
print(a<=c)
#判断一个集合是否另一个集合的真子集
print(a<b)
print(a<c)#c和a的元素一致,没有其它非a元素,所以不是真子集

 关于数据的其它讨论

a=True#python中的bool值首字母要大写
print(type(a))#bool类型
a=None
print(type(a))#NoneType类型,相当于NULL
#python中没有const的变量,只是一般会用大写命名类似的变量
PI = 3.14 # 常量
#python中所有基础数据类型还有扩展类型,比如list,dict,set本质都是对象,类似于java的包装类
str() # 字符串对象
int() # 整型对象
float() # 浮点型对象
list() # 列表对象
tuple() # 元组对象
dict() # 字典对象
set() # 字典对象
bool() # 布尔对象
#这些包装类可以用于声明相对应的变量,也可以用于变量转换,相当于java的包装和解包装
print(str(1))
print(int("1"))
print(list(tuple(set({1,2,3}))))

 

posted @ 2021-02-24 21:43  魔芋红茶  阅读(113)  评论(0编辑  收藏  举报