当前位置:首页>python>一起学Python(014):占位符怎么用?

一起学Python(014):占位符怎么用?

  • 2026-10-11 08:19:25
一起学Python(014):占位符怎么用?

你有没有遇到过这种情况:想输出“我叫张三,今年18岁”,但名字和年龄是变量,每次都要拼接字符串,写一堆+号,还要把数字转成字符串,又慢又容易错。今天我们就来聊聊字符串里的“填空题”——占位符。

什么是占位符?

占位符就是字符串中预留的一个“空位”,等着后面用变量的值去填充。就像我们做填空题:“我叫____,今年__岁”,横线就是占位符,填上具体内容后,完整的句子就出来了。

Python中常用的占位符有三种:%格式化、format()方法和f-string(最推荐)。

用%占位符(老式)

%占位符是最基础的,也是最老式的占位方法,下面是一个实例。

name = "张三"

age = 18

print("我叫%s,今年%d岁" % (name, age))

在这个实例中,%后的不同字母表示不同的意义:

%s:字符串占位符(s = string)

%d:整数占位符(d = decimal integer)

%f:浮点数占位符,可控制小数位数如%.2f(小数位2位)

但是用%占位符缺点比较明显,需要记住不同类型对应的符号,且变量和占位符位置必须一一对应,在实际使用过程中极容易出错。

用format()方法(通用)

用format()方法进行占位也是目前较为通用的方法,以下是个实例:

name = "张三"

age = 18

print("我叫{},今年{}岁".format(name, age))

在这个实例中,format()有许多变化:

{}是通用占位符,format()里的参数按顺序填充

可以指定位置:如format(age, name) 中就是先填age再填name

甚至可以指定名称:"{name},{age}".format(name="张三", age=18)

format()占位的优点在于不需要区分类型,功能强大。但是代码略长,尤其是字符串较长时输入比较费时费力且易出错。

f-string(最推荐,Python 3.6+)

使用f-string是目前python中最常用也最方便的占位方法,以下是个实例:

name = "张三"

age = 18

print(f"我叫{name},今年{age}岁")

在使用f-string过程中,要注意以下细节:

在字符串前加f(或F)

直接在{}里写变量名或表达式

可以写计算:f"{age}年后,我{age+10}岁"

相对于前两种方法,使用f-string的优点在于最直观、最简洁、运行速度最快。所以一般是日常开发首选。

占位符的进阶用法

f-string除了常规的占位使用方法之外,还有着以下功能。

1. 控制小数位数

pi = 3.1415926

print(f"圆周率约等于{pi:.2f}")   # 输出:3.14

print("{:.2f}".format(pi))      # 同样效果

其中“:.2f”表示保留2位小数。

2. 对齐与宽度

name = "张三"

print(f"|{name:<10}|")   # 左对齐,宽度10

print(f"|{name:>10}|")   # 右对齐

print(f"|{name:^10}|")   # 居中对齐

输出的结果如下:

3. 千位分隔符

num = 1234567

print(f"{num:,}") 

输出的结果如下:

综合案例解析:学生成绩报告单

下面我们通过一个综合案例具体解析占位符的几种用法:

name = "陈小希"                                       # 学生姓名

student_id = 20240506                                 # 学号

scores = {"语文": 87.5, "数学": 92, "英语": 78.5}      # 各科成绩

total = sum(scores.values())                          # 总分

average = total / len(scores)                         # 平均分

# 1. 基础变量嵌入与整数补零

print(f"成绩单 - {name}(学号:{student_id:09d})") # :08d 学号补零成9位 → 20240506 → 020240506

# 2. 遍历输出各科成绩,控制小数位数和对齐

for subject, score in scores.items():

    print(f"{subject:<6} {score:>5.1f} 分")           # <6左对齐宽度6,>5.1f右对齐宽度5保留1位小数

# 3. 总分与平均分(表达式与格式化)

print(f"总分:{total:.1f}  平均分:{average:.2f}")    # .1f保留1位小数,.2f保留2位小数

# 4. 等级判断(嵌入三元表达式)

grade = "优秀" if average >= 85 else "良好" if average >= 70 else "加油"

print(f"综合评级:{grade}")

# 5. 千位分隔符演示(假设有更大的数)

print(f"本年级总人数:{1234567:,} 人")       # :, 输出千位分隔符 → 1,234,567

运行结果输出如下:

常见错误与提示

1.为什么print("{name}")没有输出变量值,而是直接输出了{name}?

答:没有在字符串前面加f了。花括号内的name没有被视为变量,只是作为普通字符输出。

2.在f-string里写了{age+1},但age是字符串,结果报错了,为什么?

答:f-string花括号内可以写表达式,但表达式必须能正确执行。如果age是字符串(如从input()直接获得),age+1会触发类型错误,因为字符串不能和整数相加。需要先转换为整数或浮点数,如{int(age)+1}。

3.如果想在f-string里输出花括号本身(比如输出{age}字样),但写{{age}}却输出了{age}而不是带变量的值,怎么办?

答:在f-string中,双花括号{{和}}都会被转义为单个花括号,不进行变量替换。要输出字面花括号,就用两个花括号包裹。例如f"{{age}}"输出{age}。如果想混合变量和花括号,可以写f"{{{age}}}",内层{age}被替换,外层{{和}}转为单花括号,最终输出{变量值}。

4.在f-string里写了大段的表达式,比如列表推导式,代码很长,有办法换行吗?

答:f-string本身不支持在花括号内直接换行,但你可以先在外部将表达式结果赋给一个变量,然后在f-string中引用该变量。例如先计算total = sum(x for x in data if x>0),再写f总和:{total}"。这样既保持了可读性,又避免了长表达式。

5.为什么在f-string里写了嵌套引号会报语法错误?

答:f-string字符串的引号与内部字符串的引号冲突。例如f"他说:"{name}""会提前结束字符串。可以在外部使用双引号时,内部用单引号,如f"他说:'{name}'";或者反过来f'他说:"{name}"'。

占位符就是字符串里的填空题,f-string是最简单好用的方式。

精彩回顾:

一起学Python(013):从思路到代码@循环打印图案

一起学Python(012):从思路到代码@登录验证器

一起学Python(011):从思路到代码@出租车计费

一起学Python(010):画同心圆的想与写

一起学Python(009):从零开始学绘图@turtle库使用

一起学Python(008):站在巨人的肩膀上编程@Python库引用

一起学Python(007):Python赋值语句轻松入门@每日饮水记录器

一起学Python(006):分支控制结构让程序学会“做选择”@成绩评定案例

一起学Python(005):从斐波那契数列看循环控制结构

一起学Python(004):Python程序三种控制结构:顺序、分支和循环

一起学Python(003):Python代码书写规则:那些让程序崩溃的“小细节”

一起学Python(002):计算机的“数字秘密”——0和1如何统治世界?

一起学Python(001):为什么文科生也要学Python?

欢迎【点赞】+【转发】❤️

最新文章

随机文章