Skip to content

变量、类型与字符串

写代码最先打交道的就是两样东西:存数据的变量,和处理文本的字符串——一个待办事项的标题、一篇博客的内容、一个联系人的名字,在代码里都先变成变量和字符串。

先说一个 Python 最显眼的特点:缩进是有意义的iffordef 下面的代码块,靠缩进表示归属,不像别的语言用花括号 {}。缩进错了(比如混了空格和 Tab、或者缩进层数不对),Python 直接报语法错误。而且缩进强制规范之后,代码反而比花括号语言更好读。

一、变量与类型

Python 不需要先声明类型,赋值即定义:

python
todo_title = "写周报"     # str,字符串
todo_count = 5           # int,整数
progress = 0.8           # float,浮点数
done = True              # bool,布尔值
note = None              # NoneType,表示"没有值"

type() 可以查看变量当前是什么类型:

python
print(type(todo_count))  # <class 'int'>
print(type(done))        # <class 'bool'>

注意 type 输出里的 class——Python 里所有类型本质上都是类。现在只要知道:每个值都有自己的类型,类型决定了这个值能做什么操作。

变量名通常用小写加下划线,比如 todo_titlemax_retry别为了省字符写得太短,像 ttsn 这种缩写,隔几个月再打开代码得猜半天含义。todo_titlett 多几个字,但能少猜一次。

常见的基本类型:

类型示例用来表示
str"写周报"文本:标题、名字、内容
int5整数:数量、序号、状态码
float0.8小数:比例、进度
boolTrue / False是非:开关、检查结果
NoneNone"没有值":还没赋值、查询没结果

None 这个类型要特别留意——它不是 0,不是空字符串,不是 False,它表示"什么都没有"。查询一个联系人没查到,返回的是 None,不是空字符串。这个区别后面写条件判断时会反复用到。

二、字符串与 f-string

文本在 Python 里是字符串。最常用的操作是把变量嵌进字符串里,这叫 f-string(注意字符串前面的 f):

python
title = "写周报"
count = 5

message = f"待办《{title}》还有 {count} 条没完成"
print(message)  # 待办《写周报》还有 5 条没完成

花括号 {} 里可以写简单表达式:

python
total = 8
done = 5
print(f"完成度 {done / total * 100:.1f}%")  # 完成度 62.5%

这里的 :.1f 是格式化——保留 1 位小数。f-string 是 Python 3.6 之后才有的,老代码里可能见到 .format() 或者 % 写法,功能类似但 f-string 最直观,新代码统一用 f-string。

几个常用格式化:

python
price = 19.5
ratio = 0.875

print(f"价格 {price:.2f} 元")     # 价格 19.50 元(保留 2 位小数)
print(f"比例 {ratio:.1%}")        # 比例 87.5%(百分比格式)
print(f"序号 {5:03d}")            # 序号 005(补零到 3 位)

三、字符串常用方法

字符串自带一批方法(方法就是字符串能做的动作),掌握几个常用的,处理文本会顺很多:

python
title = "  写周报  "

clean = title.strip()         # 去掉首尾空白,得到 "写周报"
upper_title = title.upper()   # 转大写(中文没变化,英文有用)
has_word = title.startswith("写")  # 判断是否以"写"开头

拆分和拼接——处理一行文本、一段日志最常用:

python
line = "张三,zhangsan@example.com,13800000000"

parts = line.split(",")       # 按逗号拆成列表
print(parts)                  # ['张三', 'zhangsan@example.com', '13800000000']
print(parts[0])               # 张三(取第一段)

words = ["待办", "完成", "已删"]
text = "-".join(words)        # 用"-"把列表拼成字符串
print(text)                   # 待办-完成-已删

splitjoin 是一对反操作——split 把字符串拆成列表,join 把列表拼成字符串,这两个用得极多。

几个常用方法速查:

方法作用
strip()去首尾空白(含换行)
split(sep)按分隔符拆成列表
join(list)把列表拼成字符串
replace(old, new)替换内容
startswith() / endswith()判断前缀/后缀
upper() / lower()转大写/小写
find(sub)查找子串位置,找不到返回 -1

找子串有两个常用写法,别搞混:"写" in title 返回布尔值(在不在),title.find("写") 返回位置(在哪)。判断"有没有"用 in,判断"在哪"用 find

四、多行字符串

三引号 """...""" 能保留换行,适合写多行内容——配置模板、长文本、文档说明:

python
email_template = """你好 {name}

你有一条待办事项需要处理:
{title}

请在 {deadline} 前完成。
"""

print(email_template.format(name="张三", title="写周报", deadline="周五"))

三引号字符串另一个重要用途是函数的文档字符串(docstring),放在函数/类/模块开头,说明这个函数干什么用。

字符串的内容看着琐碎,但写脚本时几乎每段都在处理文本——读文件得到字符串、解析得到字段、拼接成输出。这几个方法用熟了,后面会轻松很多。