全能单行url解码器
超高浓缩“复杂”逻辑lambda,体格虽小功用不减正常形态书写代码。
(笔记模板由python脚本于2024年12月05日 23:27:54创建,本篇笔记适合url编/解码学习的coder翻阅)
-
Python 官网:https://www.python.org/
-
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
- My CSDN主页、My HOT博、My Python 学习个人备忘录
- 好文力荐、 老齐教室
本文质量分:
本文地址: https://blog.csdn.net/m0_57158496/article/details/144278520
CSDN质量分查询入口:http://www.csdn.net/qc
- ◆ 全能单行url解码器
- 1、全能单行url解码器
- 2、单行拆解
- 2.1 全能解码 `decode_url`
- 2.2 保留 %20 空格版
- 3、单行导读
- 3.1 函数介绍
- 3.2 代码亮点
- 3.3 使用示例
- 3.4 阅读建议
- 4、更明晰的单行书写形式
◆ 全能单行url解码器
1、全能单行url解码器
单行解码器脚本
#!/usr/bin/env python3decode_url = lambda url: ''.join([f"{chr(int(char[:2], 16))}{char[2:]}" if (len(char) > 1) and (char[0].upper() in '0123456789ABCDEF') and (char[1].upper() in '0123456789ABCDEF') else f"%{char}" if k != 0 else char for k,char in enumerate(url.split('%'))])decode_url_20 = lambda url: ''.join([f"{chr(int(char[:2], 16))}{char[2:]}" if (len(char) > 1) and (char[0].upper() in '0123456789ABCDEF') and (char[1].upper() in '0123456789ABCDEF') and (char[:2] != '20') else f"%{char}" if k != 0 else char for k,char in enumerate(url.split('%'))])url = 'https://blog.csdn.net/m0_57158496?csdn_share_tail=%7B%22type%22%3A%22ask%22,%22rType%22%3A%22question%22,%22rId%22%3A%228166844%22,%22source%22%3A%22m0_57158496%22%7D'
url = '【Microi吾码低代码平台:高效便捷的生成与管理全能助手 - CSDN App】https://blog.csdn.net/Zero_VPN/article/details/144242444?%20sharetype=blog&shareId=144242444&sharerefer=APP&sharesource=m0_57158496%20&sharefrom=link'
print(f"\n{url = }"f"\n解码:"f"\n{decode_url(url) = }")print(f"\n解码(保留空格%20):"f"\n{decode_url_20(url) = }")
效果截屏
这里不作代码导读,请您先行阅读第二节“单行拆解”。
2、单行拆解
下面,我将 lambda 函数版本转换为更易于阅读的普通 Python 函数。
以下是两个版本的转换:
2.1 全能解码 decode_url
这个版本可以处理包含 % 编码的 URL,并且能够解码它们。
python 代码
(if嵌套)
def decode_url(url):decoded_url = []parts = url.split('%')for k, char in enumerate(parts):if (k != 0 and len(char) > 1 and char[0].upper() in '0123456789ABCDEF' and char[1].upper() in '0123456789ABCDEF'):decoded_url.append(f"chr(int(char[:2], 16)){char[2:]}")else:if k != 0:decoded_url.append(f"%{char}")else:decoded_url.append(char)return ''.join(decoded_url)
python 代码
(并行if)
def decode_url_with_space(url):decoded_url = []parts = url.split('%')for k, char in enumerate(parts):if (k != 0 and len(char) > 1 and char[0].upper() in '0123456789ABCDEF' and char[1].upper() in '0123456789ABCDEF' ):decoded_url.append(f"{chr(int(char[:2], 16))}{char[2:]}")elif k == 0:decoded_url.append(char)else:decoded_url.append(f"%{char}")return ''.join(decoded_url)if __name__ == '__main__':url = 'https://blog.csdn.net/m0_57158496?csdn_share_tail=%7B%22type%22%3A%22ask%22,%22rType%22%3A%22question%22,%22rId%22%3A%228166844%22,%22source%22%3A%22m0_57158496%22%7D'#url = '【Microi吾码低代码平台:高效便捷的生成与管理全能助手 - CSDN App】https://blog.csdn.net/Zero_VPN/article/details/144242444?%20sharetype=blog&shareId=144242444%20&sharerefer=APP&sharesource=m0_57158496&sharefrom=link'print(f"\n{url = }"f"\n\n解码:\n"f"{decode_url_with_space(url) = }")
效果截屏
2.2 保留 %20 空格版
这个版本在解码时会保留 空格(%20
)。
python代码
def decode_url_with_space(url):decoded_url = []parts = url.split('%')for k, char in enumerate(parts):if (k != 0 and len(char) > 1 and char[0].upper() in '0123456789ABCDEF' and char[1].upper() in '0123456789ABCDEF' and char[:2] != '20'):decoded_url.append(f"{chr(int(char[:2], 16))}{char[2:]}")elif k == 0:decoded_url.append(char)else:decoded_url.append(f"%{char}")return ''.join(decoded_url)if __name__ == '__main__':url = 'https://blog.csdn.net/m0_57158496?csdn_share_tail=%7B%22type%22%3A%22ask%22,%22rType%22%3A%22question%22,%22rId%22%3A%228166844%22,%22source%22%3A%22m0_57158496%22%7D'url = '【Microi吾码低代码平台:高效便捷的生成与管理全能助手 - CSDN App】https://blog.csdn.net/Zero_VPN/article/details/144242444?%20sharetype=blog&shareId=144242444%20&sharerefer=APP&sharesource=m0_57158496&sharefrom=link'print(f"\n{url = }"f"\n\n解码:\n"f"{decode_url_with_space(url) = }")
效果截屏
就解码/还原%/不操作
三种情形,直接并行if
就好;当然,选择两种情形进行if嵌套
也是可取滴。😋
个人观点:if
可以不嵌套做好的事儿,决不嵌套。
3、单行导读
“单行”解码函数代码导读:
在这个代码示例中,我们展示了两个强大的单行 Python 函数,它们能够处理 URL 编码的字符串。这些函数利用了 Python 的 lambda 表达式和列表推导式的特性,以极其紧凑的形式实现了复杂的解码逻辑。
3.1 函数介绍
-
decode_url
:- 功能:解码 URL 中的所有百分比编码字符。
- 逻辑:通过分割 URL 并检查每个编码块,将其从十六进制转换为对应的字符。
-
decode_url_20
:- 功能:与
decode_url
类似,但特别保留空格编码%20
不进行解码。 - 逻辑:在解码过程中,如果遇到
%20
编码,则将其保留为原始形式。
- 功能:与
3.2 代码亮点
- lambda 表达式:使用匿名函数来简化代码结构。
- 列表推导式:一行代码完成复杂的字符串处理。
- 条件判断:通过条件表达式来决定是否解码每个编码块。
3.3 使用示例
代码末尾提供了两个 URL 示例,分别通过 decode_url
和 decode_url_20
函数进行解码,并打印出解码后的结果。
3.4 阅读建议
建议读者仔细观察列表推导式中的条件判断部分,理解如何通过字符长度和十六进制字符集的检查来决定解码逻辑。同时,注意 decode_url_20
函数中如何特别处理 %20
编码。
通过阅读和理解这段代码,您将能够更好地掌握 Python 的高级特性,并在未来的编程实践中灵活运用。
4、更明晰的单行书写形式
python脚本
#!/usr/bin/env python3decode_url = lambda url: ''.join([f"{chr(int(char[:2], 16))}{char[2:]}" if ((len(char) > 1) and (char[0].upper() in '0123456789ABCDEF') and (char[1].upper() in '0123456789ABCDEF')) else f"%{char}" if k != 0 else char for k,char in enumerate(url.split('%'))])decode_url_20 = lambda url: ''.join([f"{chr(int(char[:2], 16))}{char[2:]}" if ((len(char) > 1) and (char[0].upper() in '0123456789ABCDEF') and (char[1].upper() in '0123456789ABCDEF') and (char[:2] != '20')) else f"%{char}" if k != 0 else char for k,char in enumerate(url.split('%'))])url = 'https://blog.csdn.net/m0_57158496?csdn_share_tail=%7B%22type%22%3A%22ask%22,%22rType%22%3A%22question%22,%22rId%22%3A%228166844%22,%22source%22%3A%22m0_57158496%22%7D'
url = '【Microi吾码低代码平台:高效便捷的生成与管理全能助手 - CSDN App】https://blog.csdn.net/Zero_VPN/article/details/144242444?%20sharetype=blog&shareId=144242444&sharerefer=APP&sharesource=m0_57158496%20&sharefrom=link'
print(f"\n{url = }"f"\n\n解码:"f"\n{decode_url(url) = }")print(f"\n解码(保留空格%20):"f"\n{decode_url_20(url) = }")
效果截屏
采用折行书写条件表达式,让单行代码更是错的阅读。
有些蹩足的单行:《简易解码器(自定义单行python函数)》,您可以点击跳转翻阅。
上一篇: 简易url解码器(定义python单行函数工具)(被%编码的url如同天书,自拟一个单行函数解析还原,方便相认)
下一篇:
我的HOT博:
本次共计收集404篇博文笔记信息,总阅读量61.76w。数据采集于2024年11月25日 08:23:38,用时7分56.4秒。阅读量不小于6.00k的有 9 9 9篇。
- 让QQ群昵称色变的神奇代码
地址:https://blog.csdn.net/m0_57158496/article/details/122566500
浏览阅读:6.2w
点赞:25 收藏:89 评论:17
(本篇笔记于2022-01-18 19:15:08首次发布,最后修改于2022-01-20 07:56:47)
- Python列表(list)反序(降序)的7种实现方式
地址:https://blog.csdn.net/m0_57158496/article/details/128271700
浏览阅读:1.3w
点赞:9 收藏:40 评论:8
(本篇笔记于2022-12-11 23:54:15首次发布,最后修改于2023-03-20 18:13:55)
- pandas 数据类型之 DataFrame
地址:https://blog.csdn.net/m0_57158496/article/details/124525814
浏览阅读:1.0w
点赞:7 收藏:40
(本篇笔记于2022-05-01 13:20:17首次发布,最后修改于2022-05-08 08:46:13)
- 个人信息提取(字符串)
地址:https://blog.csdn.net/m0_57158496/article/details/124244618
浏览阅读:1.0w
点赞:3 收藏:20
(本篇笔记于2022-04-18 11:07:12首次发布,最后修改于2022-04-20 13:17:54)
- 罗马数字转换器|罗马数字生成器
地址:https://blog.csdn.net/m0_57158496/article/details/122592047
浏览阅读:8.2k
收藏:3
(本篇笔记于2022-01-19 23:26:42首次发布,最后修改于2022-01-21 18:37:46)
- 统计字符串字符出现的次数
地址:https://blog.csdn.net/m0_57158496/article/details/130517025
浏览阅读:8.1k
点赞:5 收藏:24
(本篇笔记于2023-05-06 22:28:18首次发布,最后修改于2023-05-12 06:21:40)
- Python字符串居中显示
地址:https://blog.csdn.net/m0_57158496/article/details/122163023
浏览阅读:8.0k
点赞:1 收藏:12 评论:1
- 回车符、换行符和回车换行符
地址:https://blog.csdn.net/m0_57158496/article/details/123109488
浏览阅读:6.7k
点赞:2 收藏:4
(本篇笔记于2022-02-24 13:10:02首次发布,最后修改于2022-02-25 20:07:40)
- python清屏
地址:https://blog.csdn.net/m0_57158496/article/details/120762101
浏览阅读:6.1k
点赞:1 收藏:10
截屏图片
(此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)
精品文章:
- 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
- OPP三大特性:封装中的property
- 通过内置对象理解python'
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室
◆ Python 入门指南【Python 3.6.3】
好文力荐:
- 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
- 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
- 靠谱程序员的好习惯
- 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归
CSDN实用技巧博文:
- 8个好用到爆的Python实用技巧
- python忽略警告
- Python代码编写规范
- Python的docstring规范(说明文档的规范写法)