zoukankan      html  css  js  c++  java
  • 列表和生成器表达式

    1 协程函数的应用

      写一个装饰器用于让协程函数不需要输入再执行一次next()函数

      分析: 在装饰器中生成该协程函数的生成器, 并且执行一次next()函数

      具体描述如下

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    __author__ = 'weihuchao'
    
    def firstNext(func):
        def wrapper(*args, **kwargs):
            g = func(*args, **kwargs)
            next(g)
            return g
        return wrapper
    
    @firstNext
    def eater(name):
        print("{} start to eat".format(name))
        food_list = []
        while True:
            food = yield food_list
            print("{} eat {}".format(name, food))
            food_list.append(food)
    
    g = eater("egon")
    print(g.send("包子"))
    print(g.send("炸酱面"))
    

    2 面向过程编程

      实现 grep -rl 'python' c:/test 的功能

      一个函数实现

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    __author__ = 'weihuchao'
    
    import os
    
    def search(dir_name, partten):
        g = os.walk(dir_name)
        res = {"",}
        for i in g:
            for j in i[-1]:
                file_path = i[0] + "\" +j
                with open(file_path) as f:
                    for line in f:
                        if partten in line:
                            res.add(file_path)
        for line in res:
            if line:
                print(line)
    
    search("c:\test", "python")
    

      利用生成器来处理

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    __author__ = 'weihuchao'
    
    import os
    
    def firstNext(func):
        def wrapper(*args, **kwargs):
            g = func(*args, **kwargs)
            next(g)
            return g
        return wrapper
    
    @firstNext
    def search(target):
        while True:
            dir_name = yield
            g = os.walk(dir_name)
            for i in g:
                for j in i[-1]:
                    file_path = i[0] + "\" +j
                    target.send(file_path)
    
    @firstNext
    def opener(target):
        while True:
            file_path = yield
            with open(file_path) as f:
                target.send((file_path, f))
    
    @firstNext
    def cat(target):
        while True:
            file_path, f = yield
            for line in f:
                target.send((file_path, line))
    
    @firstNext
    def grep(partten, target):
        while True:
            file_path, line = yield
            if partten in line:
                target.send(file_path)
    
    @firstNext
    def printer():
        while True:
            file_path = yield
            print(file_path)
    
    g = search(opener(cat(grep("python",printer()))))
    g.send("c:\test")
    

    3 列表生成式, 生成器表达式

      列表生成式的具体形式

    列表 = [处理变量形成列表元素 for循环 if判断 for循环2]  

      等同于

    for循环
        if判断    
            for循环
                元素=表达式
        列表.append(元素)

      生成器表达式是 列表生成式的中括号编程圆括号

      其中获得的是一个生成器

      可以通过 list(获得的生成器) 来快速生成一个列表

    4 声明式编程

      声明式编程主要是注重于定义, 不具体去了解实现

      Python中有很多封装好的方法, 如reduce和map等

    人若有恒 无所不成
  • 相关阅读:
    Struts2声明式异常处理
    几种常用的过滤器
    Jdk 和 Tomcat的 安装。(旧版本,请看新版本3篇)
    java 判断字符串是否相等
    PreparedStatement 查询 In 语句 setArray 等介绍。
    String、StringBuffer与StringBuilder之间区别
    IntelliJ IDEA 里 查看一个函数注释的方法是 ctrl+q
    Java字符串拼接效率对比
    Java 中判断字符串是否为空
    IntelliJ IDEA + Tomcat ;On Upate Action 与 On Frame Deactivation
  • 原文地址:https://www.cnblogs.com/weihuchao/p/6699240.html
Copyright © 2011-2022 走看看