首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 炫技操作:创造“新语法”的黑科技

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

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

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

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

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

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

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

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

运行效果如下图所示:

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

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

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

是返回的实例

生成一个中间对象,我们假设它是

生成结果

在我们演示的例子中,首先进入了类的方法中:

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

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

接下来,,调用的是方法,于是,此时执行的是。偏函数的参数补全了,于是它里面的真正运行了起来,成为了。

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

或者:

或者:

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

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20220209A01SMA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券