当前位置: 首页 > news >正文

全能单行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 学习个人备忘录
  • 好文力荐、 老齐教室
等风来,不如追风去……


超高浓缩“复杂”逻辑lambda
全能单行url解码器
(体格虽小功用不减正常形态书写代码)


本文质量分:

97 97 97

本文地址: 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 函数介绍

  1. decode_url

    • 功能:解码 URL 中的所有百分比编码字符。
    • 逻辑:通过分割 URL 并检查每个编码块,将其从十六进制转换为对应的字符。
  2. decode_url_20

    • 功能:与 decode_url 类似,但特别保留空格编码 %20 不进行解码。
    • 逻辑:在解码过程中,如果遇到 %20 编码,则将其保留为原始形式。

3.2 代码亮点

  • lambda 表达式:使用匿名函数来简化代码结构。
  • 列表推导式:一行代码完成复杂的字符串处理。
  • 条件判断:通过条件表达式来决定是否解码每个编码块。

3.3 使用示例

  代码末尾提供了两个 URL 示例,分别通过 decode_urldecode_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篇。

  1. 让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)

  2. 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)

  3. 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)

  4. 个人信息提取(字符串)
    地址: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)

  5. 罗马数字转换器|罗马数字生成器
    地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    浏览阅读:8.2k
    收藏:3 
    (本篇笔记于2022-01-19 23:26:42首次发布,最后修改于2022-01-21 18:37:46)

  6. 统计字符串字符出现的次数
    地址: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)

  7. Python字符串居中显示
    地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    浏览阅读:8.0k
    点赞:1 收藏:12 评论:1
  8. 回车符、换行符和回车换行符
    地址: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)

  9. python清屏
    地址:https://blog.csdn.net/m0_57158496/article/details/120762101
    浏览阅读:6.1k
    点赞:1 收藏:10 

推荐条件 阅读量突破6.00k
(更多热博,请点击蓝色文字跳转翻阅)

  • 截屏图片
    在这里插入图片描述
      (此文涉及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规范(说明文档的规范写法)


http://www.mrgr.cn/news/79237.html

相关文章:

  • 面试常见-Java 原生实现常见数据结构
  • Cocos Creator 开发微信小游戏分包
  • Python头歌编程练习
  • Hive3.X——异常处理Could not create ServerSocket on address 0.0.0.0/0.0.0.0:10000
  • JS的async 和 await
  • asp.net老项目运维,出现的问题6之数据库
  • ainiworth 在分布式目标的方程中 与正常互易性可以形成的方程不同 多引入了协方差元素未知 但可解,因为此时只有一个串扰参数且已经解出来了
  • vue3 vite ts day1
  • C#—交错数组
  • 12.05排错日志
  • CTFshowPHP特性
  • STL算法之merge sort
  • 【Python教程】Python基础篇之历史
  • 决策树:ID3、C4.5和CART特征选择方式
  • EasyExcel注解使用
  • 安装 Zookeeper 和 Kafka
  • 【LLMs】用LM Studio本地部署离线大语言模型
  • Python酷库之旅-第三方库Pandas(259)
  • 什么是IndexedDB?有什么特点
  • 【代码随想录day49】【C++复健】 99. 岛屿数量dfs;99. 岛屿数量bfs; 100. 岛屿的最大面积
  • 青岛鼎信Java开发面试题及参考答案
  • 思科模拟器路由器的基本配置
  • 【Pip】配置和优化 `pip` 安装源:提升 Python 包管理体验的全面指南
  • 操作系统之内存管理
  • 我们来学webservie - WSDL
  • 嵌入式蓝桥杯学习5 定时中断实现按键