is == 区别

is 比较对象内存地址(对象的id)

== 比较值 (eq)

Python的方法解析

优先级从高到低为:1. 实例本身(instance)2. 类(class)3. super class, 继承关系越近, 越先定义, 优先级越高.

编译型、解释型

先编译成可执行文件,再运行。

在运行期间编译。

垃圾回收

引用计数。

import sys

a = []

# 两次引用,一次来自 a,一次来自 getrefcount
print(sys.getrefcount(a))

def func(a):
    # 四次引用,a,python 的函数调用栈,函数参数,和 getrefcount
    print(sys.getrefcount(a))

func(a)

# 两次引用,一次来自 a,一次来自 getrefcount,函数 func 调用已经不存在
print(sys.getrefcount(a))

########## 输出 ##########

2
4
2

通过 “标记-清除” 解决容器对象可能产生的循环引用问题;(双向链表可达性分析)

通过 “分代回收” 以空间换时间的方法提高垃圾回收效率

生成器

不立刻产生全部结果,节省内存,效率高。Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

两种方法:1. 把列表生成器的 [] 改成括号 2. yield (函数中包含 yield)。每次从 yield 执行,遇到 yield 返回。通过 StopIteration 里的 value ,获取返回值

g = (x * x for x in range(10))

def fib(n):
    i, a, b = 0 , 0, 1
    for i in range(n):
        yield b
        a, b = b, a+ b
    return

for n in fib(5):
    print(n)

g = fib(5)
while True:
    try:
        x = next(g)
        print("g:", x)
    except StopIteration as e:
        print("return value", e.value)
        break

迭代器 能通过next 访问值的对象: