python基础-输入函数与运算符及其优先级

Python的input()函数获取字符串输入,需通过int()或float()转换类型。运算符包括算术、赋值、比较、布尔和位运算;and/or支持短路求值,&/|不短路;==比较值,is比较内存地址;运算符优先级依次为算术、位、比较、布尔、赋值。

Posted by Hilda on June 25, 2025

1.Python的输入函数input()

image-20250625114441107

image-20250625114508248

如果需要整数型和浮点型,就需要将str类型通过int()函数或者float()函数进行类型转换

image-20250625114538491

1
2
3
4
5
name = input("请输入姓名:")
age = int(input("请输入年龄:"))
weight = float(input("请输入体重:"))

print(type(name), name, type(age), age, type(weight), weight)

image-20250625114838635

再比如录入2个数,输出求和的结果:

1
2
3
4
5
6
def sum_int(m, n):
    return m + n
a = int(input("请录入第一个整数:"))
b = int(input("请录入第二个整数:"))

print("两数求和的结果是:", sum_int(a, b))

2.Python中的运算符

image-20250625115442631

(1)算术运算符

image-20250625115515976

image-20250625115530141

(2)赋值运算符

image-20250625115620174

注意:链式赋值,是不同的引用, 指向相同的内容。

1
2
3
4
a = b = c = 2;
print(a, id(a))
print(b, id(b))
print(c, id(c))

image-20250625120918419

id() 函数验证了变量引用的是同一个对象。之前已经说过,变量是对象的引用(或标签),而不是存储数据的容器。而上面的2 是一个单一的、共享的整数对象。链式赋值让多个变量指向同一对象。a、b、c 是不同的变量名(引用),但它们指向内存中相同的整数对象 2。Python的整数缓存和不可变对象特性确保小整数对象在内存中是共享的。


系列解包的功能,非常强大。可以轻松完成交换2个数的操作m, n = n, m

1
2
3
4
m, n = 10, 20
print("交换之前", m, " ", n)  # 交换之前 10   20
m, n = n, m
print("交换之后", m, " ", n)  # 交换之后 20   10

这在其他语言中,是很难做到这么方便的。

(3)比较运算符

对变量或表达式的结果进行大小、真假等比较

image-20250625115645863

特别注意:==比较的是值,而不是内存地址;而is/is not 比较的是对象的id(内存地址),

1
2
3
4
5
6
7
8
9
10
11
a = 2
b = 2
print(a == b) # 比较值, True
print(a is b) # 整数缓存,所以也是True

c = [1, 2, 3]
d = [1, 2, 3]
print(c == d)  # 比较值,True
print(c is d)  # 比较内存地址,False
print(id(c))  # 140430038281408
print(id(d))  # 140430038327168

Python 对小整数(-5 到 256)和某些短字符串(如纯 ASCII 字符串)进行缓存,因此 a = 256; b = 256; a is b 返回 True,但对于大整数(如 1000),可能返回 False(取决于 Python 实现)。在某些情况下,Python 解释器(特别是 CPython)会在同一作用域或同一代码块中优化整数对象的创建。如果两个大整数(如 1000 或 1000000000)在同一代码块中以字面量形式定义,Python 可能重用相同的整数对象,而不是为每个变量创建新对象。

(4)布尔运算符

image-20250625115708220

注意:and是短路与,即在确定结果的最早可能点停止计算后续部分,以提高效率。or也是短路或,如果第一个操作数为 真(True),Python 不会计算第二个操作数,因为整个表达式的结果已经确定为 True。

image-20250625115720330

(5)位运算符

将数据转成二进制进行计算

image-20250625115754192

注意:& | 是位运算符,不是逻辑运算符。

这些是位运算符,而不是逻辑运算符,因此它们不具备短路求值的特性。and 和 or 是逻辑运算符,它们支持短路求值。

注意:Python 的左移(«)和右移(»)运算符不区分有符号或无符号,因为 Python 的整数(int)类型是无大小限制的动态整数,不像 C 或 Java 那样有固定位数的有符号/无符号整数类型。右移负数时,Python 保持符号位(补 1),这与算术右移一致,但不意味着 Python 的整数是有符号类型,而是为了符合数学逻辑。

3.运算符的优先级

image-20250625123948997

先算算术运算符,再算位运算,再算比较运算符,然后进行布尔运算,最后赋值运算。

image-20250625124147019