正则表达式 re.sub 替换不完整的问题现象及其根本原因

2018-08-28 08:09:09 +08:00
 itskingname

这是一个说隐蔽比较隐蔽,说弱智也比较弱智的坑。

造成这个坑的原因有两点:

如果习惯看源代码或者官方文档,要解决这个问题不超过 2 分钟。而如果不看文档不看源代码,只知道去网上搜搜搜,那么要解决这个问题可能需要的时间会超过两小时。

正则表达式 re.sub 替换不完整的问题现象及其根本原因

2044 次点击
所在节点    分享创造
14 条回复
delectate
2018-08-28 08:22:19 +08:00
>>> import re
>>> print(int(re.S))
16

学习了。
imn1
2018-08-28 08:32:15 +08:00
不读文档、手册怪谁呢?
自己跳过一个参数,这个哪个语言都不行吧?基础知识

flags 是整数,也是看手册就知道啊,默认参数 flags=0,不就明显是整数么?
Leigg
2018-08-28 08:38:59 +08:00
。。。这个纯属于使用者粗心大意,我还以为是 re 库本身有问题呢,像这种 re.S/I/M,一般都是库内部使用 int 做的枚举值,类似的还有 pymongo.ASCENDING。
itskingname
2018-08-28 09:11:16 +08:00
@Leigg 你和
@imn1

你们两人为什么都只看到了表象呢。这里正则表达式只是举个例子而已。

我想强调的点是:

多个默认参数不带参数名的时候,按顺序从左侧填写
很多编程语言里面常量都会使用一个数字并赋值给一个大写变量来表示
多个默认参数值的类型一样,使用的时候又不带参数名,可能会导致文章中类似的不容易发现的 bug。
blodside
2018-08-28 09:24:45 +08:00
我一般用三个以上参数的时候都是指定参数名的
rrfeng
2018-08-28 09:27:50 +08:00
我只说一句,这就是 Python 蠢的地方了啊!
luyangk
2018-08-28 09:39:01 +08:00
在使用一个函数之前第一步不就是了解它的参数是什么吗。。。为什么这个步骤会放到了 debug 的时候。。。如果在知道函数有 5 个参数的情况下,只传了 4 个还没指定参数名,怎么想都会知道有问题吧
imn1
2018-08-28 09:41:16 +08:00
@itskingname
是你只看到我说的「表象」

我说的就是,你所强调的各点都是基础,连我这个不是程序员的人都懂的
尤其读手册是基础中的基础
使用任何函数、类、API 都该搞清楚输入格式和输出格式,怎能想当然呢
itskingname
2018-08-28 09:50:11 +08:00
@imn1 唉,我觉得肯定是我这个例子没有举好
noqwerty
2018-08-28 09:50:48 +08:00
感觉这个不能怪库啊……传参数也要讲基本法吧
whileFalse
2018-08-28 10:14:54 +08:00
要怪罪到语言 /IDE 身上吗?
lxy42
2018-08-28 11:02:26 +08:00
@itskingname #4
> 多个默认参数不带参数名的时候,按顺序从左侧填写

“按顺序从左赋参”难道不是很符合直觉的做法吗?

> 很多编程语言里面常量都会使用一个数字并赋值给一个大写变量来表示

用整数表示常量也是很普遍的做法啊。


你这个明显就是不熟悉函数用法导致的错误,跟库本身一点关系都没有。
lxy42
2018-08-28 11:03:00 +08:00
@rrfeng #6 请问蠢在哪里?
itskingname
2018-08-28 11:45:12 +08:00
@lxy42 我都说了 re.sub 只是我举得一个例子。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/483821

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX