python基础:数据类型转换、运算符(算术运算符、比较运算符、逻辑运算符、三元运算符、位运算符)
目录
一、类型转换
隐式类型转换/自动转换:
显示类型转换/强制转换:
二、运算符
算数运算符:+ - * /
比较运算符
逻辑/布尔运算符
赋值运算符:=
三元运算符
位运算符 [二进制]
运算符优先级
一、类型转换
python变量的类型不是固定,会根据变量当前值在运行时决定,可以通过内置函数type(变量)来查看其他类型,这种方式就是隐式转换,有的也称为自动转换
隐式类型转换/自动转换:
- 变量根据使用的上下文(即当前值)在运行时决定其类型
- 运算时数据类型会向高精度转换
显示类型转换/强制转换:
- 将数据类型作为函数名;
- float转换成int时会直接去掉小数点部分;
- str转成int时,要求字符串中本身是整数;str转成float,字符串中可以是整数;
- 强制转换后不会影响原变量和数据/值得类型。
# python类型根据该变量使用的上下文在运行时决定
var = 10
print(type(var))
var = 1.1
print(type(var))# 隐式类型转换 / 自动转换:
# 变量根据使用的上下文(即当前值)在运行时决定其类型
# 运算时数据类型会向高精度转换,float精度高于int
var1 = 10
var2 = var + var1 # 11.1
print(type(var2), type(var1 + 1.1)) # float# 显示类型转换 / 强制转换:
# 将数据类型作为函数名;
# float转换成int时会直接去掉小数点部分;
# str转成int时,使用int(x),要求字符串中本身是整数;str转成float,使用float(x),字符串中可以是整数;
# 强制转换后不会影响原变量和数据 / 值得类型。
# 不管什么值的int float都可以转成str,str(x)将对象x转换成字符串
i = 10
j = float(i) # 10.0
k = str(i)
print(type(i)) # int
print(type(j)) # float
print(type(k)) # str
i = j + 1 # 11.0
print(type(i)) # float
print(type(j)) # float
print(i) # 11.0
print(int(i)) # 11
print(type(i)) # float
n3 = "12.2"
print(float(n3))
print(int(n3)) # 字符串本身是整数才能转换
二、运算符
运算符:表示数据的运算、赋值和比较等
算数运算符:+ - * /
- %除法取模(取余),7%5 = 2
- // 除法取商的整数部分(向下取整) 9//2 = 4
- ** 返回x的y次幂 2**4 = 16
比较运算符
== != < > <= >=
is/is not 判断两个变量引用对象是否为同一个/不同
逻辑/布尔运算符
and or(布尔或是短路运算符,按序false才会判断下一个条件) not
赋值运算符:=
+=/-=/*=//=/%=/**=///= 复合加减乘除/取模/幂/取整除赋值运算符 c += a 等效于 c = c + a
三元运算符
用if else实现 ? : 功能 max = a if a > b else b
位运算符 [二进制]
# 算数运算符的使用
# / // % **# / 除号,返回小数
print(10 / 3)# 取整除 // ,返回商的整数部分(向下取值)
print(10 // 3) # 3
print(-9 // 2) # -5# 取模 对应的公式 a%b = a -a // b * b
print(10 % 3) # 1
print(-10 % 3) # 不是-1 而是-10 - (-10)// 3 * 3 = -10 - (-4)*3 = 2# 幂 **
print(3**3)print("---------")
# 比较运算符 > >= < <= == !=
# is:两个变量的引用对象是否是同一个(比较的是空间是否相同) is not(空间是否不同)
a = 9
b = 8
flag = a > b
print("flag = ",flag)
print(a is b)
print(a is not b)print("---------")
# 逻辑/布尔运算符
# and x and y 布尔“与”:如果x是f,返回x的值,否则返回y的值。 and是短路运算符,只有第一个是true才会验证第二个
# or x or y 布尔“或”:如果x是t,返回x的值,否则返回y的值。 or是短路运算符,只有第一个是false才会验证第二个
# not not x 布尔“非”:如果x是f,返回t
a = 10
b = 20
print(a and b) #因为a是true,所以返回20
print((a > b) and b) # f
print((a < b) and b) # 20print(a or b) # 10
print((a > b) or b) # 20
print((a < b) or b) # tprint(not (a or b)) # f# 赋值运算符
# += -= *= /= %= **= //= 复合加减乘除/取模/幂/取整除赋值运算符 c += a 等效于 c = c + a
# 在python支持一个简单的方式实现变量交换
# x , y = y , x
print(f"没有交换前 a={a}, b={b}")
# 方式一
a, b = b, a
# 方式二
a = a + b
b = a - b
a = a - b
print(f"交换后 a={a}, b={b}")print('--------')
# 三元运算符 a if a>b else b
max = a if a > b else b
print(f"max = {max}")print("-----")
# 位运算
# 计算机运算的时候都是按照补码的方式计算的,当我们看运算结果,是看原码# ~ 按位取反 即把1变成0 0变成1
# -2原码 1000 0010 =》反码 1111 1101 =》补码 1111 1110 =》~-2补码0000 0001 =》原码 0000 0001 =》1
print(~-2) # 1
print(~2) #-3# & 按位与 即运算的两个数的相应位都是1,则为1,否则为0
# 2的补码 0000 0010
# 3的补码 0000 0011
# 2&3 0000 0010(补码)=》原码 0000 0010 =》2
# 2^3 0000 0001 原码 0000 0001 =》1
# 2|3 0000 0011 =》3
print(2 & 3)# ^ 按位异或 即两个对应的二进制为相异时,结果为1
print(2 ^ 3)# | 按位或 只有对应的两个二进制有一个为1 结果就是1
print(2 | 3)# << 左移 运算符的各二进制全部左移若干位,由”<<“ 右边的数指定移动的位数,符号位不变,高位丢弃,低位补0
# 相当于左移一位,*2,左移两位,*2*2
# 5<<1
# 5的补码 0000 0101
# 5<<1 0000 1010(0 + 000101 +0补码) => 0001010原 =》10
print(5 << 1)
print(-5 << 1)# >> 右移 把 >> 左边的运算数右移,低位溢出,符号位不变,用符号位补溢出的高位
# 相当于整除2,向下取整
print(5 >> 1)
print(-5 >> 1)