目录
链式赋值_系统解包赋值_常量
链式赋值
链式赋值用于同一个对象赋值给多个变量。
>>>x=y=123 #相当于x=123;y=123;
系统解包赋值
系列数据赋值给对应相同个数的变量(个数必须保持一致)
>>>a,b,c=4,5,6 #相当于a=4,b=5,c=6
【操作】使用系列解包赋值实现变量变换
>>>a,b=1,2
>>>a,b=b,a
>>>print(a,b)
2 1
常量
Python不支持常量,即没有语法规则限制改变一个常量的值。我们只能约定常量的命名规则,以及在程序的逻辑上不对常量的值做出修改。
>>>MAX_SPEED=120
>>>print(MAX_SPEED)
120
>>>MAX_SPEED=140 #实际上是可以修改的。只是逻辑上不能做修改
>>>print(MAX_SPEED)
140
内置数据类型_基本算术运算符
最基本内置数据类型介绍
每个对象都有数据类型,python中最基本的内置数据类型:
- 整型
整数:2345 13 50 - 浮点型
小数:3.14或者科学计数法314e-2 - 布尔型
表示真假:仅包含:True False - 字符型
由字符组成的序列:’abc’ ‘sxt’ ‘安安’
数字
Python支持整数(如:50,520)和浮点数(如:3.14,10.0,1.23e2),我们可以对数字做如下运算。
运算符 | 说明 | 实例 | 结果 |
---|---|---|---|
+ | 加法 | 3+2 | 5 |
- | 减法 | 30-5 | 25 |
* | 乘法 | 3*6 | 18 |
/ | 浮点数除法 | 8/2 | 4.0 |
// | 整数除法 | 7/2 | 3 |
% | 模(取余) | 7%4 | 3 |
** | 幂 | 2**3 | 8 |
除数为0,会产生异常。
使用divmod()函数同时得到商和余数:
>>>divmod(13,3)
(4,1)
divmod()是一个函数,我们以后会详细介绍。它返回的是一个元组(后续将会学习)。
整数_不同进制_其他类型转换成整数
整数
Python中,除10进制外,还有其他三种进制:
表示 | 进制 | 说明 |
---|---|---|
0b或0B | 二进制 | 0 1 |
0o或0O | 八进制 | 0 1 2 3 4 5 6 7 |
0x或0X | 十六进制 | 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
这三种进制可以非常方便的进行“位运算”。(位运算后续介绍)
【操作】测试不同进制
>>>12
12
>>>0b101
5
>>>0o19
SyntaxError:invalid syntax
>>>0o10
8
>>>0xff
255
>>>0xf
15
(Tips:可以查阅一下二进制、八进制、十六进制的英语单词,帮助记忆)
使用int()实现类型转换:
- 浮点数直接舍去小数部分。如int(9.9)结果为9
- 布尔值True转为1,False转为0。如:int(True)结果为1
- 字符串符合整数格式(浮点数格式不行)则直接转换为对应整数,否则报错。
其中,第三条理解可参考下面实例:
>>>int(‘456’)
456
>>>int(‘456abc’)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '456abc'
自动转型:
整数和浮点数混合运算时,表达式结果自动转型成浮点数。2+8.0结果为10.0(和C语言有点类似)
整数可以有多大?
Python2中,int是32位,可以存储从-2147483648到2147483648的整数。(约±21亿)。Long类型是64位,可以存储:-263—263-1之间的数值。
Python3中,int可以存储任意大小的整数,Long被取消。我们甚至可以存储下面的值:
>>>googol=10**100
>>>googol
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Googol也是Google最初的名字,这也是Google最初的含义。
Python3中可以做超大数的运算,而不会导致“整数溢出”,这也是Python特别适合做科学计算的原因。
浮点数_自动转换_强制转换_增强赋值运算符
浮点数
浮点数,称为float
浮点数用a×b^10形式的科学计数法表示。比如:3.14表示成:314E-2或者314e-2
这些数字在内存中也是按照科学计数法存储。
类型转换和四舍五入
- 类似于int(),我们也可以用float()将其他类型转换为浮点数。
- 整数和浮点数混合运算时,表达式结果自动转换为浮点数。比如2+8.0结果为10.0
- round(value) 可以返回四舍五入的值。
注:但不会改变原有值,而是产生新的值。
增强型赋值运算符
运算符+、-、*、/、//、**、%和赋值运算符=结合可以构成“增强型赋值运算符”。(类似于C语言中复合赋值运算符)
增强赋值运算符
运算符 | 例子 | 等价于 |
---|---|---|
+= | a+=2 | a=a+2 |
-= | a-=2 | a=a-2 |
*= | a*=2 | a=a*2 |
/= | a/=2 | a=a/2 |
//= | a//=2 | a=a//2 |
**= | a**=2 | a=a**2 |
%= | a%=2 | a=a%2 |
(注:+=之间不能加空格)
时间表示_unix时间点_毫秒和微秒_time模块
时间的表示
计算机中时间的表示是从“1970年1月1日00:00:00”开始,以毫秒(1/1000)秒进行计算。我们也把1970年这个时刻称为“unix时间点”
这样,我们就把时间全部用数字来表示了。
Python中可以通过**time.time()**获得当前时刻,返回的值是以秒为单位,带微秒(1/1000毫秒)精度的浮点值。例如:1530167364.8566
(注:但需要先导入time模块,用import time命令)
多点坐标_绘出折线图_计算两点距离
【操作】定义多点坐标_绘出折线_并计算起始点和终点距离
源码:
import turtle #导入turtle模块
import math #导入math模块
#定义多个点的坐标
x1,y1 = 100,100
x2,y2 = 100,-100
x3,y3 = -100,-100
x4,y4 = -100,100
#绘制折线
turtle.penup()
turtle.goto(x1,y1)
turtle.pendown()
turtle.goto(x2,y2)
turtle.goto(x3,y3)
turtle.goto(x4,y4)
#计算起止点和终点距离
distance = math.sqrt((x1-x4)**2 + (y1-y4)**2)
turtle.write(distance)
布尔值_比较运算符_逻辑运算符_短路问题
布尔值
Python2中没有布尔值,直接用数字0表示False,1表示True
Python3中,把True和False定义成了关键字,但他们的本质还是1和0,甚至可以和数字相加。
>>>a=True
>>>b=3
>>>a+b
4
比较运算符
所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。(和C语言有点类似)
以下假设变量a为15,变量b为30:
运算符 | 描述 | 实例 |
---|---|---|
== | 等于-比较对象的值是否相等 | (a==b) 返回False |
!= | 不等于-比较两个对象的值是否不相等 | (a!=b) 返回True |
> | 大于-返回a是否大于b | (a>b) 返回False |
< | 小于-返回a是否小于b | (a<b) 返回True |
>= | 大于等于-返回a是否大于等于b | (a>=b) 返回False |
<= | 小于等于-返回a是否小于等于b | (a<=b) 返回True |
逻辑运算符
运算符 | 格式 | 说明 |
---|---|---|
or 逻辑或 | x or y | x为True,则不计算y,直接返回x。x为false,则返回y |
and 逻辑与 | x and y | x为True,则返回y的值。x为False,则不计算y,直接返回False |
not | not x | x为True,则返回False。x为False,则返回True |
同一运算符
同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址(id)。
运算符 | 描述 |
---|---|
is | is是判断两个标识符是不是引用同一个对象 |
is not | is not是判断两个标识符是不是引用不同对象 |
is与"=="区别:
-
is用于判断两个变量引用对象是否为同一个,即比较对象的地址(id)
-
"=="用于判断引用变量引用对象的值(value)是否相等,默认调用对象的_eq_()方法。
(注:综上,is判断对象的id,==判断对象的value)
整数缓存问题
Python仅仅对比较小的整数对象进行缓存(范围为[-5,256])缓存起来,而并非是所有整数对象。需要注意的是,这仅仅是在命令行中执行,而在Pycharm或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化(范围为[-5,任意正整数])。
总结:
- is比较两个对象的id,是否指向同一个地址。
- ‘’==’'比较两个对象内容是否相等, value(值)是否相等。
- 小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用。
- is运算符比’’==’'效率高,在变量和None比较时,应该使用is