1 協程函式的應用
寫乙個裝飾器用於讓協程函式不需要輸入再執行一次next()函式
分析: 在裝飾器中生成該協程函式的生成器, 並且執行一次next()函式
具體描述如下
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = 'weihuchao'
def firstnext(func):
g = func(*args, **kwargs)
next(g)
return g
@firstnext
def eater(name):
print("{} start to eat".format(name))
food_list =
while true:
food = yield food_list
print("{} eat {}".format(name, food))
g = eater("egon")
print(g.send("包子"))
print(g.send("炸醬麵"))
實現 grep -rl 'python' c:/test 的功能
乙個函式實現
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = 'weihuchao'
import os
def search(dir_name, partten):
g = os.walk(dir_name)
res =
for i in g:
for j in i[-1]:
file_path = i[0] + "\\" +j
with open(file_path) as f:
for line in f:
if partten in line:
res.add(file_path)
for line in res:
if line:
print(line)
search("c:\\test", "python")
利用生成器來處理
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = 'weihuchao'
import os
def firstnext(func):
g = func(*args, **kwargs)
next(g)
return g
@firstnext
def search(target):
while true:
dir_name = yield
g = os.walk(dir_name)
for i in g:
for j in i[-1]:
file_path = i[0] + "\\" +j
target.send(file_path)
@firstnext
def opener(target):
while true:
file_path = yield
with open(file_path) as f:
target.send((file_path, f))
@firstnext
def cat(target):
while true:
file_path, f = yield
for line in f:
target.send((file_path, line))
@firstnext
def grep(partten, target):
while true:
file_path, line = yield
if partten in line:
target.send(file_path)
@firstnext
def printer():
while true:
file_path = yield
print(file_path)
g = search(opener(cat(grep("python",printer()))))
g.send("c:\\test")
列表生成式的具體形式
列表 = [處理變數形成列表元素 for迴圈 if判斷 for迴圈2]
等同於
for迴圈if判斷
for迴圈
元素=表示式
生成器表示式是 列表生成式的中括號程式設計圓括號
其中獲得的是乙個生成器
可以通過 list(獲得的生成器) 來快速生成乙個列表
宣告式程式設計主要是注重於定義, 不具體去了解實現
python中有很多封裝好的方法, 如reduce和map等
2 2 列表推導和生成器表示式
標準的列表推導寫法 symbols codes ord symbol for symbol in symbols codes 36,162,163,165,8364,164 通常的原則是,只用列表推導來建立新的列表,並且盡量保持簡短。如果列表推導的 超過了兩行,你可能就要考慮是不是得用 for 迴圈...
列表生成式和生成器表示式
列表生成式和生成器表示式,體現了宣告式程式設計的思想,把一大堆 變成宣告式的方式 list,for,sum等都是把可迭代物件變為迭代器然後依次next 取值,還會處理異常 一 列表生成式 列表生成式即list comprehensions,是python內建的非常簡單卻強大的可以用來建立list的生...
列表生成式和生成器表示式
egg list for i in range 100 print egg list l egg s i for i in range 100 if i 50 print l 三元表示式 name alex name linhaifeng res sb if name alex else shuai...