变量简介

  • Python中变量即对象
  • Python的一个变量包括标识符、数据类型、数值3部分。
  • 标识符:变量的名称,如a = 2; a 就是标识符
  • 数据类型:Python的数据类型包括(数值型、字符串型、列表、元组、字典等)可以使用type(var_name)的方式查看变量的数据类型
  • 数值:a = 2 中的 2 即为数值(数值不一定是数
  • Python变量在定义时,必须赋值。
  • 在定义变量的时候,不能直接指明某个变量的数据类型(Python语法可以看出)
  • 在定义时,内存要根据定义变量的数据类型来开辟相应的空间,所以既然不能通过显式的指明数据类型,那么就必须通过隐式的方式指明变量的数据类型。
  • 所以在定义时必须同时赋值,然后根据所赋的数值来判断变量的数据类型。

变量运算

  • 算数运算(要注意的几个点)
  • “/” 和 “//” 的区别:“/”两数相除所得结果为浮点数(数据类型为float),“//”两数相除所得结果为整数(数据类型为int)。
  • 举例: a = 4, b = 2, f = a/b, d = a//b; print (type(f) , type(d))
    输出结果为:<class ‘float’> <class ‘int’>
  • int(x,[base]):将x的数据类型转化为int;
  • x为需要转化的变量,默认情况下(base不指定值时,此时base的值为10(以十进制转化)),x的值可以为字符串、其他数字;当base被赋予自他值时,x只能为字符串
  • is和==
  • a is b;要求变量a和变量b的值要相同,存储地址也要相同(id(a),id(b)相同)。
  • a == b;只要求变量a和变量b的值相同。
  • 两者的返回值都是只有True和False两种结果
  • 赋值:=
  • 注意点:x = 2(假设此时x的存储地址为a), y = 4(假设此时y的存储地址为b), x = y(此时不仅x和y的值都是4,而且它们的地址都是变量y原来的地址b,你没与看错,两个变量的存储地址都变成了b
  • 连续比较a<b<c等价于a<b and b<c;
  • 逻辑运算
  • a,b为逻辑变量(True ,False)
  • and,&:a and b,a&b ;只有在a和b两个均为 True 时结果才为True,而且只有在a为True的前提下,才会去检查b是否为True,也就是说,如果a为False,则结果直接为False。
  • or, | : a or b ,a | b;只有在a和b两个均为False时结果才为False,而且只有在a为False的前提下,才会去检查b是否为False,也就是说,如果a为True,则结果直接为True。
  • not !:!a,not a a为False,结果为True,取反。
  • a,b为数值
  • &: 位运算,例如a=1(0001二进制) b=2(0010二进制),则a&b的运算是这样的,两个的二进制数值的对应位置做与运算(与运算,只有两个均为1时才为1),此处结果为0(0000二进制)
  • |:位运算,同上a,b; a|b运算,对应位置做或运算,此处结果为3(0011二进制)
  • and:a and b,如果a和b中至少存在一个0,则返回0,如果两个变量都不是零,则返回最后一个变量的值;例如2 and 3#结果为3;2 and 0#结果为0
  • or: a or b, 如果a和b全为0,则结果为0,如果至少有一个变量不为0,则返回第一个不为零的变量的值;比如 0 or 2 or 3#结果为2
  • 移位运算
  • << >>左移运算和右移运算;原理:根据二进制数进行移位运算。

缓存机制

Ps:此处参考《Python带我起飞》部分内容

#范围在[-5,256]之间的小整数
#字符串
#之前创建过的就直接存入缓存,不再重新创建,作用于全局
int a, b = 2, 2
print(id(a), id(b))
#结果为 1688043664 1688043664(地址相同)说明在创建变量b时并没有重新开辟新的空间,而是使用了缓存中已经存在的相同值。
a, b = "pw", "pw"
print(id(a), id(b))
#结果为1940211868368 1940211868368(地址相同)
---------------------------------------------------------------------
#大于256的整数
#大于0的浮点数
#之前在该代码块中创建过就存入缓存机制,作用于本代码块
def func1():
	a = 2.0
	b = 2.0
	print(id(a), id(b))
def func2():
	c = 2.0
	print(id(c))
#结果为  1861453943216 1861453943216(相同代码块里的地址相同)
#	1861453943240
----------------------------------------------------------------
#小于-5的小整数
#小于0的浮点数
#不进行缓存,每次都进行重新创建
a, b = -6,-6
print(id(a), id(b))
#结果为2540663302544 2540663302672(地址不相同)