甜萝 发表于 2024-5-8 23:21

关于格式化字符串字面值的一点疑惑

本帖最后由 paypojie 于 2024-5-8 23:21 编辑

为什么用%符号来格式化内容时 下面这样写不会报错

```
a = 0
print('%d' % a)
print('%s' % a)
```



而这样则写会报错 这是什么原因导致的?

```
b = 'b'
print('%s' % b)
print('%d' % b)
```

Arcticlyc 发表于 2024-5-8 23:40

看报错,%d 只支持 数字

甜萝 发表于 2024-5-8 23:50

Arcticlyc 发表于 2024-5-8 23:40
看报错,%d 只支持 数字

报错看的懂 就是%s为啥既支持字符串 又支持数字呢

kittylang 发表于 2024-5-8 23:54

本帖最后由 kittylang 于 2024-5-8 23:56 编辑

可以看文档,文档是学习python最好的教材,https://docs.python.org/zh-cn/3/ ... e-string-formatting d是十进制整数,s是可以被str的任意值

值得注意的是%是不被官方推荐的过时方式

甜萝 发表于 2024-5-9 00:06

kittylang 发表于 2024-5-8 23:54
可以看文档,文档是学习python最好的教材,https://docs.python.org/zh-cn/3/ ... e-string-formatting d是 ...

讲解的不错

bester 发表于 2024-5-9 08:21

隐式类型转换,数字0可以转字符串0,但是你别的字符串不能转数字啊,说不定你填字符串0,可以转

无闻无问 发表于 2024-5-9 08:34

本帖最后由 无闻无问 于 2024-5-9 08:37 编辑

paypojie 发表于 2024-5-8 23:50
报错看的懂 就是%s为啥既支持字符串 又支持数字呢
python这玩意就是大杂烩,估计吸纳了c的语法,c中整型和字符型就是近亲,几乎可以通用,还有就是类型转换,范围小或精度低可自动转大,反之就不行……

海是倒过来的天 发表于 2024-5-9 09:06

不用纠结这个,其实就是python语法的问题。记住就可以了

QvQsuipian 发表于 2024-5-9 09:54

本帖最后由 QvQsuipian 于 2024-5-9 09:55 编辑

使用 `%` 格式化字符串时,你需要确保你提供的格式化类型(如 `%d`、`%s`、`%f` 等)与你要插入到字符串中的变量的类型相匹配。

在你的第一个例子中:

```python
a = 0
print('%d' % a)# 正确,因为a是整数,%d用于整数
print('%s' % a)# 正确,但这不是最佳实践,因为%s是通用格式符,它可以用于任何类型,包括整数
```

`%d` 是用于整数的格式化类型,而 `%s` 是一个通用的格式化类型,它可以用于任何数据类型(如字符串、整数、浮点数等)。因此,即使 `a` 是一个整数,使用 `%s` 来格式化它也不会报错,但这不是最佳实践,因为它不会执行任何类型检查或转换。

然而,在你的第二个例子中:

```python
b = 'b'
print('%s' % b)# 正确,因为b是字符串,%s用于字符串
print('%d' % b)# 错误,因为b是字符串,但%d期望一个整数
```

当你尝试使用 `%d` 来格式化一个字符串 `b` 时,Python会抛出一个 `TypeError`,因为它期望一个整数,但得到了一个字符串。这种类型不匹配会导致运行时错误。


在现代Python代码中,更推荐使用新的字符串格式化方法,如 `str.format()` 方法或 f-string(在Python 3.6及以上版本中可用),它们提供了更强大、更灵活和更易读的字符串格式化功能。

GuoTingRui 发表于 2024-5-9 10:50

我也是 这个确实很迷惑,也是希望大佬讲解一下~
页: [1] 2
查看完整版本: 关于格式化字符串字面值的一点疑惑