Python编程基础(二):变量、数据类型和基本运算
你刚入职一家快递公司当仓库管理员……
第一天上班,主管把你带到仓库面前,指着里面堆积如山的包裹说:”这就是你以后的工作范围了。每个包裹上都贴着标签——寄件人、收件人、重量、地址。你的任务就是管理好这些包裹,确保它们准确无误地发出去。”
你看了看,包裹有大有小,有轻有重,有些是文件,有些是水果,有些是电子产品。
主管接着说:”你需要做好三件事:分类、查找、处理。“
在Python的世界里,你也是仓库管理员。只不过你管理的不是快递包裹,而是数据。
而管理数据的第一步,就是学会使用变量。
变量:贴了标签的盒子
什么是变量?
想象你的仓库里有一排排的盒子,每个盒子上贴着一个标签。标签上写着”张三的包裹”或者”10号货架”,你通过标签找到对应的盒子,打开一看,里面装的是你存进去的任何东西。
Python里的变量就是这个”标签”。你在代码里写:
1 | name = "张三" |
这三行代码做了什么?
- 拿了三个盒子
- 第一个盒子上贴了标签
name,里面放了字符串”张三” - 第二个盒子上贴了标签
weight,里面放了数字 2.5 - 第三个盒子上贴了标签
is_fragile,里面放了一个”是/否”的判断
等号 = 的意思是”把右边的值放进左边标签对应的盒子里”,不是数学里的”等于”。
1 | weight = 2.5 |
输出:3.0
注意到了吗?weight 这个标签的值从 2.5 变成了 3.0。标签没换,但盒子里的东西换了——这就是”变量”(variable)的”变”。
数字类型:整数和小数
Python里处理数字,主要有两种类型:
整数(int)——精确的,不撒谎的
1 | age = 25 |
整数就是完整的数,没有小数点。Python里的整数可以任意大,不会溢出(不像某些语言,整数超过某个范围就出错)。这意味着你甚至可以这样:
1 | big_number = 2 ** 100 |
输出会是一个31位的数字。Python完全不慌。
小数(float)——近似的,有时候会”撒谎”
1 | price = 19.99 |
float(浮点数)用来表示带小数点的数字。但这里有个坑,你必须知道:
1 | print(0.1 + 0.2) |
你以为是 0.3,对吧?
但实际输出是:0.30000000000000004
多出来的那个 4 不是Python出bug了,这是所有电脑处理小数时的通病。原因很简单:电脑用二进制表示数字,而很多十进制小数无法用二进制精确表示——就像你不能用十进制精确表示三分之一(0.33333…永远写不完)。
日常生活中,0.1 + 0.2 = 0.3 毫无疑问。但在计算机的底层世界里,这是一个”近似值”。大多数情况下这不会影响你的工作,但你要知道这个现象存在,免得以后排查bug排查到怀疑人生。
字符串:文字的容器
1 | name = "张三" |
字符串就是用引号包起来的文字。你可以用双引号 ""、单引号 ''、或者三个引号 """(用于多行文字)。
注意:Python里的字符串是不可变的。 什么意思?你不能修改字符串里的某个字符。你只能创建一个新的字符串。
1 | name = "张三" |
这就像你给盒子换标签——标签没变,但指向的盒子变了。
布尔值:世界上只有两种状态
1 | is_raining = True |
布尔值只有两个:True(真)和 False(假)。
不要小看它。布尔值是程序做判断的基础。以后写AI程序的时候,你会大量用到这种”是/否”的判断——比如”这个图片里有没有猫?””这个邮件是不是垃圾邮件?””用户是不是点击了广告?”
本质上,所有AI模型做的事情都可以归结为:输入一堆数据,输出一个True或False的判断。 当然实际比这复杂得多,但底层逻辑是这个。
类型转换:让数据”变身”
有时候你需要把一个类型转成另一个类型:
1 | # 字符串转数字 |
注意,不是所有转换都能成功:
1 | int("abc") # 会报错!你不能把字母转成数字 |
这就像你不可能把一个苹果变成一斤大米——类型不对,强行转换只会报错。
运算符:不只是加减乘除
你肯定知道 + - * /,但Python还有两个很有用的运算符:
整除(//)——只取商,不要余数
1 | print(10 // 3) # 输出3 |
应用场景:你有17个苹果,要平均分给5个人,每人能分几个?17 // 5 = 3。
取余(%)——只要余数
1 | print(10 % 3) # 输出1 |
应用场景:判断一个数是奇数还是偶数——n % 2 == 0 就是偶数,n % 2 == 1 就是奇数。
整除和取余配合使用,可以解决很多实际问题:
1 | total = 17 |
幂运算(**)
1 | print(2 ** 3) # 8,即2的3次方 |
字符串常用操作
字符串不只是存文字,还能对它做各种操作:
拼接——把两段文字粘在一起
1 | first_name = "张" |
切片——像切蛋糕一样取你想要的部分
1 | text = "Hello, World!" |
记住一个关键规则:Python的计数从0开始,而且”左闭右开”——[7:12] 包含7但不包含12。这个规则刚开始会不习惯,用多了就自然了。
格式化输出——优雅地插入变量
1 | name = "张三" |
f-string是目前最推荐的方式,直接在字符串里用花括号 {} 插入变量,直观又好读。
列表初探:可以装很多东西的书架
最后,认识一下列表(list):
1 | fruits = ["苹果", "香蕉", "橘子", "西瓜"] |
列表就像一个书架,上面可以放很多东西,而且你能随时添加或拿走:
1 | fruits = ["苹果", "香蕉", "橘子"] |
列表在AI开发中会大量出现。你想想看:一张图片可以被表示为一个数字列表,一段文本可以被表示为一个单词列表,一批训练数据可以被表示为一个个样本组成的列表……列表是Python里最基础也最重要的数据结构之一。
小测验:动动手
学编程最忌讳”光看不练”。打开你的Jupyter Notebook,试试完成以下任务:
- 创建一个变量,存储你的名字和年龄,用f-string打印”我叫xxx,今年xx岁”
- 把字符串
"Hello, Python!"切片,只取出"Python" - 计算
100 / 3和100 // 3,感受它们的区别 - 创建一个列表,包含你最喜欢的三种水果,然后添加一种,最后打印列表长度
如果你都能做到,恭喜——你已经掌握了Python最核心的基础构件。下一篇文章,我们要升级装备了:认识 NumPy——AI工程师的第一件武器。
到那时候,你处理数据的效率会提升好几个数量级。
