起因
在學習odoo對他們的self迴圈很不適應,所以決定留些東西在這裡。
開篇
計算機最擅長做批量工作,所以任何語言都繞不開迴圈。迴圈我習慣這麼分類(當真是個人的習慣,非常廣義,不要較真):
1.以個數為限制的(工作中這種情況並不是太多)
n = 1
while n <= 100:
print(n)
n = n + 1
for in 是不支援這種方式的
2.有物件實體的
本文重點討論這些有物件實體的。
繞不開的關鍵字iter,next
先上了簡單的例子
for city in ["berlin", "vienna", "zurich"]:
print(city)
# ***********************************====
def myprint(iterable):
iterator = iter(iterable)
while true:
try:
item = next(iterator)
except stopiteration:
break
else:
print(item)
myprint(["berlin", "vienna", "zurich"])
這兩部分是等價的,或許下面我寫。
大家也可以看到出現了4個很相似的名字iterable,iter,iterator,stopiteration。
1.可迭代的iterable
我們可以簡單理解為可以進行for迴圈的(還有一種迴圈用next但是不能用for,後面會說明)。
字串,元組,鍊錶,字典都是iterable。
2.iter
用來判定是否可迭代(iterable),並返回乙個迭代器iterator。
3.迭代器iterator
返回乙個可以用next逐次呼叫的資料流。
4.停止迭代stopiteration
當next獲取不到資料時,作為next的錯誤丟擲狀態
如此,上面的**就一目了然了。
odoo中self的使用
一 self是什麼 目前新版的odoo中使用到的self,是對 游標cr 使用者id 模型 上下文 記錄集 快取 的封裝。我們可以通過 self.xx 獲取到這些封裝的東西,比如 self.cr self.uid。二 通過直接設定屬性來改變資料庫中字段值 我們在查出某模型的記錄後,可以通過 reco...
關於迭代器vector iterator的使用
void cformdumper reverseseq2 int nstart,int nend,vect dumpervehi vvehiinfo if nstart 0 if nstart nsize if nend nsize 先將舊的陣列清空,並備份當前車輛資訊陣列 m vectoldveh...
關於迭代器失效
迭代器失效 注意關聯容器和序列容器的區別 序列容器 vector list deque 關聯容器 map set 序列性容器 erase迭代器不僅使所有指向被刪元素的迭代器失效,而且使被刪元素之後的所有迭代器失效,所以不能使用erase iter 的方式,但是erase的返回值為下乙個有效的迭代器,...