在学习yiled的时候先了解:
y=func(x)这就是一个函数当一个函数没有返回值就相当于这个函数没有了结果一样没有意义
在python中没有使用返回值编译器会自动的在其后面加一个返回值None
可以这样理解: 在运行函数的时候可以看做一个独立运行的一个内存空间 运行就会有你想要的数据,return 就是在这些运行中的数据中拿去来放到一个更大的空间上面 return之后那个小的空间就没有了return出来的值 因为被拿出来了
def sample():
data = np.arange(1,19,1) -->数据1
data1 = [i for i in range(100)] -->数据2 -->这些数据都在内存空间
data2 = {i:i for i in range(20)} -->数据3
data3 = (i for i in range(21)) -->数据3
return data -->获得数据1 --->在内存空间中想要数据1然后将其拿出来
#形象点就是
[data,data1,data2,data3]-->内存空间
data -->拿出来
[data1,data2,data3]---->内存空间
普通的函数在return之后的语句就是不执行了 可以理解为一个函数的结尾 或者认为是一句函数的句号。
有了这方面的知识后:就会有一个问题当数据空间的数据都是想要的 但是每次返回的时候我只需要返回一个数据:
那么这样的话当我需要的时候就要写4个函数 而且函数每次调用的时候又会占用4个位置
这样操作即麻烦又占用资源自然不是一个python人想要的于是就引进了yield
我们不去思考yield是如何实现的只要考虑是如何使用的就可以了: python是一门面向对象的语言,那么一切都可以认为是对象
函数也是对象 使用拥有yield的函数称为generator 使用一个变量获得generator对象
然后使用next关键字运行generator对象 generator也是一个函数所以也在内存中运行当运行到yield位置的时候就弹出数据
yiled充当return的任务作为这次运行结束的结尾或者说对这次操作画上一个句号
当我们想要这一空间中的下一个数据的时候 我就使用next关键字这样我以上一个yield开始往下执行到我们需要的数据的时候我就去yield然后再画上一个句号