yeild的一些使用

2021-09-01 12:23:47 字數 2649 閱讀 6511

參考**:

1,yield就好比是生成迭代器的關鍵字,迭代器在需要的時候才會去拿資料,所以,第二段**會報錯,對於第一段**:list本身就是全部放到記憶體中的。

the_list = [2**x for x in range(5)]

print(type(the_list))

print(len(the_list))

the_genarator = (x+x for x in range(3))

print(the_genarator)

print(len(the_genarator)) # 這裡會報錯

2,實現 需要資料的時候再去讀取,不需要的時候就不去讀取資料。

def search(keyword,filename):

print("generator started")

f = open(filename,'r')

for line in f:

if keyword in line:

yield line

f.close()

the_genarator = search('search','c:/tmp.txt')

print(type(the_genarator))

print(type(search))

print(next(the_genarator))  # 這行**可以多執行幾次,直到tmp.txt中找到的search全部執行完
3,例項三:

def hold_client(name):

yield 'hello, %s! you will be connected soon' % name

yield 'dear %s, could you please wait a bit.' % name

yield 'sorry %s, we will play a nice music for you!' % name

yield '%s, your call is extremely important to us!' % name

tmp = hold_client("xiaoming")

print(next(tmp)) # 這裡可以把hold_client 中所有yeild的字元 ,全部列印

print(next(tmp))

print(next(tmp))

print(next(tmp))

4,例項四:

#  通過yield實現的斐波拉切數列

def fibonacci(n):

curr = 1

prev = 0

counter = 0

while counter < n:

yield curr

prev, curr = curr, prev + curr

counter += 1

# in:

fi = fibonacci(5)

print(next(fi))

print(next(fi))

print(next(fi))

print(next(fi))

5,例項五:

# yeild 的關鍵字來讀取大檔案

# 兩種形式來實現:第一種是普通的read來實現,另外一種是pandas來實現

def read_in_chunks(file,chunk_size = 1024):

# 懶惰生成器,預設大小是1k

while true:

data = file.read(chunk_size)

if not data:

break

yield data

f=open('filepath')

da = read_in_chunks('filepath')

next(da)

#對於大檔案讀取的方式是一樣的。

# 通過yeild關鍵字來分段的讀取資料

def read_in_chunks(filepath,chunksize = 102400):

f = open(filepath,'r')

while true:

# 這種讀檔案的方法是,讀了chunksize大小的檔案後,指標下移到末尾

data = f.read(chunksize)

if not data:

break

yield data

sreader = read_in_chunks('e:/tmp/tmp.csv')

6,擴充套件:對於大檔案,可以使用mmap來操作。

這只是乙個簡單的例子,詳細的繼續學習。

import mmap

with open('e:/tmp/tmp.csv','r+') as f:

map = mmap.mmap(f.fileno(),0)

print(map.readline())

map.seek(0)

print(map.readline())

map.close()

Android gridview 使用的一些小問題

1.gridview 水平滑動,網上有很多的介紹,比如 其中我認為對gridview 的 android layout width的設定是比較關鍵的 我是把它設定為乙個定值 例如1000dp 才能夠正常顯示的,其他情況下顯示不出來。2.對於gridview 某一項 子view 的獲取,使用getch...

NSDictionary的一些使用

1.這裡只有這兩個 如果乙個鍵 值對存在 setobject 這個方法就是 修改 如果乙個鍵 值對不存在 這個方法就是 增加。下面看個例子 判斷鍵值對存在與否是看鍵或者 值有乙個相同就是存在。1 nsstring last lastname 2 nsstring first firstname 3 ...

UItableveiw的一些使用

uitableview是ios用來展示資料的一種重要控制項,幾乎所有的資料展示頁面都可以用uitableview來做 uitableview使用首先要定義宣告,可用 定義也可用storybord直接拖,要設定 和資料來源 模式是ios開發中的重要模式,很好的使用 可以讓 寫起來更省力,有些 的使用也...