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 向函数中传值
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() # 十进制转十六进制
day22 yield的表达式的应用,面向过程编程,内置函数前几个的更多相关文章
- Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 # yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield No ...
- python基础之生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 1 # yield的表达式形式 2 def foo(): 3 print('starting') 4 while True: 5 x=yield #默认返回为空,实际上为 ...
- python之三元表达式与生成式与匿名与内置函数(部分)
目录 三元表达式 各种生成式 列表生成式(可同样作用于集合) 字典生成式 匿名函数 重要内置函数 map() zip() filter() reduce() 常见内置函数(部分) 三元表达式 三元表达 ...
- python-迭代器、生成器、内置函数及面向过程编程
一.迭代器 迭代器是迭代取值的工具,迭代是一个重复的过程,每一次重复都是基于上一次的结果而来的. 为什么要用迭代器呢? 1.可以不依赖索引取值 2.同一时刻在内存中只有一个值,不会过多的占用内存 如何 ...
- Python基础(9)_生成器(yield表达式形式)、面向过程编程
一.yield表达式形式 1 #装饰器,初始化含yield表达式的生成器 def init(func): def wrapper(*args,**kwargs): g=func(*args,**kwa ...
- Python 迭代器-生成器-面向过程编程
上节课复习:1. 函数的递归调用 在调用一个函数的过程中又直接或者间接地调用了函数本身称之为函数的递归 函数的递归调用有两个明确的阶段: 1. 回溯 一层一层地调用本身 注意: 1.每一次调用问题的规 ...
- yield的表达式形式与内置函数
yield的功能: 1. 与return类似,都可以返回值,不一样在于,yield可以返回多个值而且可暂停,再次执行可继续下一步操作,return到了就停止不在继续运行. 2.为封装好的的函数能够使用 ...
- PYTHON-匿名函数,递归与二分法,面向过程编程
"""匿名函数1 什么是匿名函数 def定义的是有名函数:特点是可以通过名字重复调用 def func(): #func=函数的内存地址 pass 匿名函数就是没有名字的 ...
- python函数:匿名函数、函数递归与二分法、面向过程编程
今天主要讲三大部分内容: 一.匿名函数二.函数递归与二分法三.面向过程编程 一.匿名函数: """ 1. 什么时匿名函数 def定义的是有名函数:特点是可以通过名字重复调 ...
随机推荐
- springbot项目中使用继承
package com.example.demo.controller; import com.sun.org.apache.bcel.internal.generic.NEW; import org ...
- 关于windows和linux系统更换JDK版本后,修改环境变量也无法生效的原因和解决办法
今天遇到了一个问题: 我linux系统之前安装JDK12,今天将其改成了JDK1.8,并修改了环境变量,但是通过java -version命令显示的依旧是JDK12的版本. 这是因为,当使用安装版本的 ...
- Linux 进程间通信 信号灯集
1.特点: 信号灯集,是控制访问临界资源 信号灯(semaphore),也叫信号量.它是不同进程间或一个给定进程内部不同线程间同步的机制System V的信号灯是一个或者多个信号灯的一个集合(允许对 ...
- 关于ajax请求status 200 却进入error 回调函数或显示跨域问题的解决方案及原因
这虽然不是前端的问题吧,但如果遇到那种不靠谱的后台 还是可以拿来打脸的 转:https://segmentfault.com/a/1190000012469713
- 01二维背包+bitset优化——hdu5890
口胡一种别的解法: 三重退背包,g1[j]k]表示不选x的选了j件物品,体积为k的方案数,g[0][0] = 1 , g1[j][k]=dp[j][k]-g1[j-1][k-a[x]] 然后按这样再退 ...
- NX二次开发-UFUN获取系统相关信息UF_ask_system_info
NX9+VS2012 #include <uf.h> UF_initialize(); UF_system_info_t Info; UF_ask_system_info(&Inf ...
- HDU-6070 Dirt Ratio(二分+线段树+分数规划)
目录 目录 思路: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 目录 题意:传送门 原题目描述在最下面. 求\(sum/len\)最小值.\(sum\)是一段区间内不同数字的 ...
- 把swf反编译成fla的几种方法
2007年著 第一种方法: 利用IMPERATOR FLA1.63 ,这个软件有演示版 和正式版 , 演示版不能反编译Action Scropt,在利用正式版反编译的过程中有时会丢失Action Sc ...
- jsp-提交表单乱码解决
jsp提交表单有两种方式,一种是get,一种是post,对于两种方式都可能出现乱码,以下给出两种乱码方式的解决方案. 1.post提交解决乱码 //设置解码方式,post提交解决乱码 比较简单 req ...
- UVA 10382 Watering Grass 贪心+区间覆盖问题
n sprinklers are installed in a horizontal strip of grass l meters long and w meters wide. Each spri ...