zoukankan      html  css  js  c++  java
  • day22 yield的表达式的应用,面向过程编程,内置函数前几个

    Python之路,Day10 = Python基础10

    生成器表达式: (i for i in range(10) if i > 5)
    os.walk(r'文件路径')
    返回一个迭代器,
      第一次next:包含一个元组,元组中有三个元素,(路径,路径包含的所有文件夹,路径包含的所有文件)
      第二次next:包含一个元组,元组中有三个元素,(上面第二个元素中的第一个路径,前面那个路径包含的所有文件夹,前面那个路径包含的所有文件)

    1.x = yield #yield的表达式的应用,可以通过 yield 向函数中传值

     1 def yield_init(func):
     2     def wrapper(*args,**kwargs):
     3         res = func(*args,**kwargs)
     4         next(res)
     5         return res
     6     return wrapper
     7 
     8 @yield_init
     9 def eater(name):
    10     baozi_l = []
    11     while True:
    12         food = yield baozi_l
    13         baozi_l.append('包子%s'%food)
    14         print('%s 吃 包子%s'%(name, food))
    15 
    16 
    17 
    18 a = eater('LiSi')
    19 for i in range(1,19):
    20     print(' '.join(a.send(i)))

    2.面向过程编程: grep -rl 'root' /etc

    通过 yield 以及,函数,实现上面的命令(寻找到传入的路径下及自路径下的所有文件中包含 ‘roo’ 的文件的全路径,综合yield 及函数传值)

     1 #! /usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # __author__ = "Always"
     4 # Date: 2017/6/19
     5 
     6 import os
     7 
     8 def yiled_init(func):
     9     """
    10     装饰器,用来初始化 生成器(含有yield的函数),执行后立即执行next()方法。
    11     :param func: 被装饰的 生成器
    12     :return:
    13     """
    14     def wrapper(*args,**kwargs):
    15         res = func(*args, **kwargs)
    16         next(res)
    17         return res
    18     return wrapper
    19 
    20 @yiled_init
    21 def search(target):
    22     """
    23     这里面用了一个 os.work() 函数,作用是递归进入所有的目录,并返回结果,结果为一个列表(当前目录,当前目录存在的所有文件夹, 当前目录存在的所有文件名)
    24     :param target: 下一个函数的结果,用来将这个函数处理好的东西(文件名)传给它,进行下一步运算
    25     :return:
    26     """
    27     while True:
    28         start_path = yield
    29         g = os.walk(start_path)
    30         for par_dir, _, files in g:
    31             for file in files:
    32                 file_path = r'%s\%s'%(par_dir, file)
    33                 target.send(file_path)
    34 
    35 @yiled_init
    36 def opener(target):
    37     """
    38     用来打开文件
    39     :param target:  下一个函数的结果,用来将这个函数处理好的东西(文件句柄)传给它,进行下一步运算
    40     :return:
    41     """
    42     while True:
    43         file_path = yield
    44         with open(file_path,encoding='utf-8') as f:
    45             target.send((file_path, f))
    46 
    47 @yiled_init
    48 def cat(target):
    49     """
    50     读取文件内容,逐行传给下一个函数,在下一个函数中寻找是否存在需要的内容,如果不存在就下一行,如果存在则返回True,终止这个文件循环
    51     :param target:  下一个函数的结果,用来将这个函数处理好的东西(文件的行)传给它,进行下一步运算
    52     :return:
    53     """
    54     while True:
    55         file_path, f = yield
    56         for line in f:
    57             if target.send((file_path, line)):
    58                 break
    59 
    60 @yiled_init
    61 def grep(target, pattern):
    62     """
    63     查找这行是否存在需要的内容,如果存在,传给下一个函数来打印,如果不存在,则忽略
    64     :param target:  下一个函数的结果,用来将这个函数处理好的东西(文件全路径)传给它,进行下一步运算
    65     :param pattern: 查找的关键字
    66     :return:
    67     """
    68     tag = False
    69     while True:
    70         file_path, line = yield tag
    71         if pattern in line:
    72             target.send(file_path)
    73             tag = True
    74 
    75 
    76 @yiled_init
    77 def printer():
    78     """
    79     将传来的内容打印出来
    80     :return:
    81     """
    82     while True:
    83         filename = yield
    84         print(filename)
    85 
    86 
    87 filepath = r'C:UsersAdministratorPycharmProjects老男孩全栈5期上课笔记day'
    88 g = search(opener(cat(grep(printer(), 'root'))))
    89 g.send(filepath)

    3.内置函数
           abs()             # 返回数字的绝对值。参数可以是整数或浮点数。如果参数是复数,则返回其大小。
      all()               # 括号中加入可迭代的对象,如果该对象的所有内容为 True,则返回True。如果可迭代对象为空,为 True。
      any()             # 括号中加入可迭代的对象,如果该对象的所有内容为 True,则返回True。如果可迭代对象为空,为 True。

      bin()      # 十进制转二进制
      oct()      # 十进制转八进制
      hex()     # 十进制转十六进制

  • 相关阅读:
    系统建模之UML状态图[转载]
    [软件工程]TO B型IT软件企业在工程管理角度所存在的诸多问题
    [Linux]异常配置专题之重复配置的有效性:系统/环境变量 | hosts
    将本地图片Base64(代码摘抄)
    将网络图片Base64(摘抄笔记)
    Cordova基本使用(三)
    Tushare环境搭建
    用Python做量化交易Tushare平台获取数据
    java将ftl格式模板输出为word模板
    oracle数据库的row_num() over()使用方法
  • 原文地址:https://www.cnblogs.com/alwaysInMe/p/7048727.html
Copyright © 2011-2022 走看看