字符串的三种定义方式、拼接、格式化——我终于搞懂了f“{name}“是什么意思

字符串的三种定义方式、拼接、格式化——我终于搞懂了f“{name}“是什么意思
如果你还记得第二篇的内容有一行代码是这样的print(我叫 name 今年 age 岁)当时我们用 str(age) 解决了报错。但其实有更优雅的方式——不用加号也不用 str()一行就能搞定。这个方式就是 f-string。前几篇我学了变量、数据类型、类型转换和运算符。其实这些东西写来写去都绕不开一个东西——字符串。第一行代码print(Hello World)里有它变量name 张三里有它拼接报错TypeError也是因为它。字符串几乎无处不在但我一直没有正儿八经地学过它。今天就来补上这一课。一、字符串的三种定义方式前几篇我只用了双引号但其实字符串有三种定义方式。1. 单引号name 张三 print(name)2. 双引号name 张三 print(name)3. 三引号多行字符串text 这是第一行 这是第二行 这是第三行 print(text)单引号和双引号的作用完全一样那为什么要搞两种呢那是因为字符串里本身可能包含引号。三引号则用来写多行文本在写长段落、文档注释时特别方便。二、引号嵌套先看一段代码text Im a student print(text) # Im a student这个能正常运行因为双引号包住了里面的单引号。那反过来呢text 他说你好 print(text) # 他说你好单引号包住双引号也没有问题。但如果字符串里的引号和外面包的引号是同一个呢比如text Im a student # 报错Python 看到 I 就以为字符串结束了结果发现后面跟着 m a student直接报错。解决方法一用另一种引号包住text Im a student # 用双引号包住里面单引号不用转义解决方法二用反斜杠转义text I\m a student # 用 \ 告诉 Python 这里不是结束就是一个普通的单引号 print(text) # Im a student转义符 \ 的作用是“取消特殊含义”原本引号表示字符串的开始和结束加上 \ 之后它只是一个普通字符。三、常见的转义符在写文件路径的时候我遇到过一个问题path C:\Users\name print(path) # 输出C:\Users反斜杠不见了\n 被当成了换行符。后来才知道反斜杠在字符串里有特殊含义需要写成 \ 才能输出真正的反斜杠。类似的情况还不少所以这里把 Python 里常见的转义符整理了一下转义符含义示例输出单引号print(Im fine) → Im fine输出双引号print(他说你好) → 他说你好\n换行print(第一行\n第二行)\t制表符相当于按一下 Tabprint(A\tB) → A B\输出一个反斜杠print(C:\Users) → C:\Users掌握这些以后写文件路径、处理文本数据的时候会少很多困惑。四、字符串拼接在第二篇里我已经用过拼接字符串了name 张三 print(我叫 name) # 我叫张三也可以把多个字符串拼在一起first_name 张 last_name 三 print(first_name last_name) # 张三注意字符串只能和字符串拼接age 18 print(我今年 age 岁) # 报错这个坑我第二篇已经踩过了当时用 str(age) 转成字符串解决了。其实在第二篇我解决的是一个具体问题到了这里我才真正理解“为什么不能拼”以及“除了 还有什么替代方式”age 18 print(我今年 str(age) 岁) # 我今年18岁不过除了 Python 还有更好的方式——字符串格式化。五、字符串格式化先来看一个场景name 张三 age 25 city 北京现在我想打印一句完整的话我叫张三今年25岁住在北京。如果用拼接print(我叫 name 今年 str(age) 岁住在 city)这样也能做到但写起来很麻烦引号和加号混在一起容易搞乱。这个时候就需要格式化了。方式一f-string(适合Python3.6)name 张三 age 25 city 北京 print(f我叫{name}今年{age}岁住在{city}) # 我叫张三今年25岁住在北京方式二format()方法print(我叫{}今年{}岁住在{}.format(name, age, city)){}是占位符相当于先留一个空位置format()里的值会按顺序填进去。方式三%格式化print(我叫%s今年%d岁住在%s % (name, age, city))六、数字精度控制当格式化浮点数小数时我们经常需要控制显示几位小数。pi 3.1415926 print(f{pi:.2f}) # 3.14保留两位小数 print(f{pi:.3f}) # 3.142保留三位小数四舍五入 print(f{pi:.0f}) # 3保留零位小数格式说明{变量名:.nf},其中n是要保留的小数位数。注意 .2f这种写法目前只在f-string里最常用。如果用format()写法是{:.2f}.format(pi);用%方式写法是%.2f % pi。这在处理价格、成绩、测量数据时特别有用例如price 19.9 discount 0.75 final_price price * discount print(f折后价格{final_price:.2f}元) # 折后价格14.92元七、对表达式进行格式化f-string的{}里不只是能放变量还能放表达式。表达式就是可以计算出结果的代码片段。比如a b是一个表达式结果是两个数相加age 1也是一个表达式结果是一个新数字。在 f-string 的{}里放表达式Python 会先算出结果再转成字符串填进去。例如a 10 b 20 print(f{a} {b} {a b}) # 10 20 30name 张三 age 25 print(f明年我就{age 1}岁了) # 明年我就26岁了score 85 print(f你的成绩{及格 if score 60 else 不及格}) # 你的成绩及格八、综合示例把今天学的东西串起来# 商品信息 name Python书籍 price 79.9 discount 0.75 quantity 3 # 计算 final_price price * discount total final_price * quantity # 输出 info f 订单信息 商品名称{name} 单价{price:.2f}元 折扣{discount * 100:.0f}% 折后单价{final_price:.2f}元 数量{quantity}件 总价{total:.2f}元 print(info)运行结果 订单信息 商品名称Python书籍 单价79.90元 折扣75% 折后单价59.92元 数量3件 总价179.77元 小结今天学的东西整理成一张速查表操作方法示例单引号定义 name 张三双引号定义 name 张三多行字符串 或 text 多行引号嵌套外双内单 或 外单内双Im fine转义符\、\n、\t字符串拼接你好 世界字符串格式化推荐f-stringf姓名{name}保留 n 位小数:.nff{pi:.2f}格式化表达式f{a b}下一篇我打算学数据输入input语句、布尔类型和比较运算符。