前文讲述了python的输入输出以及变量的相关知识点,本节将探讨python的数据类型以及数据之间的运算方式!
一、python数据类型上一节弄清了变量,其实变量所指向的值是有自己独特的数据类型的,这些数据类型可能代表不同的数据,在python中,主要有以下几种数据类型:
整形(int)在计算机中,整数的位数其实是有范围的,并没有我们想象的那样拥有无限的位数,而且,在不同的机器上整数的位数可能不同,例如:
32位系统:整数的位数就是32位,寻址范围为:-231 ~ 231-1 ,即-2147483648 ~ 2147483647
64位系统:整数的位数就是64位,寻址范围为:-263 ~ 263-1 ,即-9223372036854775808 ~ 9223372036854775807
长整形(long)在python中,长整形整数并没有指定位数,也就是说,长整形整数可以无限大,但是由于机器本身的限制,往往并不能无限大,到一定范围也就不行了。
浮点型(float)上面两种数据类型都是整数,但在实际并不可能全是整数,还有小数啊,于是浮点型便应运而生,说白了浮点型就是小数,并且可以使用科学计数,在计算机中,科学计数的倍数10用e代替,如:5.21x105 就写成 5.21e9,也可以写成521e7
复数(complex)上面三种数据类型组合起来是实数,其实科学计算中常常用到复数,在python中,存在复数的数据类型,一般形式为:x+yj,式中x,y都是实数,例如:5+6j
布尔值(true、false)布尔值就俩:真、假,python中用true、false表示,一定要注意首字母大写,python中是区分大小写的,一定要注意。
in [77]: 5==6out[77]: falsein [78]: 3>2out[78]: truein [79]: true == trueout[79]: truein [80]: true == falseout[80]: false
空值(none)空值就一个:none,这个空值是很有趣的,none不可以理解为0,因为0不是空值,就好像温度是0摄氏度一样,0摄氏度是有温度的( ̄▽ ̄)"
字符串(str)字符串可能是编写python中用到的最多的数据类型,只要是用引号引起来的就是字符串。python中是不区分单引号、双引号和三引号的,他们是相同的:
in [81]: 'hello,world!'out[81]: 'hello,world!'in [82]: "hello,world!"out[82]: 'hello,world!'in [83]: '''hello,world'''out[83]: 'hello,world'
肯定有萌新会问,搞这么多幺蛾子干啥,统一用一个不就完了,我就默默笑笑不说话:
in [84]: 'i'm minutesheep' file "<ipython-input-84-a2a810ee38cb>", line 1 'i'm minutesheep' ^syntaxerror: invalid syntax
看!报错了竟然,为什么呢?因为python会自动匹配最近的符号与之闭合,所以就会出现上面的情况,做如下修改:
in [85]: "i'm minutesheep"out[85]: "i'm minutesheep"
(萌新:你个糟老头子坏得很╰(‵□′)╯)
同样的,三引号用于多行,或者内容符号混乱的情况:
in [87]: '''i'm minutesheep,i said:"i'm the best man in the world!"'''out[87]: 'i\'m minutesheep,i said:"i\'m the best man in the world!"'in [86]: ''' ...: i'm minutesheep, ...: i said: ...: "i'm the best man in the world!" ...: '''out[86]: '\ni\'m minutesheep,\ni said:\n"i\'m the best man in the world!"\n'
完美解决,还记得\n是什么吗,是换行意思的啦,同样你会发现i'm变成了i\'m,这其实是转义的显示,转义以后会讲到的啦
又有萌新出来作妖了,你上一节不是说三引号是多行注释吗,这一节怎么变成了字符串啦?
这个问题问的好!看我的解释,有图有真相:
直接三引号内容,是注释,只要将三引号内容赋给变量,就是字符串
字符串还有很多方法,之后会专门有一小节详细的讲解字符串的方法。
列表(list)对于列表,萌新可能会很陌生,你可以暂时把它理解为一维数组,列表的在python中的使用次数也是相当多的,是除字符串以外必须掌握的一种数据类型。来看看列表长啥样:
in [88]: ['minutesheep', 'liming', '123', 123]out[88]: ['minutesheep', 'liming', '123', 123]
可以看到,被一对方括号括起来的数据就是列表,刘表里面可以又其他数据类型,上面的列表包括:字符串和整型。当然,列表可以包含列表,称为列表的嵌套:
in [89]: ['minutesheep', ['liming', 123]]out[89]: ['minutesheep', ['liming', 123]]
关于列表,还有好多具体的方法,这里不一一介绍,之后也会有专门的一小节讲解列表方法。
元组(tuple)元组可能就更陌生了,元组其实是不可变列表,列表用一队方括号括起来,元组则用一对圆括号括起来,列表是可以被操作的(比如增、删、改、查),但是元组不行,元组不可被更改,来看看元组长啥样哇:
in [90]: ('minutesheep','liming',123)out[90]: ('minutesheep', 'liming', 123)
字典(dict)字典是python的一种非常强大的数据类型,通过键值对的形式将数据保存下来,提高了数据增、删、改、查的速度,通常作为数据存储的格式,也来看看字典长啥样哇:
in [91]: {'name': 'minutesheep', 'gender' : 'male', 'age': 99}out[91]: {'age': 99, 'gender': 'male', 'name': 'minutesheep'}
可以看到,字典是用一对花括号括起来的,并且以 'key' : 'value' 的形式存储,同样,字典里面可以包含其他数据类型,上面的字典包括:字符串、整型。当然,字典也可以嵌套:
in [92]: {'name' : 'minutesheep', 'age': {'young' : 15, 'old' : 99}}out[92]: {'age': {'old': 99, 'young': 15}, 'name': 'minutesheep'}
字典也会有专门的一节去讲解它的方法。
二、python数据运算说完了python的数据类型,就该数据运算了,养兵千日,用在一时嘛
算数运算加 +
in [93]: 1+2out[93]: 3
减 -
in [95]: 1-2out[95]: -1
乘 *
in [96]: 1*2out[96]: 2
除 /
in [97]: 5/2out[97]: 2.5
取模 % (就是取余数)
in [98]: 5%2out[98]: 1
取整 //
in [99]: 5//2out[99]: 2
幂 **
in [100]: 5**2out[100]: 25
赋值运算简单赋值 =
in [102]: a=5in [103]: b=6in [104]: c=a+bin [105]: cout[105]: 11
加法赋值 += (b+=a,相当于b=b+a)
in [106]: a=5in [107]: b=6in [108]: b+=ain [109]: bout[109]: 11
减法赋值 -= (b-=a,相当于b=b-a)
in [111]: a=5in [112]: b=6in [113]: b-=ain [114]: bout[114]: 1
乘法赋值 *= (b*=a,相当于b=b*a)
in [115]: a=5in [116]: b=6in [117]: b*=ain [118]: bout[118]: 30
除法赋值 /= (b/=a,相当于b=b/a)
in [119]: a=5in [120]: b=6in [121]: b/=ain [122]: bout[122]: 1.2
取模赋值 %= (b%=a,相当于b=b%a)
in [123]: a=5in [124]: b=6in [125]: b%=ain [126]: bout[126]: 1
取整赋值 //= (b//=a,相当于b=b//a)
in [127]: a=5in [128]: b=6in [129]: b//=ain [130]: bout[130]: 1
幂赋值 **= (b**=a,相当于b=b**a)
in [131]: a=5in [132]: b=6in [133]: b**=ain [134]: bout[134]: 7776
比较运算测试相等 ==
in [136]: 1==1out[136]: truein [137]: 1==2out[137]: false
不等于 !=
in [144]: 1!=1out[144]: falsein [145]: 1!=2out[145]: true
大于 >
in [146]: 1>1out[146]: falsein [147]: 2>1out[147]: true
大于等于 >=
in [149]: 1>=1out[149]: truein [150]: 2>=1out[150]: true
小于 <
in [151]: 6<6out[151]: falsein [152]: 6<7out[152]: true
小于等于 <=
in [153]: 6<=6out[153]: truein [154]: 6<=7out[154]: true
逻辑运算布尔'与' and (有假为假,全真为真)
in [156]: true and falseout[156]: falsein [157]: true and trueout[157]: truein [158]: false and falseout[158]: false
布尔'或' or (有真为真,全假为假)
in [159]: true or trueout[159]: truein [160]: true or falseout[160]: truein [161]: false and falseout[161]: false
布尔'非' not (取相反)
in [162]: not trueout[162]: falsein [163]: not falseout[163]: true
身份运算判断两个标识符是否引用自同一个对象 is
in [167]: a=b=3in [168]: a is bout[168]: truein [169]: a=3in [170]: b=5in [171]: a is bout[171]: false
判断两个标识符是否引用自不同对象 is not
in [177]: a=3in [178]: b=5in [179]: a is not bout[179]: true
== 与 is 的区别:
看到这里,很多小伙伴已经晕了,== 和 is 好像一样啊,看起来一样,其实是不一样的,来看下面的这段代码:
in [180]: a = 600in [181]: b = 600in [182]: a == bout[182]: truein [183]: a is bout[183]: false
其实啊,== 比较的是值,is比较的地址,让我们用 id() 这个函数查看一下变量的地址:
in [184]: id(a)out[184]: 2155434581648in [185]: id(b)out[185]: 2155434581904
可以看到,a和b俩个变量的值虽然相同,但地址却不一样,所以使用 == 和 is 的结果自然就不一样。那我们再来看一段代码:
in [187]: a = 10in [188]: b = 10in [189]: a == bout[189]: truein [190]: a is bout[190]: truein [191]: id(a)out[191]: 1529742064in [192]: id(b)out[192]: 1529742064
萌新是不是莫不着头脑了,用600的时候 is 输出false,用10的时候怎么地址一样了啊,(快回头,有鬼~)其实啊,python有一个叫做小整数对象池的东西,只要是[-5, 256]之间的整数都会使用同一份地址,这下萌新明白了哇。
位运算重点说明:位运算针对的是二进制数
按位与 &
in [193]: a = 15 # 15 = 0000 1111in [194]: b = 30 # 30 = 0001 1110in [195]: c = a&b # 14 = 0000 1110in [196]: cout[196]: 14
按位或 |
in [193]: a = 15 # 15 = 0000 1111in [194]: b = 30 # 30 = 0001 1110in [197]: c = a|b # 31 = 0001 1111in [198]: cout[198]: 31
按位异或 ^
in [193]: a = 15 # 15 = 0000 1111in [194]: b = 30 # 30 = 0001 1110in [200]: c = a^b # 17 = 0001 0001in [201]: cout[201]: 17
按位取反 ~
in [210]: a = 60 # 60 = 0011 1100in [211]: c = ~a # -61 = 1100 0011in [212]: cout[212]: -61
左移 <<
in [213]: a = 15 # 15 = 0000 1111in [214]: c = a<<2 # 60 = 0011 1100in [215]: cout[215]: 60#左移后面要加位数
右移 >>
in [213]: a = 15 # 15 = 0000 1111in [218]: c = a>>2 # 3 = 0000 0011 in [219]: cout[219]: 3#右移后面要加位数
python运算符优先级(从高到底依次排列)
** # 指数 (最高优先级)~ + - # 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)* / % // # 乘,除,取模和取整除+ - # 加法减法>> << # 右移,左移运算符& # 位 'and'^ | # 位运算符<= < > >= # 比较运算符<> == != # 等于运算符= %= /= //= -= += *= **= # 赋值运算符is is not # 身份运算符in not in # 成员运算符not and or # 逻辑运算符
以上就是python数据类型及运算符的详细总结(代码示例)的详细内容。
