上面代码中a is b的效果是True但c is d的效果是False,这一点的确让人费解。CPython表明器出于性能优化的考虑,把频仍使用的整数对象用一个叫small_ints的对象池缓存起来造成的。small_ints缓存的整数值被设定为[-5, 256]这个区间,也就是说,在任何引用这些整数的地方,都不须要重新创建int对象,而是直接引用缓存池中的对象。假如整数不在该范围内,那么即便两个整数的值类似,它们也是差别的对象。
CPython底层为了进一步提升性能还做了另一个设定,对于同一个代码块中值不在small_ints缓存范围内的整数,假如同一个代码块中已经存在一个值与其类似的整数对象,那么就直接引用该对象,否则创建新的int对象。须要大家留意的是,这条规则对数值型适用,但对字符串则须要考虑字符串的长度,这一点大家可以自行证明。 扩展:假如你用PyPy(另一种Python表明器实现,支持JIT,对CPython的缺点进行了改良,在性能上优于CPython,但对三方库的支持略差)来运行上面的代码,你会发现所有的输出都是True。
标题005:Lambda函数是什么,举例说明的它的应用场景。
super()函数的使用。在使用super函数时,可以通过super(类型, 对象)来指定对哪个对象以哪个类为起点向上搜刮父类方法。以是上面B类代码中的super(B, self).who()体现以B类为起点,向上搜刮self(D类对象)的who方法,以是会找到C类中的who方法,由于D类对象的MRO列表是D --> B --> C --> A --> object。
上面代码中a is b的效果是True但c is d的效果是False,这一点的确让人费解。CPython表明器出于性能优化的考虑,把频仍使用的整数对象用一个叫small_ints的对象池缓存起来造成的。small_ints缓存的整数值被设定为[-5, 256]这个区间,也就是说,在任何引用这些整数的地方,都不须要重新创建int对象,而是直接引用缓存池中的对象。假如整数不在该范围内,那么即便两个整数的值类似,它们也是差别的对象。
CPython底层为了进一步提升性能还做了另一个设定,对于同一个代码块中值不在small_ints缓存范围内的整数,假如同一个代码块中已经存在一个值与其类似的整数对象,那么就直接引用该对象,否则创建新的int对象。须要大家留意的是,这条规则对数值型适用,但对字符串则须要考虑字符串的长度,这一点大家可以自行证明。 扩展:假如你用PyPy(另一种Python表明器实现,支持JIT,对CPython的缺点进行了改良,在性能上优于CPython,但对三方库的支持略差)来运行上面的代码,你会发现所有的输出都是True。
标题005:Lambda函数是什么,举例说明的它的应用场景。
super()函数的使用。在使用super函数时,可以通过super(类型, 对象)来指定对哪个对象以哪个类为起点向上搜刮父类方法。以是上面B类代码中的super(B, self).who()体现以B类为起点,向上搜刮self(D类对象)的who方法,以是会找到C类中的who方法,由于D类对象的MRO列表是D --> B --> C --> A --> object。