hello,大家好。
又见面啦,我是星禾。
在过去的5年时间里,我的身份从大厂程序员→全职宝妈→米核AI合伙人,个人的生活经历也可以称之为丰富吧。我目前all in米核AI,专注于分享一些AI前沿的知识和见解。大家如果有什么想法或者想入局AI赛道,可以通过cuizh002找到我。我会给大家提供一些基础的AI资料作为见面礼。当然大家有什么想法,我们也可以一起交流。
这个关于一些AI和编程基础知识的分享我准备作为以后公众号的一个固定栏目每天发表。其实没有什么特别的目的,就是希望帮助到那些正在学习AI或者编程的朋友。虽然现在的AI技术日新月异,但我相信,万变不离其宗。多掌握一些基础,对于我们不论是掌握AI工具还是想入局AI赛道,总是会多一些便利的。
好了,话不多说,进入今天的正题。
Python里的运算符,一文给你讲明白!
上篇文章我们聊了变量和数据类型,感觉怎么样?是不是有点懵?没关系,今天我们来聊点更"刺激"的——运算符。
说实话,运算符这玩意儿听起来挺无聊的,不就是加减乘除吗?但你别小看它,这可是编程的"基本功"。学不好这个,后面的代码你根本写不动。
▶先搞懂两个概念
在说运算符之前,咱得先搞清楚两个词儿:
就这么简单,别想复杂了。
▶算术运算符——数学课学过的那些
算术运算符就是咱们数学课上学的那套,Python当然支持,而且还有几个特殊符号。
来,看个代码:
# 基础运算print(10 + 5) # 15print(10 - 5) # 5print(10 * 5) # 50print(10 / 5) # 2.0(注意!除法永远返回小数)# 整除和取余print(10 // 3) # 3,向下取整,不是四舍五入!print(10 % 3) # 1,取余数# 幂运算(就是次方)print(2 ** 3) # 8,2的3次方
有几个坑你得注意
坑1:除法永远返回小数
print(10 / 5) # 2.0,不是2!
我第一次看到的时候也懵了,心想这俩明明能整除,咋还给我整个小数出来?但Python就是这么规定的,记住就行。
坑2:整除是向下取整,不是四舍五入
print(10 // 3) # 3,不是4print(-10 // 3) # -4!负数的时候特别注意
坑3:幂运算的优先级问题
print(-3 ** 2) # -9,不是9!# 因为**的优先级比-高,等价于 -(3**2)print((-3) ** 2) # 9,这才是对的
▶比较运算符——就是判断大小
比较运算符用来比大小,返回的是 True 或 False(布尔值,上篇文章讲过)。
age = 18print(age == 18) # True,相等print(age != 18) # False,不等于print(age > 18) # False,不大于print(age >= 18) # True,大于等于print(age < 18) # False,不小于print(age <= 18) # True,小于等于
区分 == 和 = !
这是个经典坑,= 是赋值,== 是比较!
# 错误写法if x = 5: # 报语法错误! print("x是5")# 正确写法if x == 5: # 这才是比较 print("x是5")
这是新手非常容易犯的一个错误,一定要注意!😅
Python特色:链式比较
Python有个很酷的功能,可以这样写:
x = 15print(10 <= x <= 20) # True,等价于 (10 <= x) and (x <= 20)
这在数学里很常见,但在编程里很多语言不支持,Python直接支持,写起来真的很便利。
▶逻辑运算符——组合条件
逻辑运算符用来组合多个条件,也是返回 True 或 False。
# and:两边都得是Trueprint(True and True) # Trueprint(True and False) # Falseprint(False and False) # False# or:任一边是True就行print(True or False) # Trueprint(False or False) # False# not:取反print(not True) # Falseprint(not False) # True
实战举例
age = 20has_id = True# and:既要成年又要带身份证if age >= 18 and has_id: print("允许进入")# or:学生或者老人打折is_student = Trueis_senior = Falseif is_student or is_senior: print("享受折扣")# not:不是未成年人if not age < 18: print("不是未成年人")
短路特性(高级技巧)
def check(): print("函数被调用了") return True# 这里会打印"函数被调用了"result = True and check()# 这里不会打印!因为and遇到False就短路了result = False and check()
这个特性很重要,有时候能帮你省代码,有时候不注意也会踩坑。
▶赋值运算符——偷懒神器
赋值运算符用来给变量赋值。
x = 10x += 5 # 等价于 x = x + 5,现在x是15x -= 3 # 等价于 x = x - 3,现在x是12x *= 2 # 等价于 x = x * 2,现在x是24x /= 4 # 等价于 x = x / 4,现在x是6.0
这东西就是让你偷懒的,x += 5 写起来比 x = x + 5 短,但效果一样。
▶成员运算符——检查"在不在"
成员运算符用来检查某个值在不在一个序列里。
| | |
|---|
| | |
| | 'z' not in 'apple' → True |
fruits = ['苹果', '香蕉', '橙子']print('苹果' in fruits) # Trueprint('葡萄' in fruits) # Falseprint('葡萄' not in fruits) # True# 字符串也能用text = "Hello World"print('Hello' in text) # Trueprint('hello' in text) # False,注意大小写
这个在写代码的时候特别常用,比如检查用户输入是否有效、列表里有没有某个元素之类的。
▶身份运算符——"是不是同一个"
身份运算符用来检查两个对象是不是同一个东西(内存地址相同)。
这个和 == 的区别很多人搞不清楚:
a = [1, 2, 3]b = [1, 2, 3]c = aprint(a == b) # True,值相等print(a is b) # False,不是同一个对象print(a == c) # True,值相等print(a is c) # True,是同一个对象
简单说: - == 问的是"值相等吗" - is 问的是"是同一个人吗"
name1 = "张三"name2 = "张三"print(name1 == name2) # Trueprint(name1 is name2) # 取决于Python实现,不一定
▶位运算符(扩展知识)
位运算符直接操作二进制位,这个平时写业务代码用得不多,但懂了对理解计算机很有帮助。
# 二进制了解一下:# 5 的二进制是 101# 3 的二进制是 011print(5 & 3) # 1,二进制 101 & 011 = 001print(5 | 3) # 7,二进制 101 | 011 = 111print(5 ^ 3) # 6,二进制 101 ^ 011 = 110print(~5) # -6print(5 << 1) # 10,左移一位,相当于乘2print(5 >> 1) # 2,右移一位,相当于除2
▶运算符优先级——谁先谁后
当一个表达式里有多个运算符时,Python按这个顺序来:
# 先算乘除,后算加减print(2 + 3 * 4) # 14,不是20# 括号优先print((2 + 3) * 4) # 20# 复杂例子result = 10 + 20 // 4 - 3 * 2 ** 2# 计算顺序:2 ** 2 = 4 → 3 * 4 = 12 → 20 // 4 = 5 → 10 + 5 - 12 = 3print(result) # 3
建议
遇到复杂的表达式,直接加括号!别记那些优先级规则,加了括号代码更清晰,也不容易出错。
# 简单明了if (age >= 18) and (has_id == True): print("可以进入")
▶实用小技巧
1. 字符串重复
# 画个分隔线print("=" * 50) # 输出50个等号# 快速创建重复字符串print("ha" * 3) # hahaha
2. 字符串拼接要注意类型
name = "张三"age = 18# 错误!info = name + "的年龄是" + age + "岁" # TypeError!# 正确info = name + "的年龄是" + str(age) + "岁"# 或者用f-string(更推荐)info = f"{name}的年龄是{age}岁"
3. 浮点数的坑
# 这个很多人都遇到过print(0.1 + 0.2) # 0.30000000000000004,不是0.3!# 所以判断浮点数相等要这样result = 0.1 + 0.2print(abs(result - 0.3) < 0.0001) # True,近似相等
这个是计算机表示小数的精度问题,不是Python的bug,所有编程语言都有这问题。
▶总结
今天聊了Python里的各种运算符:
- ●算术运算符
- ●比较运算符:
== != > < >= <=,返回True或False - ●逻辑运算符
- ●赋值运算符
- ●成员运算符
- ●身份运算符
- ●位运算符
最重要的记住:
1.== 是比较,= 是赋值,别搞混
2. 复杂表达式加括号,清晰又安全
3. 除法 / 永远返回浮点数
好了,今天的学习内容就到这里了。运算符这东西多写代码就熟了,没啥捷径。下篇文章咱们聊控制结构,就是if else和循环那些。关于运算符,你掌握了多少?学会了哪些内容?欢迎课代表在评论区总结~
另外如果你也想入局AI赛道或者有什么好的想法,欢迎来找我。