数据类型

变量

        python中以数据为主体,不同的数据存储在不同的地址空间中,而变量名只是地址空间的一个标签,通过这个标签可以访问到这个内存,从而拿到内存中存储的数据。并不是说会为该变量分配一个固定的地址空间,而对变量赋值就是向该地址空间中添加不同的数据。如:

#ecoding:utf-8
a=123
b=123
print(id(a))
print(id(b))
a=345
print(id(a))

三次输出的结果如下;

140710290416624

140710290416624

140710290448232

        从中可以看出前两次是相同的,这是因为a ,b都是同一个内存块(该内存块中存储的是123)的标签,因为345与123存储在不同的内存块中,所以最后一个结果与前面不同。

        由于变量的标签特性,可以看出python中变量与java中的有如下不同:

        1,定义变量时不需要指定变量类型。它只是一块内存的一个标签,该内存段中存储的值早已注定,所以不需要用变量来确定该内存段中应该存储什么类型的数据。

        2,同一个变量,可以赋值为不同的类型。赋值不同的类型时,变量只不过为不同内存块的标签而已。

数字

        数字可以分为整型(int),长整型(long),浮点型(float)与复数型(complex)。

        在数学中,用i来表示复数,但在python中用j表示复数。如:


例子中的c就是一个实部与虚部都为2的复数,它的类型为complex。

字符串

        支持单引号、双引号以及三重引号而已。 单引号与双引号没有啥区别,三重引号可以将字符串中的特殊格式保留下来(比如换行等)。

        字符串可以看成一个字符数组,可以通过下标的形式取出某一个字符或某一范围内的子串。

a='abcdefg'
print(a[2])
print(a[1:5])

第一个输出的为c,第二个输出的为bcde。其中第二个a[1:5]表示从a[1]取到a[4],截取a中的一个子串。

        a[m:n]:表示获取下标为[m,n)的子串。其中m,n可为负数,-1表示字符串的最后一个字符。

        a[m:n:step]:表示获取下标为[m,n)的子串,但每一步的步长为step,步长为正则取值方向为从左往右,步长为负负则从右往左。m,n,step都可以为负数。以上面例子为例,a[1:5:2]的输出结果为bd,b的下标为1,走2步后就是d,d再走一个步长就超出了5的范围,所以不再输出。

        对于单双引号的选择:字符串内部有单引号时则最外面使用双引号;字符串内部有双引号时,则最外面使用单引号;如果单双引号都有,则使用三引号。

转义与raw字符串

        字符串的转义与java中类似,都是以\开头。\n表示换行,\t表示制表符等。例如

>>> print("\aaaa")
aaa

        如果想输出\aaaa,则需要对第一个\进行转义:print("\\aaaa")。

        如果一个字符串中需要转义的太多,可以使用r(raw的缩写)开头,则字符串就会按原文输出,不会进行转义。如下:

>>> print("fadfas\nfdasf")
fadfas
fdasf
>>> print(r"fadfas\nfdasf")
fadfas\nfdasf

        通过r表示字符串内中都是原始字符串,不需要进行转义。

常用方法

        capitalize:将字符串首字母转换为大写。

        replace:替换指定的内容。可以指定替换的个数。replace(old,new,count)基本的count指的就是将几个old替换成new。也可以不传入count,则所有的old都被替换成new。

        split:切割字符串。可指定切割次数。 S.split(sep=None, maxsplit=-1)。

        strip:移除字符串开头和结尾处指定的字符。默认时移除空白字符(换行,制表符,空格等),也可自己指定。

s = ' abcdefxxxf\t'
print('---'+s.strip()+"--")  # ---abcdefxxxf-- 移除两端的空白字符
s1 = '\rfdafa\n'
print('---'+s1.strip()+"--")  # ---fdafa--
s1 = 'xxxxxfdafayyyyay'
print('---'+s1.strip('xya')+"--")  # ---fdaf--

        从前两个可以看出,移除了空白字符。从后一个可以看出,移除了指定的字符——将要移除的字符组成字符串。

序列

        字符串,元组,列表都是序列。每一个序列都具有如下操作:

        1,通过下标获取指定位置的元素。

        2,通过a[m:n:step]形式获取序列的子序列。

常用的操作序列的方法有:

        len():获取序列的长度。如a='abc',则len(a)返回3。

        +:将两个序列拼接。

        *表示将序列重复多少次。如a='abc',则a*5值为abcabcabcabcabc

        in:判断某一个元素是否在序列中。比如a='abc',则'cab' in a*5返回的结果就是True。

        not in:与in相反,判断某个元素不在序列中。

        max(),min():返回序列中最大值和最小值。

        cmp():比较两个序列是否相等。返回0表示相等,返回值大于0第一个参数大于第二个参数,否则小于。

元组(tuple)

        用()进行定义,元素之间用逗号隔开,并且元素的类型可以不相同,元组的值不可改变

        空元组就是一个空括号,一个元素的元组,元素后面也必须跟逗号。如:

a=()  # 空元组 如果取a[0]则报IndexError: tuple index out of range
b=(1,)  # 只有一个元素的元组,必须加最后面的逗号
c=(2,'abs')  # 多个元素的元组
print(b[0])  # 输出1
        通过元组可以元组可以存储一系列的值,但不能通过元组修改存储的值。如:

        可以将元组进行拆分,将元组的元素值分别赋值给不同的变量。如:


其中a,age,stu=a就是将元组a进行拆分,使其各个元素分别赋值给a,age,stu。

        与之类似,可以按元组的方式对多个变量进行赋值。如:

 a,b,c=1,'ab',True
但禁止这样使用,应将值放在一个元组内,并对元组元素进行拆分赋值。

列表(list)

        用[]表示列表,并且列表的元素是可以修改的。

        1,定义一个元素时,可以不加元素后面的逗号。

        2,列表可变。可以通过下标对列表中的某个位置上的元素进行修改。如下:


对l1[1]进行修改,但l1的位置并不变化 ,可以通过id()进行查看。

        3,也可以对列表进行拆解,与元组类似。

常用方法

        其对应的类为list,可以通过help(list)查看所有的方法以及注释。

        append():向列表中追加一个元素,该元素的下标为列表最后一个下标加1 。直接用列表变量调用该方法即可。

        remove():删除列表中指定的元素。如果有多个,则删除第一个出现的。直接用列表变量进行调用。

        del():删除列表指定位置处的元素。它不同于remove(),它是系统方法,不需要用列表变量进行调用,直接调用即可。而且它删除的是下标指定的元素,并不一定是第一个出现的元素。如下:


字典(dict)

        唯一一个映射类型,类似于HashMap,可变。用{}进行创建,字典是无序的,Key值按其hash值进行排列。如下:


        第一行创建一个字典,不同的键值对之间用逗号隔开,键值用冒号相连。第二行输出字典,可以发现元素的顺序与输入时的顺序不一样;第三行通过key值获取对应的value值,d[2]中的2指的是Key值,而不是下标;d[0]就会报错,因为d中没有key值为0的value;第四行是正确的,因为有key值为字符串0。

        由于字典的key值是不可变的,所以字典的key值不能为list,但可以是基本数据类型,string,元组等。如

m = {'a':12,324:'string'}
m[('tuple')] = ('this','is','tuple')
m[('list')] = ['from','list']
m[['list']] = ['from','list'] # TypeError: unhashable type: 'list'
for x,y in m.items():
	print x,y

        第四句会报错,因为第四句定义的key值是list,而list是可变的。

        字典的value值可以是方法名,如:

def add(a1,a2,*b,**c): # **表示c是一个字典
	print(a1+a2)
def less(a1,a2,*b,**c):
	print(a1-a2)
def multiply(a1,a2,*b,**c): # **表示c是一个字典
	print(a1*a2)
def division(a1,a2,*b,**c):
	print(a1/a2)
operator = {"+":add,"-":less,"*":multiply,"/":division}
print(operator["+"])
operator["*"](5,3) # 15

常用方法

        其对应的类为dict,可以通过help(dict)查看所有的方法以及注释。

        keys():获取字典中的所有key值。

        values():获取字典中的所有value值。

        items():以列表形式返回字典的key,value值。

        xx in dict:判断字典dict中是否有key值为xx的键值对。

        for  xx in dict: :遍历字典的key值。要注意的是dict后面一定有一个冒号,它表示一个代码块开始。如:

>>> for k in dict:

        dict[key]=value:如果字典中没有该key,则向该字典中添加该键值对;如果有该key,则修改该Key对应的value。

        del:同列表中一样,用于删除字典的元素。如:del(dict[key])则删除字典中键值为key的键值对。key值指的是dict中的键,有可能是字符串,有可能是数字等;del dict则会删除整个字典dict。

        pop():删除字典中指定key的键值对,并将对应的value返回。是字典内容的方法,因此需要使用字典变量调用。如dict.pop(key)。

        clear():清空整个字典的内容,但不删除字典本身,只是将它变成一个空字典。del dict后,dict就变成了一个未定义的变量,而dict.clear()后dict还是一个变量,只是没有内容。

        get(key,defaultValue):获取key对应的value,如果该key不存在就返回defaultValue——该值可以不定义。它与dict[key]的区别在于,get()方法在key不存在的时候也不会保错,但dict[key]会。

set

        与java中的set集合一样,无序,元素不重复。可以对set集合做数学上的交集,并集运行。如下:

s = set((1,3,2)) # 创建一个set,set()方法需要的是一个iterable
s2 = set([2,4,5])
print s|s2 # 1,2,3,4,5 取并集
print s&s2 # 2 取交集

        由于set要保证所有元素的唯一性,所以set中的元素必须是不可变的。如:

s = set((1,23))
s.add((2,5,7))
for x in s:
	print x # 依次输出1,(2,5,7),23。

        如果将add中的元组改为list,则会报错(TypeError: unhashable type: 'list')。因为list是可变的。

常用方法

        add():向set集合中添加一个元素,如果元素存在则不进行任何操作。

        remove():从set集合中移除掉一个元素。

        pop():移除第一个元素。

        union(set1,set2,…):取set并集,并将结果以一个新set返回。

        difference(…):取差集,并将结果以一个新set返回。如:

s = set((1,3,2))
s1 = set((3,4,5))
s2 = set((8,2,10))
print s.difference(s1,s2) # 1  s-s1-s2后的元素只有1


比较

        list:有序可重复

        set:无序不可重复

        dict:键值对形式

空值

        python中空值用None表示。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值