day22 yield的表达式的应用,面向过程编程,内置函数前几个
2024-09-07 09:58:35
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() # 十进制转十六进制
最新文章
- C#实现微信开发前奏
- MySQL基础操作(一)
- filter()函数 条件筛选
- 如何将自己开发的标签打成jar包
- C++ STL 简单记录
- linux命令(4):ps命令
- Spring MVC定义拦截器
- Linux 配置脚本 启动服务
- iOS截取http/https流量
- CSS input type=";number";出现上下箭头时解决方案
- 关于read的例子和条件测试
- 打包自己的aar库
- 在Ajax返回多个值
- GO语言标准库—命令行参数解析FLAG
- ZOJ 1456 Minimum Transport Cost(Floyd算法求解最短路径并输出最小字典序路径)
- v-bind绑定属性样式——class的三种绑定方式
- .net的架构模式
- MySql数据库表操作(二)
- SQL Server中row_number的用法
- 利用python的KMeans和PCA包实现聚类算法
热门文章
- htons(), ntohl(), ntohs(),htons()这4个函数(摘)
- backface-visibility:hidden
- filter的使用场景
- css的3d注意事项
- 关于springboot错误:“找不到或无法加载主类”的解决办法
- HIVE常用SQL语句及语法
- Java笔记目录
- JAVA大数——lightoj1024
- NX二次开发-UFUN体找边UF_MODL_ask_body_edges
- Jboss集群(五)--F5硬件负载均衡器双击热备 + Jboss集群终极实现