189 8069 5689

一段代码,告诉你什么是装饰器、可调用类、自定义运算符、函数式编程

话不多说,先看代码:

站在用户的角度思考问题,与客户深入沟通,找到瑞丽网站设计与瑞丽网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、网站设计、企业官网、英文网站、手机端网站、网站推广、域名注册、网页空间、企业邮箱。业务覆盖瑞丽地区。

要是你能一下子就看懂,那说明你已经是 Python 高手了。

要是没看懂,我来解说一下(我自己当时也是仔细研究了一番,才明白)。

首先 F 是一个类,这个类有三个魔法函数:

  • __init__ 这就是个普通的初始化函数,没啥特别的
  • __call__ 当一个实例/对象被当作函数调用时,这个函数会自动调用,比如 my_f = F() ,那么 my_f(*args,**kwargs) 时就会调用这个函数。这里 __call__ 返回的是一个函数,因此可以推断出 self.f 是一个可调用的函数。
  • __gt__ 这是个大于号的自定义运算符,当两个对象比较时,就会调用这个函数,比如说 a > b 就相当于调用 a.__gt__(b)。

接下来,我们看到:

@F
def add_two(i):
return i+2

看到 @ 就要想到装饰器,类 F 实现了 __call__ 方法,因此可以当作装饰器。

装饰以后,add_two 就是类 F 的对象:

>>> add_two
<__main__.F object at 0x7f81cbaa7790>
>>>

add_two(i) 就相当于 F(add_two).__call__(i)

接下来的代码:

@F
def divide_3_floor(i):
return i // 3

仍然是一个被装饰的函数, 装饰以后 divide_3_floor 就是类 F 的对象

>>> divide_3_floor
<__main__.F object at 0x7f81cb8687f0>

divide_3_floor(i) 就相当于 F(divide_3_floor).__call__(i)

接下来的代码:

s = F(str) 

说明 s 就是一个 F 的对象,s(i) 就是 s.__call__(i) ,因为 self.f = str,因此,s.__call__(i) 其实就是 str(i),可以将一个变量转化为字符串。

接下来的代码比较精彩:

f = add_two > divide_3_floor > s

要知道 a > b > c 是链式运算符,展开后是 a > b and b > c, 并不是 (a>b)>c,可以参考前文不可思议,Python 的链式操作竟然可以这样

这里的 f,我给你展开下:

f = add_two > divide_3_floor and  divide_3_floor > s

其中 add_two > divide_3_floor 就会调用 add_two.__gt__(divide_3_floor) 返回的就是函数:divide_3_floor(add_two(*args,**kwargs))。

同样的道理:divide_3_floor > s 返回的是 str(divide_3_floor(*args,**kwargs))

因此 f(7) 就是 :

divide_3_floor(add_two(7)) and str(divide_3_floor(7))

其实就是 :

>>> divide_3_floor(add_two(7)) and str(divide_3_floor(7))
'2'
>>> 3 and '2'
'2'
>>>

Python 里面 A and B 返回的总是 B:

>>> x = object()
>>> y = object()
>>> x and y

>>> y

>>> x

>>>

因此 3 and '2' 返回的结果是 '2'。

你看明白了吗?


当前题目:一段代码,告诉你什么是装饰器、可调用类、自定义运算符、函数式编程
本文路径:http://www.cdxtjz.cn/article/djhiosc.html

联系我们

您好HELLO!
感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
  • 电话:028- 86922220 18980695689
  • 商务合作邮箱:631063699@qq.com
  • 合作QQ: 532337155
  • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

小谭建站工作室

成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

小谭观点

相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。