学了8年Python,被这8行炫技代码惊呆了!

SQL中CASE语句的四大核心用法与性能避坑指南 CASE语句是SQL中实现条件逻辑的基础能力,本质并非编程式if-else,而是查询执行计划中Projection阶段的‘条件投影器’。其原理在于静态编译、并行求值,严格受限于所在子句(SELECT/WHERE/GROUP BY/HAVING)的数据可见性与计算时机。技术价值体现在动态分组、条件过滤、实时数据清洗和业务标签生成等关键场景,广泛应用于BI报表开发、用户分层建模、电商大促看板及金融风控分析。本文聚焦CASE在真实工程中的高频误用——如HAVING中未聚合列引用、搜索CASE替代简单CASE导致性 阅读详情

47c4efb98ad723de60d0cfd52d847adb.png

我们今天来看一段炫技代码。它可以把任何能接收两个参数的函数定义成一个特殊的运算符。

例如,我们知道Python里面的range函数,最少可以接收1个参数,最多能够接收3个参数。当只有两个参数的时候,格式为range(开始, 结束),从开始数字到结束数字逐次加1,左闭右开。使用今天的方法,可以把它的写法改为开始 |到| 结束,如下图所示:

88ec32627678d96ba993cfcc600da8b3.png

又比如,urllib.parse.urljoin可以把域名和一个相对路径拼接起来: urljoin(域名, 相对路径),我们也可以改写成如下图所示的格式:

81796cacb6ee868734f8373d03ea2fa6.png

这种炫技有余,实用不足的功能是怎么实现的呢?其实原理非常简单,只有8行代码:

from functools import partial

class Change(object):
    def __init__(self, func):
        self.func = func
    def __or__(self, other):
        return self.func(other)
    def __ror__(self, other):
        self.func = partial(self.func, other)
        return self

这里就涉及到一个盲点和两个真正的知识点。这个盲点就是,你可能以为 |到|是一个字符,但是它是3个字符;你可能会把|拼接|看做一个整体,但是它实际上是3个部分:左边的|、拼接和右边的|。

我们把空格加上,就很明显了:

9f9b4f9b42dff01846a631a68f735067.png

两个真正的知识点,就是__or__和__ror__这两个魔术方法和偏函数partial。而Change本身就是一个普通的类而已,__or__和__ror__定义了这个类的实例在左侧遇到|时,右侧遇到|时的具体行为。

我们一个一个来讲。首先是__or__。它定义了实例的右侧遇到|时的具体行为。例如,我们用一个简单的代码来进行测试:

class Test:
    def __init__(self, num):
        self.num = num
    def __or__(self, other):
        print(f'我右边有一个东西,它是:{other}')

x = Test(100)
x | 55

运行效果如下图所示:

e338230c4c320dd1cd88c36a9ed6b1eb.png

但如果你把竖线放在左边,他就会报错,如下图所示:

58e663f50b896c6b34ab4de494361bc9.png

而__ror__就是用来定义|在实例左边的时候,它的行为:

8224d3de082cf9f39fec6cf7f053c04d.png

所以,我们最开始的例子中,2 |到| 10,实际上应该理解为:

  1. 到是Change(range)返回的实例

  2. 2 | 到 生成一个中间对象,我们假设它是x

  3. x | 10 生成结果

在我们演示的例子中,2 | 到首先进入了Change类的__ror__方法中:

def __ror__(self, other):
        self.func = partial(self.func, other)
        return self

其中,一开始的self.func就是我们在初始化实例Change(range)时传入的参数range。所以partial(self.func, other)等价于partial(range, 2)。关于偏函数partial,大家可以看我这篇文章:偏函数:在Python中设定默认参数的另一种办法。简单来说,使用偏函数,可以给一个真正的函数传一部分参数,过一会再补剩下的参数。

可能大家在日常的开发者,很少会让一个实例方法返回self。关于这个写法,大家可以看我的这一篇文章:一日一技:在Python里面实现链式调用。也就是说,1 | 到返回的,依然是Change类的一个实例,我们简称它为x。这个实例的属性self.func的值是partial(range, 2)。

接下来,x | 10,调用的是__or__方法,于是,此时执行的是partial(range, 2)(10)。偏函数的参数补全了,于是它里面的range真正运行了起来,成为了range(2, 10)。

至此,这个Change类我们就解析透了。大家知道,在Python里面,魔术方法是有很多的,如果你不想用|,你还可以用其它的,例如:

45a047a776a43bb12d1b775ad6f4124a.png

或者:

81306a6cc68585b847049756f7ee4da4.png

或者:

3f91d8e6ea368daddd1920d2b371bf6b.png

同时,这个Change类,你甚至可以直接当做装饰器来使用。任何能够接收两个参数的函数,都能使用这个装饰器。例如:

b7c6be9d032551272864c915bef1f6d8.png

最后总结一下。大家都知道,我是非常反对在工作代码中炫技的,因为炫技的写法很难读,很难维护。今天这个炫技的方法,虽然我也不推荐大家用在工作中,但是它短短8行代码里面,包含了很多个知识点,这就值得大家玩一玩了。


最后送大家20000个红包封面

感谢大家对「菜鸟学Python」的5年的支持

悄悄说一下,我觉得还蛮漂亮的。

aa7983f7fe977f49e28aa75e511f5806.png

527c03288e257ab978b7585424289e66.png

扫码领取即可


 
推荐阅读:
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案

点阅读原文,看200个Python案例!

zynq+ad9361 petalinux使用官方IIO示波器调试记录 1ad9361 iio示波器 阅读详情

相关推荐

VBA中如何使用Edge内核Browser?

在微软宣布停止对IE的支持后,许多使用VBA中Web Browser的用户遇到了困境,因为Web Browser使用的IE内核。然而微软并没有给出支持Edge的新版Web Browser,网上许多第三方的库也不够完善。经过调研,libEdge可以较好的和VBA集成,实现在Excel中打开Browser,甚至能够通过执行js代码,获取web页面的信息。项目需要WebView2Loader.dll和LibEdge.dll两个库,区分x86和x64版本。

金木AI 2398

11 个 Python 教程来炫耀你的高级技能

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。,如有侵权,请联系删除。或者更可爱的方式:🙂。

m0_58477260的博客 1122

人工智能-CS188 Project 2: Multi-agents

一、项目介绍 项目介绍网页 项目代码下载 本项目是采用Berkeley的CS188课程内容实习二的内容,在这个项目中,我们将为经典版本的Pacman 设计自动算法,包括幽灵。在此过程中,我们将实现 minimax 和 expectimax 搜索并尝试评估函数设计 完成作业只需要完成5个题目,按照项目介绍的步骤进行完成,主要是在multiAgents.py文件中进行补充代码 二、代码详情 1、Question1:Reflex Agent 略 2、Question2:Minimax 套用ppt上的minm

xiten的博客 8285

Python 炫技操作:条件语句的七种写法

我这里准备了详细的Python资料,除了为你提供一条清晰的学习路径,我甄选了最实用的学习资源以及庞大的实例库。短时间的学习,你就能够很好地掌握爬虫这个技能,获取你想得到的数据。

m0_48891301的博客 125

时间卷积网络(TCN):结构+pytorch代码

文章目录TCNTCN结构1-D FCN的结构因果卷积(Causal Convolutions)膨胀因果卷积(Dilated Causal Convolutions)膨胀非因果卷积(Dilated Non-Causal Convolutions)残差块结构pytorch代码讲解 TCN   TCN(Temporal Convolutional Network)是由Shaojie Bai et al....

Leon_winter的博客 11万+

Python验证码识别神器ddddocr:5分钟搞定网站登录自动化(附完整代码)

本文详细介绍了如何使用Python开源库ddddocr快速实现验证码识别,结合Selenium完成网站登录自动化。ddddocr作为轻量级OCR工具,支持多种验证码类型,识别速度快且准确率高,特别适合自动化测试和爬虫开发。文章包含完整代码示例,从环境配置到实战应用,帮助开发者5分钟内实现验证码破解。

sprite的博客 798

Python|十五个超级炫酷的代码

视频是动态的,不信你运行试试。 2 温柔的狮子 4 520+爱心 5 鲜艳的玫瑰 6 一颗小爱心 7 一个呆萌的皮卡丘 8 小猪佩奇 9 放烟花 10 小呆呆小黄人 11 十里桃花飘落 12 炸死小坏蛋 13 哆啦A梦 14 一个微信表情包 15 秀死他......

weixin_61181717的博客 17万+

Weka学习笔记01:初探Weka世界

下载、安装和启动Weka、Weka数据格式

howard2005的专栏 1471

轰炸小程序

【代码】轰炸小程序。

2301_78398877的博客 570

CondaHTTPError: HTTP 404 not found for url https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs解决方案

本文主要介绍了CondaHTTPError: HTTP 404 not found for url https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main解决方案,希望能对使用xx的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 17万+

Sqlserver2012评估期已过问题解决(启动数据库服务报错1705都是同样的问题,数据库过期未激活)

一、背景: 因为之前安装sqlserver2012忘记输入序列号,如今出现评估期已过的问题,前几天忙活半天,才解决,发现网 上叙述都非常凌乱,并且仅仅有大意,有的非常难操作。所以把我操作的过程和大家交流分享: 一定要有序列号的输入。不然会有很多其它的麻烦出现: 二、问题解决: 第一步:进入SQL2012配置工具中的安装中心。 第二步:再进入左側维护选项界面,然后选择选择版本号升级。 ...

堂前燕的博客 3267

11 个 Python 技巧来炫耀你的高级技能!

reduce()方法也有两个参数,一个是函数,另一个是Iterable,它将函数应用于序列,该函数必须接收两个参数,reduce 继续结果并与序列的下一个元素执行累积计算。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。Python 有一个惊人的内置函数,叫做 zip。map()函数接收两个参数,一个是函数,另一个是Iterable,它依次将初始化函数应用于序列的每个元素,并将结果作为新的迭代器返回。

m0_59236602的博客 1768

35、使用 Geo 创建 GitLab 的分布式只读副本

本文详细介绍了如何使用GitLab Geo功能创建分布式只读副本,涵盖数据库主从配置、SSH密钥查找方式更改、通过Web UI添加从节点、激活哈希存储及状态检查等关键步骤。同时提供了常见问题解答和配置流程图,帮助用户快速部署并维护Geo集群,实现跨地域的高效数据同步与高可用架构。

chair的专栏 81

炫技:拼接列表、破碎二维数组——Python sum()函数隐藏技能花式玩法

【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……   自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。             —— 华罗庚 My 优快云主页、My HOT博、My Python 学习个人备忘录 好文力荐、 老齐教室 sum()拼接列表、破碎二维数组—— Pyth

m0_57158496的博客 1089

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python 黑魔法:8 个隐藏技巧让你的代码酷炫起来

*输出结果:****输出结果:****输出结果:****输出结果:**感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。👉(安全链接,放心点击)Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。工具都帮大家整理好了,安装就可直接上手!

Saki_Python的博客 2068

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

python进阶,16个必须掌握的炫技操作

python进阶,16个必须掌握的炫技操作

2301_78095812的博客 408

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Python 十五个炫酷代码

视频是动态的,不信你运行试试。

Lamb的博客 2万+

Python 炫技操作(九):调用函数的九种方法

系列导读 Python 炫技操作(一):条件语句的七种写法 Python 炫技操作(二):合并字典的七种方法 Python 炫技操作(三):判断是否包含子串的七种方法 Python 炫技操作(四):连接列表的八种方法 Python 炫技操作(五):海象运算符的三种用法 Python炫技操作(六):花式导包的八种方法 Python 炫技操作(七):模块重载的五种方法 Python 炫技操作(八):安装包的八种方法 方法一:直接调用函数运行 这种是最简单且直观的方法 def task(): print(

王炳明 3374

chatgpt赋能python:10个好玩的Python代码-让编程更有趣!

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

laod112的博客 3万+

Python|十五个超级炫酷代码

​​​​​​​ 视频是动态的,不信你运行试试。 2 温柔的狮子 4 520+爱心 5 鲜艳的玫瑰 6 一颗小爱心 7 一个呆萌的皮卡丘 8 小猪佩奇 9 放烟花 10 小呆呆小黄人 11 十里桃花飘落 12 炸死小坏蛋 13 哆啦A梦 14 一个微信表情包 15 秀死他.........

weixin_46039719的博客 10万+

python炫酷特效代码简单,python制作的炫酷动画

urtle.setup(a,b,c,d)a,b两个参数分别控制画布的宽和高,c,d属性控制画布的位置;turtle.screesize(a,b,c)a,b控制画布的宽和高,C控制画布的颜色;例如:turtle.setup(800,400,200,200)//创建一个宽为800像素高为400像素,坐标为(200,200)的画布梁肆羡turtle.screensize(800,400,'green')//创建一个宽为800像素,高为400像素,颜色为绿色的雹派画布。

chatgpt001的博客 4507

总结整理Python一些炫酷的代码(不断更新ing)

精确识别图片上的文字代码 from kkb_ocr import ocr_word url = 'http://此处输入识别对象的图片网址.jpg' ocr_word(url)

Cheer_Up250的博客 9083

python炫技巧

python炫技巧

weixin_56531849的博客 479

python炫酷特效代码简单,python绘画酷炫图片代码

player = int(input(“请出拳 石头(1)/剪刀(2)/布(3)”))computer = 1if((player == 1 and computer == 2) or(player == 2 and computer == 3) or(player == 3 and computer == 1)):print(“欧耶!在相关的一些代码的编辑软件里面,最主要就是要根据一些语法去创立一些能够进行编译的代码,然后就能够把它进行保存,然后去运行出对应的一个效果图。

神经网络爱好者 5541

python炫酷烟花表白源代码,html代码烟花特效python

image = Image.open("./image1.jpg")#背景照片路径自行选择,可以选择酷炫一点的,看起来效果会#更好。大家好,给大家分享一下python绘制烟花特定爆炸效果,很多人还不知道这一点。本文实例为大家分享了python实现烟花小程序的具体代码,供大家参考,具体内容如下。然后就可以运行了,在代码中有一个背景照片部分,路径可自行选择!以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

chatgpt001的博客 992

今天给大家带来Python炫酷爱心代码

今天给大家带来Python炫酷爱心代码

Python单行客的博客 2万+
上一篇: 删库跑路的「faker.js」又能用了,8位开发者维护新项目!
下一篇: 腾讯公布 23 年前第一间办公室照片,太有年代感了
菜鸟学Python
博客等级 码龄9年 8062粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值