摘要: 一、生成器的回溯(Generator Traceback) 对于逐步得到结果的复杂递归算法,非常适用生成器来实现。 要在不使用生成器的情况下实现这些算法,通常必须通过额外的参数来传递部分结果,让递归能够接着往下计算。 通过使用生成器,所有的递归调用都只需生成其负责部分的结果。 二、问题 八皇后:你需 阅读全文
posted @ 2018-06-07 23:55 无证骑士 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 一、生产器的方法 在生成器开始运行后,可使用生成器和外部之间的通信渠道向它提供值。这个通信渠道包括如下两点: 外部世界:外部世界可访问生成器的方法send,这个方法类似next,但接受一参数(要发送的“信息”,可以是任何对象)。 生成器:在挂起的生成器内部,yield可能用作表达式而不是语句。换言之 阅读全文
posted @ 2018-06-07 21:06 无证骑士 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 虽然生成器可以让你编写出优雅的代码,但它并不是不可或缺的。 生成器是一种使用普通函数语法定义的迭代器。 例1:创建一个将嵌套列表展开的函数 输出: 1 2 3 4 当然我们可以将for循环换成: 输出:[1, 2, 3, 4] 例2:递归生成器 处理递归时,有两种可能:基线条件和递归条件。 基线条件 阅读全文
posted @ 2018-06-07 00:10 无证骑士 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 迭代(iterate):意味着多次重复,类似循环。 迭代器两个基本方法: __iter__:返回一个迭代器,包含__next__方法的对象,调用这个方法时可以不提供参数。 __next__:调用该方法时,迭代器应返回其下一个值,如果迭代器没有可供返回的值,就引发StopIteration异常。 迭代 阅读全文
posted @ 2018-06-06 00:37 无证骑士 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 检查对象是否类似于字符串,最简单、最快捷的方式是: 尝试将对象与一个字符串拼接起来,并检查是否会引发TypeError异常, 阅读全文
posted @ 2018-06-06 00:15 无证骑士 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 静态方法和类方法的创建: 将它们分别包装在staticmethod和classmethod类的对象中。 静态方法的定义中没有参数self,可直接通过类来调用。 类方法的定义中包含类似于self的参数,通常被命名为cls。对于类方法,也可通过对象直接调用,但参数cls将自动关联到类。 示例: 像这样手 阅读全文
posted @ 2018-06-04 22:37 无证骑士 阅读(3147) 评论(0) 推荐(0) 编辑
摘要: 通过调用函数property并将存取方法作为参数(获取方法在前,设置方法在后)创建一个特性,然后将名称size关联到这个特性。 这样,就能以同样的方式对待width、height和size,而无需关心它们是如何实现的。 输出: (10, 5)150 100 实际上,调用函数property时,还可不 阅读全文
posted @ 2018-06-04 21:19 无证骑士 阅读(219) 评论(0) 推荐(0) 编辑
摘要: property(特性),并不是一个函数,而是一个类。 它的实例包含一些魔法方法,而所有的魔法方法都是由这些方法完成的。这些魔法方法为: __get__ \ __set__ \ __delete__ 它们一道定义了所谓的描述符协议。 描述符的独特之处在于其访问方式:例如,读取属性(具体来说,在实例中 阅读全文
posted @ 2018-06-04 20:58 无证骑士 阅读(118) 评论(0) 推荐(0) 编辑
摘要: continue :结束当前迭代,并跳到下一次迭代开头 输出: 0for循环第1次if循环,第1次for循环第2次for循环第3次for循环第4次1for循环第1次if循环,第1次for循环第2次for循环第3次for循环第4次2for循环第1次if循环,第1次for循环第2次for循环第3次for 阅读全文
posted @ 2018-06-03 23:43 无证骑士 阅读(9782) 评论(0) 推荐(0) 编辑
摘要: break :跳出循环,我想知道跳出的循环范围是多少,是直接跳出所有循环,还是有限个数的循环 输出: 例2: 输出: 可见break跳出的是5-8的一个for+if循环 阅读全文
posted @ 2018-06-03 23:21 无证骑士 阅读(7257) 评论(0) 推荐(0) 编辑