鱼C论坛

 找回密码
 立即注册
查看: 1993|回复: 5

[已解决]关于字符串format()的一点疑问

[复制链接]
发表于 2021-11-3 16:28:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我先定义变量:

string = '我叫{name},今年{age}岁了,身高{height}米,我喜欢{like}。'
name = '张三'
age= 8
height = 1.8
like = 'apple'
print(string.format(name,age,height,like))

运行结果
KeyError: 'name'

而这样:
print('我叫{name},今年{age}岁了,身高{height}米,我喜欢{like}。'.format(name = '张三',age= 8,height = 1.8,like = 'apple'))
确可以正常打印,求大神指教,这是为什么?
最佳答案
2021-11-4 17:38:45
dreaminawake 发表于 2021-11-3 16:48
还得多嘴问一下,str.format(name=name)中,第一个name是变成了字符串的局部变量么?如果是这样的话,为 ...

str.format(name=name)中,第一个name是你定义的string中format函数的关键字参数
  1. string = '我叫{name},今年{age}岁了,身高{height}米,我喜欢{like}。'
复制代码


第二name是你定义的name变量,即
  1. name = '张三'
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-3 16:35:10 | 显示全部楼层
  1. string = '我叫{name},今年{age}岁了,身高{height}米,我喜欢{like}。'
  2. name = '张三'
  3. age= 8
  4. height = 1.8
  5. like = 'apple'
  6. print(string.format(name=name,age=age,height=height,like=like))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-3 16:48:25 | 显示全部楼层

还得多嘴问一下,str.format(name=name)中,第一个name是变成了字符串的局部变量么?如果是这样的话,为什么这样可以:
string = '我叫{},今年{}岁了,身高{}米,我喜欢{}。'
name = '张三'
age= 8
height = 1.8
like = 'apple'
print(string.format(name,age,height,like))
或者说,这样用是按0,1,2,3排列的原因。
新的不明白的地方在于,这个name = name为什么要多赋值一回呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-3 21:56:16 | 显示全部楼层
dreaminawake 发表于 2021-11-3 16:48
还得多嘴问一下,str.format(name=name)中,第一个name是变成了字符串的局部变量么?如果是这样的话,为 ...

Python 的三种字符串格式化:

1.)% 格式化
2.).format() 格式化
3.)f-string 格式化

范例如下:

  1. a = "小白"
  2. b = 87
  3. c = 71.2
  4. d = True

  5. # 字符串格式化:% 方法
  6. print("%s 今年 %d 岁,体重 %.1f 公斤,%r 表示 真。"%(a, b, c, d))

  7. # 字符串格式化:.format() 方法
  8. print("{} 今年 {} 岁,体重 {} 公斤,{} 表示 真。".format(a, b, c, d)) # 第一种,空 {} 默认为顺序 0, 1, 2, 3 ....,如:{0} 今年 {1} 岁,体重 {2} 公斤,{3} 表示 真。
  9. print("{3} 今年 {0} 岁,体重 {2} 公斤,{1} 表示 真。".format(a, b, c, d)) # 也可以自定义乱序

  10. # 字符串格式化:f-string 方法(也就是 Python 最新版本)
  11. print(f"{a} 今年 {b} 岁,体重 {c} 公斤,{d} 表示 真。")
复制代码
输出结果:
  1. 小白 今年 87 岁,体重 71.2 公斤,True 表示 真。
  2. 小白 今年 87 岁,体重 71.2 公斤,True 表示 真。
  3. True 今年 小白 岁,体重 71.2 公斤,87 表示 真。
  4. 小白 今年 87 岁,体重 71.2 公斤,True 表示 真。
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-4 17:38:45 | 显示全部楼层    本楼为最佳答案   
dreaminawake 发表于 2021-11-3 16:48
还得多嘴问一下,str.format(name=name)中,第一个name是变成了字符串的局部变量么?如果是这样的话,为 ...

str.format(name=name)中,第一个name是你定义的string中format函数的关键字参数
  1. string = '我叫{name},今年{age}岁了,身高{height}米,我喜欢{like}。'
复制代码


第二name是你定义的name变量,即
  1. name = '张三'
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-5 10:14:26 | 显示全部楼层
你字符串里面的东西相当于参数,有位置参数,关键字参数
位置参数直接按位置输入就可以了
关键字参数得指明哪个关键字是哪个值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-5 10:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表