你刚入职一家快递公司当仓库管理员……

第一天上班,主管把你带到仓库面前,指着里面堆积如山的包裹说:”这就是你以后的工作范围了。每个包裹上都贴着标签——寄件人、收件人、重量、地址。你的任务就是管理好这些包裹,确保它们准确无误地发出去。”

你看了看,包裹有大有小,有轻有重,有些是文件,有些是水果,有些是电子产品。

主管接着说:”你需要做好三件事:分类、查找、处理。

在Python的世界里,你也是仓库管理员。只不过你管理的不是快递包裹,而是数据

而管理数据的第一步,就是学会使用变量

变量:贴了标签的盒子

什么是变量?

想象你的仓库里有一排排的盒子,每个盒子上贴着一个标签。标签上写着”张三的包裹”或者”10号货架”,你通过标签找到对应的盒子,打开一看,里面装的是你存进去的任何东西。

Python里的变量就是这个”标签”。你在代码里写:

1
2
3
name = "张三"
weight = 2.5
is_fragile = True

这三行代码做了什么?

  • 拿了三个盒子
  • 第一个盒子上贴了标签 name,里面放了字符串”张三”
  • 第二个盒子上贴了标签 weight,里面放了数字 2.5
  • 第三个盒子上贴了标签 is_fragile,里面放了一个”是/否”的判断

等号 = 的意思是”把右边的值放进左边标签对应的盒子里”,不是数学里的”等于”。

1
2
3
weight = 2.5
weight = 3.0
print(weight)

输出:3.0

注意到了吗?weight 这个标签的值从 2.5 变成了 3.0。标签没换,但盒子里的东西换了——这就是”变量”(variable)的”变”。

数字类型:整数和小数

Python里处理数字,主要有两种类型:

整数(int)——精确的,不撒谎的

1
2
3
age = 25
count = -3
population = 1400000000

整数就是完整的数,没有小数点。Python里的整数可以任意大,不会溢出(不像某些语言,整数超过某个范围就出错)。这意味着你甚至可以这样:

1
2
big_number = 2 ** 100
print(big_number)

输出会是一个31位的数字。Python完全不慌。

小数(float)——近似的,有时候会”撒谎”

1
2
3
price = 19.99
temperature = -3.6
pi = 3.14159

float(浮点数)用来表示带小数点的数字。但这里有个坑,你必须知道:

1
print(0.1 + 0.2)

你以为是 0.3,对吧?

但实际输出是:0.30000000000000004

多出来的那个 4 不是Python出bug了,这是所有电脑处理小数时的通病。原因很简单:电脑用二进制表示数字,而很多十进制小数无法用二进制精确表示——就像你不能用十进制精确表示三分之一(0.33333…永远写不完)。

日常生活中,0.1 + 0.2 = 0.3 毫无疑问。但在计算机的底层世界里,这是一个”近似值”。大多数情况下这不会影响你的工作,但你要知道这个现象存在,免得以后排查bug排查到怀疑人生。

字符串:文字的容器

1
2
3
4
name = "张三"
address = '北京市朝阳区建国路88号'
message = """这是一段
跨行的文字"""

字符串就是用引号包起来的文字。你可以用双引号 ""、单引号 ''、或者三个引号 """(用于多行文字)。

注意:Python里的字符串是不可变的。 什么意思?你不能修改字符串里的某个字符。你只能创建一个新的字符串。

1
2
name = "张三"
name = "李四" # 这不是修改,是让标签name指向了一个新的字符串

这就像你给盒子换标签——标签没变,但指向的盒子变了。

布尔值:世界上只有两种状态

1
2
3
is_raining = True
is_holiday = False
is_student = True

布尔值只有两个:True(真)和 False(假)。

不要小看它。布尔值是程序做判断的基础。以后写AI程序的时候,你会大量用到这种”是/否”的判断——比如”这个图片里有没有猫?””这个邮件是不是垃圾邮件?””用户是不是点击了广告?”

本质上,所有AI模型做的事情都可以归结为:输入一堆数据,输出一个True或False的判断。 当然实际比这复杂得多,但底层逻辑是这个。

类型转换:让数据”变身”

有时候你需要把一个类型转成另一个类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 字符串转数字
age_str = "25"
age_int = int(age_str)
print(age_int + 5) # 输出30

# 数字转字符串
price = 99
price_str = str(price)
print("这件商品的价格是" + price_str + "元") # 输出:这件商品的价格是99元

# 数字转布尔值
print(bool(0)) # False —— 0代表"没有",也就是"假"
print(bool(1)) # True —— 非零数字代表"有",也就是"真"
print(bool(42)) # True

注意,不是所有转换都能成功:

1
int("abc")  # 会报错!你不能把字母转成数字

这就像你不可能把一个苹果变成一斤大米——类型不对,强行转换只会报错。

运算符:不只是加减乘除

你肯定知道 + - * /,但Python还有两个很有用的运算符:

整除(//)——只取商,不要余数

1
2
print(10 // 3)   # 输出3
print(7 // 2) # 输出3

应用场景:你有17个苹果,要平均分给5个人,每人能分几个?17 // 5 = 3

取余(%)——只要余数

1
2
print(10 % 3)    # 输出1
print(7 % 2) # 输出1

应用场景:判断一个数是奇数还是偶数——n % 2 == 0 就是偶数,n % 2 == 1 就是奇数。

整除和取余配合使用,可以解决很多实际问题:

1
2
3
4
5
6
total = 17
people = 5
each = total // people # 每人3个
remaining = total % people # 还剩2个
print(f"{people}个人,每人{each}个,还剩{remaining}个")
# 输出:5个人,每人3个,还剩2个

幂运算(**)

1
2
print(2 ** 3)   # 8,即2的3次方
print(3 ** 2) # 9

字符串常用操作

字符串不只是存文字,还能对它做各种操作:

拼接——把两段文字粘在一起

1
2
3
4
first_name = "张"
last_name = "三"
full_name = first_name + last_name
print(full_name) # 输出:张三

切片——像切蛋糕一样取你想要的部分

1
2
3
4
5
text = "Hello, World!"
print(text[0]) # H —— 第一个字符,从0开始数
print(text[7:12]) # World —— 从第7个取到第11个(不含第12个)
print(text[-1]) # ! —— 最后一个字符,负数从后往前数
print(text[:5]) # Hello —— 从开头取到第4个

记住一个关键规则:Python的计数从0开始,而且”左闭右开”——[7:12] 包含7但不包含12。这个规则刚开始会不习惯,用多了就自然了。

格式化输出——优雅地插入变量

1
2
3
4
5
6
7
8
9
name = "张三"
age = 25
score = 95.5

# 方法1:f-string(推荐,Python 3.6+)
print(f"我叫{name},今年{age}岁,考了{score}分")

# 方法2:format方法
print("我叫{},今年{}岁,考了{}分".format(name, age, score))

f-string是目前最推荐的方式,直接在字符串里用花括号 {} 插入变量,直观又好读。

列表初探:可以装很多东西的书架

最后,认识一下列表(list):

1
2
3
fruits = ["苹果", "香蕉", "橘子", "西瓜"]
scores = [90, 85, 92, 78, 95]
mixed = [1, "hello", 3.14, True] # 列表里可以放不同类型的东西

列表就像一个书架,上面可以放很多东西,而且你能随时添加或拿走:

1
2
3
4
5
6
7
8
9
fruits = ["苹果", "香蕉", "橘子"]
fruits.append("西瓜") # 添加一个
print(fruits) # ['苹果', '香蕉', '橘子', '西瓜']

fruits.remove("香蕉") # 移除一个
print(fruits) # ['苹果', '橘子', '西瓜']

print(fruits[0]) # '苹果' —— 取第一个
print(len(fruits)) # 2 —— 看看现在有几个

列表在AI开发中会大量出现。你想想看:一张图片可以被表示为一个数字列表,一段文本可以被表示为一个单词列表,一批训练数据可以被表示为一个个样本组成的列表……列表是Python里最基础也最重要的数据结构之一。

小测验:动动手

学编程最忌讳”光看不练”。打开你的Jupyter Notebook,试试完成以下任务:

  1. 创建一个变量,存储你的名字和年龄,用f-string打印”我叫xxx,今年xx岁”
  2. 把字符串 "Hello, Python!" 切片,只取出 "Python"
  3. 计算 100 / 3100 // 3,感受它们的区别
  4. 创建一个列表,包含你最喜欢的三种水果,然后添加一种,最后打印列表长度

如果你都能做到,恭喜——你已经掌握了Python最核心的基础构件。下一篇文章,我们要升级装备了:认识 NumPy——AI工程师的第一件武器。

到那时候,你处理数据的效率会提升好几个数量级。


上一篇
下一篇