微信公众号文章推荐,好文章微信公众号大全,热门微信订阅号文章,自媒体文章爆文一网打尽。

Nexus游戏社群
Nexus游戏社群

Python进阶课程笔记(四)

2017年10月12日 20:53 来源 : Nexus游戏社群

内容概要:

1. Nexus游戏社群 2017-10-12 我们继续来看那些Callable的Python类型。

2. 思考: 对于用户自定义的类型呢,效率哪个更高。

3. 不过呢,这点时间差别比较小,而且直接使用类似__add__的方法调用对于代码的可读性维护性会带来一定的困扰,因此大部分情况下,直接使用操作符会更好。

Nexus游戏社群 2017-10-12

我们继续来看那些Callable的Python类型。

5. Class method和Static method

这部分其实不能算Python的进阶内容了,可以说是基础内容。在初学Python的时候我就有过一些疑惑,@classmethod和@staticmethod修饰的函数看上去似乎没有什么区别,都是通过类来调用(当然对象也可以)。本小节内容稍微看一下两者的区别,首先是class method,因为比较简单,直接看代码例子和结果吧。

运行结果如下:

可以看到,我们把A.foo打印处理,是一个bound method对象,通过对象a来访问也是一样的,我们学着bound method的方式来分析看,m1和m2的id是不同,在理解了第4小节的内容之后这里就比较容易理解了。

思考: Class method是绑定了什么东西的bound method呢?

通过查看bound method对象的im_self属性就可以看到它所绑定的对象了,我们添加一些代码来分析。

结论: Class Method是绑定了类对象的bound method。

需要额外注意的是,def foo(self):这里对于class method的定义是不好的,具有一定的误导性,这里的self不再是类的实例对象了,而是一个class对象,因此通常写成def foo(cls):或者def foo(klass)更清晰。

Static method是否也是bound method呢?我们直接来看分析代码。

输出结果为:

结论: Static method就是在类的命名空间中的一个普通函数。

6. Functors和Operators

在C++中,重写了()操作符的类,它们实例化的对象就是一个functor,在Python中,重写了__call__方法的类的实例对象是一个functor。这里具体的内容就不再详述了,属于Python中比较基本的内容。

类似的,关于操作符(Operators),在Python中也是重载一些对应函数,比如+就是重载__add__函数。这里需要说的是一个性能问题,我们来看一个例子:

输出结果如下:

原理上,+的操作符是调用__add__方法来进行处理,那为什么直接调用__add__方法反而会慢呢?我们使用dis模块来看一下Python代码翻译成Python虚拟机的指令的区别。

输出结果如下:

dis模块的dis方法可以打印出传入函数的虚拟机指令,可以看到foo函数使用+,并没有调用__add__方法,而是用了一个BINARY_ADD指令来直接进行加法。这就是它比直接调用__add__方法快的原因。

总结:对于Python的内建类型,操作符比直接调用对应的函数要好,Python可能会使用对应的二进制操作进行优化。

思考: 对于用户自定义的类型呢,效率哪个更高?

我们来看例子的代码:

输出结果:

看上去,直接调用__add__方法反而更快一些,但是差别整体不大。这是因为+操作符会进行优化尝试,需要额外的时间消耗。不过呢,这点时间差别比较小,而且直接使用类似__add__的方法调用对于代码的可读性维护性会带来一定的困扰,因此大部分情况下,直接使用操作符会更好。

文末,感谢作者贾伟昊的供稿,本系列将在后面继续更新,请大家持续关注Nexus。如果您有任何独到的见解或者发现也欢迎后台联系我们,一起探讨。


本文「Python进阶课程笔记(四)」转载自网络,作者观点不代表本网站立场,如需处理请联系客服QQ邮箱

评论

Nexus游戏社群相关文章

Python进阶课程笔记(四)

Python进阶课程笔记(四)

我们继续来看那些Callable的Python类型。5. Class method和Static method这部分其实不能算Python的进阶内容了,可以说是基础内容。在初学Python的时候我就有

2017年10月12日 20:53
Python进阶课程笔记(三)

Python进阶课程笔记(三)

4. Bound Method和Unbound Method声明: 本系列文章中的所有内容都是基于Python 2.x版本的,原因是网易绝大部分项目都是在用2.x版本,笔者参与过的项目无论端游还是手游

2017年10月11日 18:44
《绝地求生》中那些让你窒息的骚操作!比开挂更刺激!

《绝地求生》中那些让你窒息的骚操作!比开挂更刺激!

《绝地求生》有着“老阴比大乱斗”之称,所以对于新入坑的玩家来说,“吃鸡”

2017年10月10日 18:28
大获苹果编辑青睐的一款经典解密游戏——《兵者》

大获苹果编辑青睐的一款经典解密游戏——《兵者》

自从IOS 11上线以后,App Store畅销榜的移除和苹果编辑推荐权

2017年10月09日 19:29
厉害了!Nexus 游戏说本期请到了两位游戏大牛,节后第一波充电赶紧约起来!

厉害了!Nexus 游戏说本期请到了两位游戏大牛,节后第一波充电赶紧约起来!

【Nexus 游戏说】是游戏开发者沙龙,我们会定期邀请游戏大牛为大家分享

2017年10月09日 19:29
游戏是怎么赚钱的——聊聊上瘾机制

游戏是怎么赚钱的——聊聊上瘾机制

今天我们聊聊游戏怎么让玩家上瘾。 为什么许多人玩王者荣耀无法自拔? 为什

2017年09月29日 18:22
UWA 优化日杭州站:为您的项目研发节省数月的优化时间

UWA 优化日杭州站:为您的项目研发节省数月的优化时间

【UWA优化日】是UWA不定期举办的线下技术交流活动,目前已在北、上、广

2017年09月28日 18:24
Unity手游开发札记——移动平台的天气系统实现

Unity手游开发札记——移动平台的天气系统实现

0. 牢骚 我发现,每个月的20+号是我有精力写博客的时间…… 这次项目

2017年09月27日 18:41
Rovio上市估值约10亿美元;Steam评测系统更新:专治恶评轰炸现象;绝地求生被网友吐槽

Rovio上市估值约10亿美元;Steam评测系统更新:专治恶评轰炸现象;绝地求生被网友吐槽

进击的怒鸟!!!《愤怒的小鸟》的开发商Rovio娱乐公司估值约10亿美元

2017年09月25日 18:30
记录日式游戏沉浮二十一载——TGS 21年辉煌特典!

记录日式游戏沉浮二十一载——TGS 21年辉煌特典!

导语 为期4天的2017东京电玩展(TOKYO GAME SHOW 20

2017年09月24日 18:23
你不知道的游戏和军事!Nexus和军武次位面要搞事请啦!

你不知道的游戏和军事!Nexus和军武次位面要搞事请啦!

9月22日,Nexus迎来了互联网军事类媒体第一名《军武次位面》徐恺的拜

2017年09月22日 21:20
Python进阶课程笔记(一)

Python进阶课程笔记(一)

这周听了三节Python进阶课程,有十几年的老程序给你讲课传授一门语言的

2017年09月22日 21:20
游戏是怎么赚钱的-聊聊挖坑

游戏是怎么赚钱的-聊聊挖坑

今天我们聊聊游戏怎么给玩家挖坑 今天这个文章不长,但是是游戏赚钱的一个深

2017年09月21日 18:25
IOS 11:全方位无死角详解新版 App Store中关于游戏的多处重大调整

IOS 11:全方位无死角详解新版 App Store中关于游戏的多处重大调整

导语 苹果此次对排行榜进行了明显的弱化和隐藏,畅销榜被取消。游戏受到青睐

2017年09月20日 19:17
2017 WePlay:我们打算承包你2017年10月的后几天

2017 WePlay:我们打算承包你2017年10月的后几天

2017年10月底,我们打算像平常一样,做点不平常的事。这个事情已经想了

2017年09月19日 20:30
《王者荣耀》Switch版明年上线;《绝地求生》同时在线人数突破130万;苹果发布会展示两款中国独立游戏

《王者荣耀》Switch版明年上线;《绝地求生》同时在线人数突破130万;苹果发布会展示两款中国独立游戏

9月14日,任天堂宣布《王者荣耀》海外版《Arena Of Valor》

2017年09月18日 20:30
游戏是怎么赚钱的——聊聊模仿

游戏是怎么赚钱的——聊聊模仿

今天我们继续讲讲游戏赚钱的事儿 一个团队,想要做一款赚钱的游戏,又没有特

2017年09月17日 20:30
教你避免创业路上的法律坑,后排自带资源

教你避免创业路上的法律坑,后排自带资源

前排提醒,文末有福利~ 2017年9月13号~~~ Nexus Spac

2017年09月14日 18:01
让无数玩家抓狂的数值策划到底是什么?

让无数玩家抓狂的数值策划到底是什么?

从入门到放弃,每个数值策划都是超人。 9月9日,杭州云鲲网络研发总监青蓝

2017年09月13日 22:15
第十届IPA大赛:独立游戏开发者参赛的八大理由

第十届IPA大赛:独立游戏开发者参赛的八大理由

近年来,随着独立游戏的日趋繁荣,国内独立游戏开发者和玩家数量迅速增长,一

2017年09月12日 23:10