Python 装逼篇之 Ellipsis

刚才无聊时折腾了一个高端大气上档次的等差数列生成器,演示结果如下:

>>> maker = ProgressionMaker()>>> maker[1, 2, ..., 9][1, 2, 3, 4, 5, 6, 7, 8, 9]>>> maker[6, 13, ..., 34][6, 13, 20, 27, 34]

虽然看上去很厉害的样子,但其实没什么技术含量……先来介绍一下如何处理这种语法,其实只用到 object.__getitem__ 方法而已:

>>> class Test(object):...     def __getitem__(self, key):...         print key... >>> test = Test()>>> test[1]1>>> test[:]slice(None, None, None)>>> test[1:9]slice(1, 9, None)>>> test[1:3:5]slice(1, 3, 5)>>> test[1, 5](1, 5)>>> test[1, 2:3, :4:, ::](1, slice(2, 3, None), slice(None, 4, None), slice(None, None, None))>>> test[1, 2, ..., 9, 10](1, 2, Ellipsis, 9, 10)

基本上没什么神奇的,除了最后一个的省略号变成了 Ellipsis。这玩意也没啥好解释的,就是 Python 的一个常量而已。所以开头写的那个 ProgressionMaker 也没啥神奇的,可以这样简单粗暴地实现:

class ProgressionMaker(object):    def __getitem__(self, key):        if isinstance(key, tuple) and len(key) == 4 and key[2] is Ellipsis:            return range(key[0], key[-1] + 1, key[1] - key[0])

至于错误处理、支持更多参数(例如 maker[3, 7, 11, …, 31, …, 55, 59] 之类的),或是同时支持等比数列之类的我就不管了,有兴趣的可以自己实现。好了,本次装逼教程到此为止,我先睡觉了。

Python 装逼篇之 Ellipsis

相关文章:

  • 【算法】直接插入排序C语言实现
  • 嵌入式 FAAC1.28 在海思HI3518C/HI3518A平台linux中的编译优化
  • 你感兴趣的文章:

    标签云:

    亚洲高清电影在线, 免费高清电影, 八戒影院夜间, 八戒电影最新大片, 出轨在线电影, 午夜电影院, 在线影院a1166, 在线电影院, 在线观看美剧下载, 日本爱情电影, 日韩高清电影在线, 电影天堂网, 直播盒子app, 聚合直播, 高清美剧, 高清美剧在线观看 EhViewer-E站, E站, E站绿色版, qqmulu.com, qq目录网, qq网站目录,