odoo 關於self的迭代器(1)迭代器初步

2021-08-20 22:50:54 字數 1245 閱讀 6242

起因

在學習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的返回值為下乙個有效的迭代器,...