青松100 发表于 2020-11-13 15:14:37

format 的用法

我在B站搜了好几个关于format的用法的视频,讲的都是 在字符串用{} 占位,然后在format()设参数,传进字符串。即 xxxx{} , zzz{}, format('hello', 'peter')类似这种方法。--这个我看懂了。

下面的截图我在看的爬虫视频教程,下面用红框框圈起来的format用法,前面也没有字符串, 也没有占位的{},这个用法到底是咋用?

有大神能讲讲这个用法吗? 或者说明一下关键字啥的,我自己去搜索。





Twilight6 发表于 2020-11-13 16:20:56



没关系的哈,因为从你图中可以初步判断你下面代码是 self.url 实例变量,而上面的变量是局部变量 url 两者无关

格式化可以看看这个文章,很详细:

实用干货:字符串格式化
https://fishc.com.cn/thread-145610-1-1.html


kogawananari 发表于 2020-11-13 16:35:05

url里面的百分号是特殊编码 可以用urllib库编码和解码
下面这个字符串%百分号虽然叫格式化输出 但是本质是字符串的取余运算 定义在字符串的取余运算的魔术方法上
和format无关 字符串的format方法是format方法 而内置format函数是各个类的__format__魔术方法

kogawananari 发表于 2020-11-13 16:38:34

url编码:
from urllib.parse import parse_qs
print(parse_qs(%d)) #解码后是这个符号:{}

kogawananari 发表于 2020-11-13 16:40:37

{:10_292:}没仔细看你的 你这个地方这个是有关系的 是直接取余的我说的是浏览器地址栏对中文和符号的处理

青松100 发表于 2020-11-13 17:19:49

Twilight6 发表于 2020-11-13 16:20
没关系的哈,因为从你图中可以初步判断你下面代码是 self.url 实例变量,而上面的变量是局部变量 url...

谢谢版主大大。我看了那篇帖子了,和我在B站的视频看的讲得差不多,都是讲的字符串的拼接。即:

前面是字符串,字符串里面有{},后面是format()带参数的,然后把参数传到字符串里,这样完成拼接。


但是new_url = format()前面也没有字符串,也没有占位符,它是如何完成拼接的?


我这个是讲的是用通用的URL模版,来创造新的URL地址。

青松100 发表于 2020-11-13 17:21:18

kogawananari 发表于 2020-11-13 16:40
没仔细看你的 你这个地方这个是有关系的 是直接取余的我说的是浏览器地址栏对中文和符号的处理

谢谢大佬回复。

我在学习的视频中老师讲的是要拼接URL地址的字符串。你说的取余是啥意思?

Twilight6 发表于 2020-11-13 18:38:53

本帖最后由 Twilight6 于 2020-11-13 18:40 编辑

青松100 发表于 2020-11-13 17:19
谢谢版主大大。我看了那篇帖子了,和我在B站的视频看的讲得差不多,都是讲的字符串的拼接。即:

前面 ...



这里的format 应该是将参数的值转化为字符串,即:

print(format())
print(type(format()))   # 参数填写列表
print(type(format((1,2,3))))          # 参数填写元组

输出结果:

<class 'str'>
<class 'str'>

很少使用这个,看到你这个问题才发现还能这样的。。。去查了下也查不到什么猫腻

只能建议用正常模板 '{}'.format() 这样啦~

青松100 发表于 2020-11-13 21:17:15

Twilight6 发表于 2020-11-13 18:38
这里的format 应该是将参数的值转化为字符串,即:




非常感谢您和另一个大神的回复和帮助。

我搞清楚了。%是一个替换符,这是老版的format的格式,别人叫我不要用了。

也许是我正在学习的视频的老师较早入行,所以他的代码还是用老式的。

kogawananari 发表于 2020-11-14 08:09:47

字符串的format和内置format不一样的 害 这个有点复杂
>>> import datetime
>>> night = datetime.time(22,30,tzinfo=datetime.timezone(
...   datetime.timedelta(hours=8), name = '北京'))
>>> format(night,'现在是%Z时间%H点%M分')
'现在是北京时间22点30分'
>>> '现在是{:%Z}时间{:%H}点{:%M}分'.format(night,night,night)
'现在是北京时间22点30分'

kogawananari 发表于 2020-11-14 08:16:56

青松100 发表于 2020-11-13 17:21
谢谢大佬回复。

我在学习的视频中老师讲的是要拼接URL地址的字符串。你说的取余是啥意思?

取余是 % 运算符 也就是operator.mod(a, b)
>>> import operator
>>> a = 5
>>> b = 3
>>> operator.mod(a, b)
2
>>> a = '11%s11'
>>> b = 1
>>> operator.mod(a, b)
'11111'
老版本的这个格式化是写在取余运算里

青松100 发表于 2020-11-14 16:21:17

@Twilight6

版主大大,能不能麻烦审核一下,我新发的一个帖---        爬取BOSS的岗位名称和详情页的岗位描述

别的2个需要审核的,您不用理,也可以删掉。

Twilight6 发表于 2020-11-14 19:15:46

青松100 发表于 2020-11-14 16:21
@Twilight6

版主大大,能不能麻烦审核一下,我新发的一个帖---        爬取BOSS的岗位名称和详情页的岗位描 ...



没艾特成功我,没发现...

青松100 发表于 2020-11-14 19:24:59

Twilight6 发表于 2020-11-14 19:15
没艾特成功我,没发现...

谢谢关注。后来我借别人的楼,引用您的帖子,您回复了--帮我圈了不二版主。

我想以后我得用引用帖子,这样一定能成功。

也许是我的权限太低了,不能圈人。

另外两个被审核的帖子,我请求删掉,有个热心的大神在站务教我怎么删掉了,我搞好了。

Twilight6 发表于 2020-11-14 19:27:40

青松100 发表于 2020-11-14 19:24
谢谢关注。后来我借别人的楼,引用您的帖子,您回复了--帮我圈了不二版主。

我想以后我得用引用帖 ...



OK , 有好友权限才能艾特哈~

青松100 发表于 2020-11-14 21:39:08

Twilight6 发表于 2020-11-14 19:27
OK , 有好友权限才能艾特哈~

谢谢您的指教。
页: [1]
查看完整版本: format 的用法