第4章:变量与数据类型——给数据一个“身份证”

说实话,我见过不少新手写脚本,最头疼的就是变量乱用。明明是个数字,硬要当字符串拼接;明明是个布尔值,却拿来当数字算。嗯,这一章我们就来彻底搞明白这些基础概念。

4.1 变量命名规则——起个好名字很重要

变量就像给数据贴标签。你想想看,如果仓库里所有箱子都不贴标签,找东西得多费劲?

Python的变量命名有几个硬性规则:

  • 只能包含字母、数字和下划线:比如 my_varcount2 都行,但 my-var2count 不行
  • 不能以数字开头1st_place 会报错,first_place 没问题
  • 区分大小写Namename 是两个不同的变量
  • 不能使用Python关键字:比如 ifforwhile 这些都不能当变量名

我个人习惯:变量名要见名知意。比如 user_ageua 好一万倍。你在项目里维护别人的代码时,就会感谢那些好好起名字的人。

💡 推荐使用下划线命名法(snake_case):total_countuser_name。这是Python社区的惯例。

4.2 数字类型——int 和 float

数字是最基础的数据类型。Python里主要分两种:整数(int)和浮点数(float)。

类型 说明 示例
int 整数,没有小数点 42-70
float 浮点数,带小数点 3.14-0.51.0

我在项目中遇到过一个问题:两个浮点数相加,结果却不对。比如 0.1 + 0.2 在Python里等于 0.30000000000000004。为什么会这样?因为计算机用二进制表示小数,有些十进制小数是无限循环的。这不是Python的bug,是所有编程语言都有的问题。

⚠️ 做金融计算时,千万别直接用float!我曾经因为这个被老板骂过。用 decimal 模块或者把金额转成整数(分)来计算。

# 整数运算
a = 10
b = 3
print(a + b)  # 13
print(a / b)  # 3.3333333333333335(注意,结果是float)
print(a // b) # 3(整除)
print(a % b)  # 1(取余)

# 浮点数运算
pi = 3.14159
radius = 5.0
area = pi * radius ** 2
print(area)   # 78.53975

4.3 字符串(str)——文本的载体

字符串说白了就是一段文本。用单引号、双引号或者三引号包起来都行。

name = '张三'
greeting = "你好,世界!"
multi_line = """这是
多行
字符串"""

字符串有几个常用操作,我几乎每天都会用到:

  • 拼接:用 + 号,比如 "Hello" + " " + "World"
  • 重复:用 * 号,比如 "Ha" * 3 得到 "HaHaHa"
  • 索引:从0开始,比如 "Python"[0] 得到 'P'
  • 切片"Python"[1:4] 得到 'yth'

避坑指南:我曾经在日志处理脚本里,直接用 + 拼接大量字符串。结果日志文件一大,程序就卡死了。后来改用 join() 方法,性能提升了几十倍。

# 字符串格式化(推荐用f-string)
name = "小明"
age = 18
print(f"我叫{name},今年{age}岁。")  # 我叫小明,今年18岁。

# 常用方法
text = "  hello world  "
print(text.strip())      # 去掉首尾空格:"hello world"
print(text.upper())      # 转大写:"  HELLO WORLD  "
print(text.split())      # 按空格分割:['hello', 'world']

4.4 布尔类型(bool)——真与假

布尔值只有两个:TrueFalse。注意首字母要大写。

布尔值通常用在条件判断里:

is_ready = True
is_finished = False

if is_ready:
    print("准备好了!")
else:
    print("还没准备好。")

你想想看,其实很多表达式的结果都是布尔值:

print(10 > 5)    # True
print(3 == 4)    # False
print("abc" == "abc")  # True
print(0 == False)      # True(这个有点特殊)

💡 在Python里,0None、空字符串 ""、空列表 [] 都会被当作 False。其他值都是 True。这个特性在写条件判断时非常有用。

4.5 类型转换——让数据“变形”

有时候我们需要把一种类型转成另一种。比如用户输入的是字符串,但我们需要当数字用。

函数 作用 示例
int() 转成整数 int("42") → 42
float() 转成浮点数 float("3.14") → 3.14
str() 转成字符串 str(100) → "100"
bool() 转成布尔值 bool(1) → True

⚠️ 类型转换不是万能的!int("abc") 会报错。我在写爬虫时经常遇到这种问题——网页上明明写着"价格:99元",直接转int就炸了。得先处理掉"元"这个字。

# 用户输入默认是字符串
user_input = input("请输入你的年龄:")  # 输入"25"
age = int(user_input)  # 转成整数25
print(f"明年你就{age + 1}岁了。")

# 数字转字符串
score = 95
message = "你的分数是:" + str(score)
print(message)  # 你的分数是:95

# 布尔值转数字
print(int(True))   # 1
print(int(False))  # 0

4.6 实战小技巧——我踩过的坑

最后分享几个我实际工作中遇到的坑:

  1. 变量名别用拼音:我见过有人写 yong_hu_ming,还不如写 username。团队协作时,拼音变量名真的很尴尬。
  2. 注意浮点数精度:判断两个浮点数是否相等,别用 ==。用 abs(a - b) < 0.0001 这种方式。
  3. 字符串不可变text[0] = 'H' 会报错。要修改字符串,得重新创建一个。
  4. 布尔值可以当数字用True + True 结果是2。虽然语法上允许,但千万别这么写,代码可读性太差了。

记住一句话:变量是数据的容器,类型决定了容器能装什么。搞清楚了这些,后面的路就好走了。

好了,这一章就到这里。下一章我们聊聊列表和字典——这两个可是Python里最常用的数据结构,我保证你会爱上它们。