一、变量
变量,是用来存储数据,
如果我们需要让得到的数据在后面的程序中进行运算,就需要先存储在变量中,在需要使用时再引用事先存储的变量。
它是【可变化的量】,它的概念和代数中定义的变量基本一致。
如:y=2*x,x 就是变量,x 的值不同y的值也就不同。
不同点在计算机中 y 也是个变量,计算机计算出 2*x 的值赋值给了变量y。
x 与 y 为变量的名称,我们通过变量的名称在后续程序中引用变量。
每个变量都有名称(名称使用标识符规范命名),叫变量名。Python 变量名可以是大小写英文、数字和下划线(_)的组合,但不能用数字开头。如:a=1,a_01=2,_a=3 中 a、a_01、_a 都是变量。
注意:Python 中的变量不能以数字开头,但可以使用下划线(_)开头,变量名区分大小写,变量A与a是不同的。
Python 中的变量为动态类型,所以我们定义变量时无需指定变量类型,我们可以给变量任何数据类型的值。
如下:
a=1# 纯字母 a='abc'# 动态类型,变量无固定类型,可以重新赋值任意类型值 a_01='我是变量'# 字母数字下划线混合 _a=True# 以下划线开始 12A='a'# 报错,不能以数字开始定义变量
注意:
定义变量的‘=’与数学中的‘=’意义是不同的,
Python 中的等号左边是变量名字,右边是值,
'=' 表示将右边的值传递给左边,
所以 '=' 是右连接性,值的传递顺序是从右到左。
二、运算符
1、算术运算符
加(+)、减(-)、乘(*)、除(/)、取模(%)、幂(**)、取整(//)
加、减、乘、除和数学运算的一样,不多讲。
取模(%)是返回除法的余数(23%10余3,所以值为3)。
幂(x**y)表示 x 的 y 次幂( 2**3 的值为 8)。
取整(//) 为取商的整数部分,如10//3 值为3, 9.0//2.0 值为 4.0
取整又叫地板除:详细见:“地板除”还是“取整除”?地板除和天花板除floor division和ceil devision
示例:
# 使用Python 自带的 IDLE 逐条练习以下代码 a=23b=10c=0print('a + b=',a+b)# 输出 a + b= 33 print('a - b=',a-b)# 输出 a - b= 13 print('a * b=',a*b)# 输出 a * b= 230 print('a / b=',a/b)# 输出 a / b= 2.3 print('a % b=',a%b)# 输出 a % b= 3 c=a+b/b*a+b# 对变量重新赋值会改变变量的值 print(c)# 输出 56.0 # 修改变量 a 、b 、ca=2b=3c=a**bprint("a ** b =",c)# 输出 a ** b = 8 a=10b=5c=a//bprint("a // b =",c)# 输出 a // b = 2
2、比较运算符
也和数学中的比较运算概念一样。
等于(==)、不等于(!=)、大于(>)小于(<)、大于等于(>=)、小于等于(<=),比较运算符返回的结果为 True 或 False 。
示例:
#使用Python 自带的 IDLE 逐条练习以下代码
a = 23
b = 10
c = 0
print('a == b为', a == b) # 输出 a == b为 False
print('a != b为', a != b) # 输出 a != b为 True
print('a > b为', a > b) # 输出 a > b为 True
print('a < b为', a < b) # 输出 a < b为 False
print('a >= b为', a >= b) # 输出 a >= b为 True
print('a <= b为', a <= b) # 输出 a <= b为 False
3、逻辑运算符
用于连接比较运算符,先计算比较运算符,然后进行逻辑运算。
与(and)、或(or)、非(not),逻辑运算符返回的结果为True或False。
示例:
a=23b=10c=30print('a == b and b>c 为',a==bandb>c)# False print('a > b or c>=b 为',a>borc>=b)# True print('a < b and c>=b 为',a<borc>=b)# True print('a <= b and not a<b为',a>=banda>b)# True print('a > b 为',a>b)# True print('not a > b 为',nota>b)# False print('a <= b and not a<b为',a>=bandnota>b)# False
4、成员运算符
判断元素是否为序列中的成员,用于确认元素是否在序列中。
in:
在指定的序列中找到值返回 True,
否则返回 False。
如:x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in:
在指定的序列中没有找到值返回 True,
否则返回 False,
与 in 是相反的。
示例:
a='a'b=2list=[1,2,3,4,5,'b','a']# 定义列表,列表使用数据结构类型 print(ainlist)# True print(anotinlist)# False print(binlist)# True print(bnotinlist)# False print(9inlist)# False print(9notinlist)# True print('c'inlist)# False print('c'notinlist)# True print('c'in'abc')# True 字符串也可以当成列表
5、身份运算符
用于比较两个对象的存储单元。
is:
判断两个标识符是否引用自同一个对象,
x is y 如果引用的是同一个对象则返回 True,
否则返回 False。
is not:
判断两个标识符是否引用自不同个对象,
与is相反。
注意:id() 函数可以帮助我们获取变量存储在内存中的地址。
a=20b=20print(id(a))print(id(b))print(aisb)# True b=12# 改变b的值 print(id(b))print(aisb)# False
输出结果:
1571488816
1571488816
True
1571488560
False
拓展:is 与 == 的区别
Python 一切皆对象,
每个对象都有唯一的身份标识(id),
而且每个对象都有自己的类型(type)和值(value)。
所以 id, type, value 是Python对象的三个基本要素。
常用的赋值(=) 操作,其实是身份标识(id)的传递,片面的理解是内存地址的传递。(因为可变数据类型()和不可变数据类型(int float string))
is 比较的是id,
== 比较的是type 和 value。
当id相同时,
它的type和value肯定相同,
但当type与value相同时,
id不一定相同。
示例: type 与 value相同,id 不同
a=b=[1,2]c=[1,2]print(a==c)# True print(aisb)# True print(aisc)# False #
说明:
第一行,a 与 b 赋值时被指向了同一个id
第二行,c 再次创建一个列表,它的id也是新创建。
原因可能是可变数据类型和不可变数据类型。可查看:
Python基础入门:列表、元组、字符串、字典、集合、序列-阿里云天池 --4字典部分
version<3.5 , Python为了提高速度使用了小整数[-5, 257)和新创建的字符串加入了通用对象池(类似缓存),即启动编译器时[-5, 257)已经再内存中。
version>=3.5, 将数值加入了通用对象池,当你创建字符串和数值时,他们都会加入通用对象池。
x=100y=100# [-5, 257)的整数已在内存中定义好,引用时直接将id传递给对应的变量 print(xisy)# True i=257j=257print(iisj)# version<3.5 False, version>=3.5 True # 说明: Python 3.5 及以后的版本对此进行了优化 #3.5 及以后版本数值与字符串都加入了对象池 s='abc'r='abc'print(sisr)# True # 拓展:可用于判定变量的类型 print(type(x)isint)# True print(type(s)isstr)# True
注意:运算符的优先级,算术运算符优先,然后身份运算符,再成员运算符,最后逻辑运算符。
总结:
2018年1月19日,第一次修改,个别错别字与语法问题,代码加上注释。
2019年2月25日,第二次修改,增加思维导图
2019年7月7日,第三次修改,修改身份运算符,增加is 与 == 的区别,修改思维导图