python基础之协程,列表生成式,生成器表达式

三元表达式

#三元表达式
name = 'alex'
name = 'egon'
res='SB' if name == 'alex'else 'shuai'
print(res)
#输出:shuai

for循环

egg_list=[] #空列表

for i in range(100):   #for循环
    egg_list.append('egg%s' %i)  #追加到egg_list空列表中
print(egg_list)
#输出:['egg0', 'egg1', 'egg2', 'egg3',....'egg99']

列表生成式输出

l=['egg%s' %i for i in range(100) if i > 50]
print(l)
输出:['egg51', 'egg52', 'egg53', 'egg54', 'egg55',...'egg99']
l=[1,2,3,4]  #定义一个列表
s='hello'  #定义一个字符串
l1=[(num,s1) for num in l if num > 2 for s1 in s] #当列表里的数字大于2时,把列表里的所有数字与字符串里的所有字母组成元组,生成由元组组成的列表
print(l1)
[(3, 'h'), (3, 'e'), (3, 'l'), (3, 'l'), (3, 'o'), (4, 'h'), (4, 'e'), (4, 'l'), (4, 'l'), (4, 'o')]
------------------------------分割线------------------------------
l=[1,2,3,4]
s='hello'
l1=[]
for num in l:
for s1 in s:
t=(num,s1)
l1.append(t)
print(l1)  #输出:

[(1, 'h'), (1, 'e'), (1, 'l'), (1, 'l'), (1, 'o'), (2, 'h'), (2, 'e'), (2, 'l'), (2, 'l'), (2, 'o'), (3, 'h'), (3, 'e'), (3, 'l'), (3, 'l'), (3, 'o'), (4, 'h'), (4, 'e'), (4, 'l'), (4, 'l'), (4, 'o')]

import os
g=os.walk('C:\\egon')
file_path_list=[]
for i in g:
    print(i)
    for j in i[-1]:
        file_path_list.append("%s\\%s" %(i[0],j))
print(file_path_list)

g=os.walk('C:\\egon')
l1=['%s\\%s' %(i[0],j) for i in g for j in i[-1]]
print(l1)
grep -rl(windows环境)

要求:在文件里递归找到关于包含“Python”内容的文件的绝对路径并打印出来

# 定义阶段
import os, time


def init(func):  # 装饰器的作用是使下面的生成器初始化,yield等着被传值
    def wrapper(*args, **kwargs):
        res = func(*args, **kwargs)
        next(res)
        return res
    return wrapper

@init
def search(target):
    '''找到文件的绝对路径'''
    while True:
        dir_name = yield
        print("search开始工作:文件的绝对路径")
        time.sleep(2)  # 加上等待时间是为了看着更有效果
        g = os.walk(dir_name)
        for i in g:
            for j in i[-1]:
                file_path = "%s\\%s" % (i[0], j)
                target.send(file_path)  #

@init
def opener(target):
    '''打开文件,读取文件句柄'''
    while True:
        file_path = yield
        print("cat开始工作:读取文件内容")
        time.sleep(2) # 加上等待时间是为了看着更有效果
        with open(file_path,encoding="utf-8") as f:
            target.send((file_path,f))

@init
def cat(target):
    '''读取文件内容'''
    while True:
        file_path,f = yield
        print("cat开始工作:读取文件内容")
        time.sleep(0.3) # 加上等待时间是为了看着更有效果
        for line in f:
            target.send((file_path,line))

@init
def grep(pattern, target):
    '''过滤一行内容中有需要的内容,就把路径传给下面'''
    while True:
        file_path,line = yield
        print("grep开始工作:过滤内容")
        if pattern in line:
            target.send(file_path)

@init
def printer():
    '''打印文件路径'''
    while True:
        file_path = yield
        print("printer开始工作:打印文件的绝对路径")
        time.sleep(2)
        print(file_path)

#调用阶段
g = search(opener(cat(grep('python',printer()))))
g.send('C:\\egon')
打印C盘egon文件夹包含python的内容

 

posted on 2017-04-12 16:53  bigdata_devops  阅读(255)  评论(0编辑  收藏  举报

导航