python_class21
#!/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的更多相关文章
随机推荐
- HTTP状态码 304
HTTP 304 错误Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档).服务器告诉客户,原来缓冲的 ...
- JMeter-Window10系统下设置环境变量
首先我们右击此电脑(我的电脑),点击属性 接下来我们就可以进入到控制面板主页,点击[高级系统设置] 在系统属性里面,点击[环境变量]按钮 在环境变量里面,点击[新建]按钮 接下来我们输 ...
- JavaScript 正则表达收集整理
JavaScript 正则表达收集整理 //可为空 /^\s*$/ //密码验证,必须且只含有数字和字母,可以拥有英文符号,6-17位 /(?=.{,})(?=.*\d)(?=.*[a-z])[\x2 ...
- MVP实战心得—封装Retrofit2.0+RxAndroid+RxBus
响应式编程框架,rxjava的扩展,很爽的链式编程 魅力在于对数据的处理,与线程切换的灵活性. 用来处理异步操作(Lambda表达式不会用.用Lambda表达式代码会更少,但不会的人会看不懂代码.不是 ...
- php特级课---2、网站大数据如何存储
php特级课---2.网站大数据如何存储 一.总结 一句话总结: mysql主从,分库分表,mysql分区,mysql集群,Nosql 1.mysql主从服务器各自的功能是什么? 增删改,主服务器 查 ...
- Spinner使用二
Spinner使用二 一.效果图 二.方法及核心函数 三.代码 后面补
- 如何手动添加 WIFI 网络步骤
电脑手动添加WiFi网络步骤: 1.右键控制面板 2.进入控制面板 3.进入网络和Internet,点击设置新的连接或网络 4.点击手动连接到无线网络 5.输入网络SSID及秘钥 若需要自动连接请勾选 ...
- 解析Ceph: 数据的端到端正确性和 Scrub 机制
转自:https://www.ustack.com/blog/ceph-internal-scrub/ Ceph 的主要一大特点是强一致性,这里主要指端到端的一致性.众所周知,传统存储路径上从应用层到 ...
- MySQL 约束和数据库设计
1.MySQL 约束: 1.约束的概念: 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性. MySQL中,常用的几种约束: 约束类型: 非空 主键 唯一 外键 默认值 ...
- ElasticSearch_学习_00_资源帖
一.官方资料 1.Elasticsearch 权威指南(中文版) 二.精选资料 1. 全文搜索引擎 Elasticsearch 入门教程-阮一峰 2. 三.参考资料