#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@version: 3.5
@author: morgana
@license: Apache Licence
@contact: vipmorgana@gmail.com
@site:
@software: PyCharm
@file: notes.py
@time: 2017/6/19 上午8:51
""" # 1.yield的表达式形成的应用
# 2.面向过程编程:grep -rl 'root' /etc
# 3.递归
# 4.内置函数
#
# 三元表达式:res=True if 1>2 else False
# 列表解析:[i for i in range(10) if i>5]
# 生成器表达式:(i for i in range(10) if i>5)
# 生成器:函数函数内部有yield关键字,那函数执行的结果就是生成器 # def init(func):
# def warpper(*args,**kwargs):
# g=func(*args,**kwargs)
# next(g)
# return g
# return warpper
#
# @init
# def foo():
# print('starting')
# while True:
# x=yield
# print('value: ',x) #send的效果
#1.先从为暂停位置的那个yield传一个值,然后yield会把值赋值x
#2:与next的功能一样 # g=foo()
# print(g)
# next(g)
# print('='*30)
# print(g.send(1))
# print('='*30)
# print(g.send(2))
# print(g.send(3))
# print(g.send(3)) # # @init
# def eater(name):
# print('%s read to eat ' %name)
# food_list=[]
# while True:
# food=yield food_list
# food_list.append(food)
# print("%s start to eat %s" %(name,food))
#
#
#
# e=eater('alex')
# e.send("shit")
# e.send("dog shit") #
# def init(func):
# def warpper(*args,**kwargs):
# g=func(*args,**kwargs)
# next(g)
# return g
# return warpper
#
#
# @init
# def eater(name):
# print("%s eat " %(name))
# food_list=[]
# while True:
# food=yield food_list
# food_list.append(food)
# print("%s eat %s" %(name,food))
#
#
# def make_shit(people,n):
# for i in range(n):
# people.send("shit %s" %i)
#
# e=eater("alex")
# make_shit(e,5) #1.找到文件
#2.把文件找到 绝对路径 send()-》
#3.遍历文件内容
#判断 import os
def init(func):
def warpper(*args,**kwargs):
g=func(*args,**kwargs)
next(g)
return g
return warpper # 阶段一:递归找文件绝对路径,把路径发给阶段二
def search(target, start_path):
'serch file abpath'
g = os.walk(start_path)
for par_dir, _, files in g:
# print(par_dir,files)
for file in files:
#file_path =r'%s\%s' % (par_dir, file)
file_path = '%s%s' % (par_dir, file)
#print(file_path)
target.send(file_path) # 阶段二:收到文件路径,打开文件获取对象,把文件对象发给阶段三
@init
def opener(target):
'get file obj open(filepath)'
while True:
file_path = yield
with open(file_path, encoding='utf-8') as f:
target.send((file_path,f)) # 阶段三:收到文件对象,for循环读取文件的每一行内容,把每一行内容发给阶段四
@init
def cat(target):
# 'cat file'
while True:
file_path, f = yield
for line in f: target.send((file_path,line)) # 阶段四:收到一行内容,判断root是否在这一行中,如果在,则把文件名发给阶段五
@init
def grep(target, pattern):
while True:
file_path, line = yield
if pattern in line:
target.send(file_path) # 阶段五:收到文件名打印结果
@init
def printer():
# 'print function'
while True:
filename = yield
print(filename) start_path ='/Users/shuanggai/PycharmProjects/git/python/20170619_yield_recursion/homework/'
search(opener(cat(grep(printer(),'root'))),start_path)

morgana

python_class21的更多相关文章

随机推荐

  1. matlab *与.*的区别

    语言用来用去老是容易忘... 还是记下来比较好点.... (1)   " * "   即矩阵乘法,两个矩阵必须满足左边矩阵的列数等于右边矩阵的行数,如: A(m,k) * B(k, ...

  2. 应用程序.f/q(f了个墙)

    1.20180414: 前两天,发现 CnFast不能用了,也没管它 以为过两天会好. 今天发现还是不能用,上网随便baidu下,看到个帖子:有人用加速精灵吗 现在登陆不了了 哪位大佬知道怎么回事啊[ ...

  3. 关于html的一些杂技

    html预定义字符指的是 :<   > html实体指的是 $amp 等 php中htmlspeciachar()就是讲html预定义字符转换成html实体. 浏览器渲染时,会将html实 ...

  4. windows7下cmd窗口使用ssh命令

    http://jingyan.baidu.com/article/36d6ed1f931eb31bcf4883dc.html

  5. ItemsControl 与 ICollectionView

    ItemsControl base class can automatically interact with ICollectionView classes

  6. 解决:WebDriverException: 'chromedriver' executable needs to be in PATH

    打算学习用selenium + phantomJS爬取淘女郎页面照片. 一. 先安装lxml模块 python默认的解析器是html.parser,但lxml解析器更加强大,速度更快 1. 执行 pi ...

  7. 如何关闭Windows10系统更新

    单击左下角开始菜单点击设置图标进入设置界面    在设置窗口中输入“服务”搜索  在结果中选择查看本地服务  在服务列表中找到windows update服务双击它  点击停止按钮先停止该服务,稍等片 ...

  8. 【WPF】DataGrid的Row样式设置

    引言      在与DataGrid相关的项目中,会有一个比较常见的需求.那就是在根据数据设置行的样式,例如行的背景色或者字体色.我们用到的方法有几个,下面一个个说来. 准备工作     介绍方法之前 ...

  9. Jquery过滤选择器,选择前几个元素,后几个元素,内容过滤选择器等

    一.基本过滤选择器(重点掌握下列八个):first 选取第一个元素 $("div:first").css("color","red");:l ...

  10. LKDBHelper Sqlite操作数据库

    首先这里要说明一下,为什么用FMDB而不用Core Data呢,因为我们不知道Core Data是如何映射对象里面的属性关系的,如果我们更改了属性的话,就会报错 首先是创建LKDBHelper对象 L ...