随笔分类 -  流畅的Python

摘要:不仅 Python 函数是真正的对象,任何 Python 对象都可以表现得像函数。为此,只需实现实例方法 __call__。 ❶ __init__ 接受任何可迭代对象;在本地构建一个副本,防止列表参数的意外副作用。 ❷ shuffle 定能完成工作,因为 self._items 是列表。 ❸ 起主要 阅读全文
posted @ 2019-04-08 18:25 皮皮嘉 阅读(162) 评论(0) 推荐(0)
摘要:我们把讨论集中在增量加法(+=)上,但是这些概念对 *= 和其他增量运算符来说都是一样的。 += 背后的特殊方法是 __iadd__ (用于“就地加法”)。但是如果一个类 没有实现这个方法的话,Python 会退一步调用 __add__ 。考虑下面这 个简单的表达式: 如果 a 实现了 __iadd 阅读全文
posted @ 2019-04-02 00:20 皮皮嘉 阅读(179) 评论(0) 推荐(0)
摘要:元祖拆包: 元组拆包可以应用到任何可迭代对象上,唯一的硬性要求是,被可迭代对象中的元素数量必须要跟接受这些元素的元组的空档数一致。除非我们用 * 来表示忽略多余的元素。 最好辨认的元组拆包形式就是平行赋值,也就是说把一个可迭代对象里 的元素,一并赋值到由对应的变量组成的元组中: 另外一个很优雅的写法 阅读全文
posted @ 2019-03-31 10:26 皮皮嘉 阅读(310) 评论(0) 推荐(0)
摘要:标准的列表推导写法: 通常的原则是,只用列表推导来创建新的列表,并且尽量保持简短。如果列表推导的代码超过了两行,你可能就要考虑是不是得用 for 循环重写了。就跟写文章一样,并没有什么硬性的规则,这个度得你自己把握。 filter 和 map 合起来能做的事情,列表推导也可以做,而且还不需要借助难以 阅读全文
posted @ 2019-03-30 22:11 皮皮嘉 阅读(165) 评论(0) 推荐(0)
摘要:如何使用特殊方法: 首先明确一点,特殊方法的存在是为了被 Python 解释器调用的,你自己并不需要调用它们。也就是说没有 my_object.__len__() 这种写法, 而应该使用 len(my_object)。在执行 len(my_object) 的时候,如果 my_object 是一个自定 阅读全文
posted @ 2019-03-29 22:05 皮皮嘉 阅读(175) 评论(0) 推荐(0)