• 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的内容
  • 相关阅读:
    Oracle11gR2 INDEX FAST FULL SCAN 成本计算
    SELECT MIN(ID),MAX(ID) FROM TABLE 优化问题
    一次帮助网友优化的SQL案例
    Oracle11gR2 全表扫描成本计算(非工作量模式noworkload)
    & 符号在 SQLPLUS 的转义
    通过设置SQLPLUS ARRAYSIZE(行预取)加快SQL返回速度
    [linux] 如何让你自己写的程序也支持自动补全(bash环境)
    linux 查看系统版本 命令
    ubuntu右键添加打开终端的快捷菜单
    ubuntu右键添加打开终端的快捷菜单
  • 原文地址:https://www.cnblogs.com/bingabcd/p/6700072.html
Copyright © 2020-2023  润新知