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() # 十进制转十六进制