yield關鍵字是用來方便實現迭代器的,免去了手工寫迭代器的繁瑣。迭代器常被用來實現協程,所以大部分的協程中都有yield關鍵字,可以參看unity3d的協程。
c#版本:
函式的返回型別必須為 ienumerable、ienumerable、ienumerator 或 ienumerator。
ienumerable表示乙個類可以迭代,也就是可以用foreach遍歷,ienumerator是真正的迭代器實現,ienumerable和ienumerator乙個是使用迭代器的介面,乙個是實現迭代器的介面。
c#是怎麼用yield實現迭代器的呢?其實是編譯器根據yield關鍵字生成了內部類,反編譯一下就可以看到。
using system.collections;
class program
}static void main()
", i);}}
}// prints: 1 1 2 3 5 8 13 21 34
php版本:
函式返回類generator,而類generator實現了迭代器介面iterator。
<?php
//返回iterator介面,php直譯器幫我們返回了generator類
function fib($n)
}$fibs = fib(9);
foreach ($fibs as $fib)
// prints: 1 1 2 3 5 8 13 21 34
php中yield的用法
之前有聽過php 中自身也有協程,檢視找了下並學習。demo已上傳 我的github筆記 解決執行記憶體的瓶頸,php程式中的變數儲存在記憶體中,之前有遇到過讀取excel檔案時候,會出現記憶體不足,出現 fatal error allowed memory size of bytes所以會設定ph...
Python和C 基本演算法實現對比
最近在學習python,很多入門的例子又寫了一遍,基本上是c 和python都寫了一遍,對比發現語言真是相通啊,只是語法不同而已。python開發也是用的vs,很好用,特別是 段執行,選中一段python ctrl e e執行結果就出來了,跟裝了testdriven寫c 也差不多,很不錯!2016 ...
php和C語言陣列占用空間對比
我們在前面的php高效寫法提到,盡量不要複製變數,特別是陣列。一般來說,php陣列的記憶體利用率只有 1 10,也就是說,乙個在c語言裡面100m 記憶體的陣列,在php裡面就要1g。下面我們可以粗略的估算php陣列占用記憶體的大小,首先我們測試1000個元素的整數占用的記憶體 echo memor...