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的更多相关文章
随机推荐
- python正则表达式同时匹配多个关键字(多关键字匹配)
网上翻了很多文章...居然没有一个有用的..倒是找到一篇java的,但java的正则表达式和python的还有点不同. 那篇java的文章是用"[keywd1]|[keywod2]|[key ...
- 语音01_TTS
1.http://blog.csdn.net/u010176014/article/details/47428595 2.家里 Win7x64 安装“微软TTS5.1语音引擎(中文).msi”之后,搜 ...
- Memcache 笔记(2)
一.Memcache概述出现的原因:随着数据量的增大,访问的集中,使得数据库服务器的负担加重,数据库响应恶化,网站显示延迟等 memcache:是高性能的分布式内存缓存服务器.通过缓存数据库的查询结果 ...
- 2016ACM/ICPC亚洲区沈阳站
emm,a出3题,补了两题 A,B水题 #include<bits/stdc++.h> #define fi first #define se second #define mp make ...
- map和reduce 个数的设定 (Hive优化)经典
一. 控制hive任务中的map数: 1. 通常情况下,作业会通过input的目录产生一个或者多个map任务. 主要的决定因素有: input的文件总个数,input的文件大小,集群设置 ...
- Spring MVC数据绑定大全 .
刚开始用spring mvc 做web开发时,经常会不知道如何合适绑定页面数据.用惯struts2的朋友更认为spring mvc 绑定数据不如struts2方便(本人最开始也是这么认为),经过一段时 ...
- NAT123之类的软件是如何实现访问域名然后穿透到内网主机的80端口?——有公网ip就是动态域名解析,没有就是穿透+代理转发
实际上两种都用到了:1,服务提供商(123NAT,花生壳)做Proxy转发 2,两个私网地址直接连接:STUN 和TURN 使用动态域名解析还是端口映射 什么情况下使用动态域名解析?什么情况下使用 ...
- Python压缩脚本编辑
这真是一点小问题,搞死人了.主要还是两个问题, 1WinRAR,这要配置到环境变量里去.不然无法实现功能. 2 其次就是转义 r'D:\FISRT' 3 source = [r'D:\ONE'] ...
- jquery 获取所有父元素
最终结果: 代码: <!DOCTYPE html> <html> <head> <style> b, span, p, html body { padd ...
- nginx location配置与rewrite配置
注:原文出处 www.linuxidc.com/Linux/2015-06/119398.htm 1. location正则写法 一个示例: location =/{ # 精确匹配 / ,主机名后面不 ...