day22 yield的表达式的应用,面向过程编程,内置函数前几个
2017-06-19 15:02
225 查看
Python之路,Day10 = Python基础10
生成器表达式: (i for i in range(10) if i > 5)
os.walk(r'文件路径')
返回一个迭代器,
第一次next:包含一个元组,元组中有三个元素,(路径,路径包含的所有文件夹,路径包含的所有文件)
第二次next:包含一个元组,元组中有三个元素,(上面第二个元素中的第一个路径,前面那个路径包含的所有文件夹,前面那个路径包含的所有文件)
1.x = yield #yield的表达式的应用,可以通过 yield 向函数中传值
def yield_init(func): def wrapper(*args,**kwargs): res = func(*args,**kwargs) next(res) return res return wrapper @yield_init def eater(name): baozi_l = [] while True: food = yield baozi_l baozi_l.append('包子%s'%food) print('%s 吃 包子%s'%(name, food)) a = eater('LiSi') for i in range(1,19): print(' '.join(a.send(i)))
2.面向过程编程: grep -rl 'root' /etc
通过 yield 以及,函数,实现上面的命令(寻找到传入的路径下及自路径下的所有文件中包含 ‘roo’ 的文件的全路径,综合yield 及函数传值)
#! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "Always" # Date: 2017/6/19 import os def yiled_init(func): """ 装饰器,用来初始化 生成器(含有yield的函数),执行后立即执行next()方法。 :param func: 被装饰的 生成器 :return: """ def wrapper(*args,**kwargs): res = func(*args, **kwargs) next(res) return res return wrapper @yiled_init def search(target): """ 这里面用了一个 os.work() 函数,作用是递归进入所有的目录,并返回结果,结果为一个列表(当前目录,当前目录存在的所有文件夹, 当前目录存在的所有文件名) :param target: 下一个函数的结果,用来将这个函数处理好的东西(文件名)传给它,进行下一步运算 :return: """ while True: start_path = yield g = os.walk(start_path) for par_dir, _, files in g: for file in files: file_path = r'%s\%s'%(par_dir, file) target.send(file_path) @yiled_init def opener(target): """ 用来打开文件 :param target: 下一个函数的结果,用来将这个函数处理好的东西(文件句柄)传给它,进行下一步运算 :return: """ while True: file_path = yield with open(file_path,encoding='utf-8') as f: target.send((file_path, f)) @yiled_init def cat(target): """ 读取文件内容,逐行传给下一个函数,在下一个函数中寻找是否存在需要的内容,如果不存在就下一行,如果存在则返回True,终止这个文件循环 :param target: 下一个函数的结果,用来将这个函数处理好的东西(文件的行)传给它,进行下一步运算 :return: """ while True: file_path, f = yield for line in f: if target.send((file_path, line)): break @yiled_init def grep(target, pattern): """ 查找这行是否存在需要的内容,如果存在,传给下一个函数来打印,如果不存在,则忽略 :param target: 下一个函数的结果,用来将这个函数处理好的东西(文件全路径)传给它,进行下一步运算 :param pattern: 查找的关键字 :return: """ tag = False while True: file_path, line = yield tag if pattern in line: target.send(file_path) tag = True @yiled_init def printer(): """ 将传来的内容打印出来 :return: """ while True: filename = yield print(filename) filepath = r'C:\Users\Administrator\PycharmProjects\老男孩全栈5期\上课笔记\day' g = search(opener(cat(grep(printer(), 'root')))) g.send(filepath)
3.内置函数
abs() # 返回数字的绝对值。参数可以是整数或浮点数。如果参数是复数,则返回其大小。
all() # 括号中加入可迭代的对象,如果该对象的所有内容为 True,则返回True。如果可迭代对象为空,为 True。
any() # 括号中加入可迭代的对象,如果该对象的所有内容为 True,则返回True。如果可迭代对象为空,为 True。
bin() # 十进制转二进制
oct() # 十进制转八进制
hex() # 十进制转十六进制
相关文章推荐
- python--表达式形式的yield、面向过程编程、内置函数
- DAY22 生成器表达式形式、面向过程编程、内置函数
- python基础之生成器表达式形式、面向过程编程、内置函数部分
- Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分
- python-迭代器、生成器、内置函数及面向过程编程
- 面向过程编程、三元表达式、列表推导式与生成器表达式
- Java第二课 Java面向对象编程,面向对象编程和面向过程编程的区别,我们如何才能掌握面向对象的编程,类和对象的关系;讲解了Java中的构造、重载、this和super变量、静态变量、Java中的常
- 面向对象与面向过程在软件开发中的应用
- PHP中的面向对象和面向过程的编程方法
- 从一个实例浅谈J2ME Polish的build功能(三、polish应用过程中几个问题的解决方法)
- static的作用,在面向对象和面向过程中的应用
- 面向过程和面向对象的编程
- C# 中使用正则表达式 Regex.Matches方法的几个应用
- 反向控制和面向切面编程在Spring的应用
- 第二章 面向过程编程~
- 面向过程和面向对象的编程----话题讲座
- Microsoft 用于构建面向服务的应用程序的统一编程模型--Indigo简介 - WCF(WindowsCommunicationFoundation)构建面向服务的分布式应用
- 反向控制和面向切面编程在Spring的应用
- 反向控制和面向切面编程在Spring的应用
- 反向控制和面向切面编程在Spring的应用