DAY22 生成器表达式形式、面向过程编程、内置函数
2017-06-19 20:22
423 查看
# yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield None print('value',x) g=foo() print(g.__next__()) #停到yield位置,生成器初始化,遇到yield返回一个None print('---分割线君---') print(g.send(1)) #传值给yield,然后yield传给x,最后触发一次next,遇到yield返回一个None值并暂停 print('---分割线君---') print(g.send(2))
输出结果
starting None #运行g.__next__()的返回值 ---分割线君--- value 1 #运行g.send(1)的打印 None #运行g.send(1)的返回值,由yield返回 ---分割线君--- value 2 #运行g.send(2)的打印 None #运行g.send(2)的返回值
生成器的表达式形式,在每一个包含生成器表达式形式的函数写完后,都必须要执行第一次next方法初始化后(即传入一个的默认返回值None),才能够使用send()方法传入值,否则会抛出TypeError错误。
初始化装饰器:使用装饰器装饰的方法进行函数定义后的yield初始化操作,防止遗忘
def init_generator(func): def generator(*args,**kwargs): gen=func(*args,**kwargs) next(gen) return gen return generator
面向过程编程
函数的参数传入,是函数吃进去的食物,而函数return/yield的返回值,是函数拉出来的结果,面向过程的思路就是,把程序的执行当做一串首尾相连的函数,一个函数吃,拉出的东西给另外一个函数吃,另外一个函数吃了再继续拉给下一个函数吃。。。
应用:递归一个目录的文件夹,判断将该目录内及子目录内的文件内容是否包含指定字符串,如果有那么将该文件绝对路径打印出来
分析:
阶段一:递归地找文件的绝对路径,把路径发给阶段二
阶段二:收到文件路径,打开文件获取获取对象,把文件对象发给阶段三
阶段三:收到文件对象,for循环读取文件的每一行内容,把每一行内容发给阶段四
阶段四:收到一行内容,判断root是否在这一行中,如果在,则把文件名发给阶段五
阶段五:收到文件名,打印结果
#应用:grep -rl 'root' /etc import os def init(func): def wrapper(*args,**kwargs): g=func(*args,**kwargs) next(g) return g return wrapper #阶段一:递归地找文件的绝对路径,把路径发给阶段二 @init def search(target): 'search fi e167 le abspath' while True: start_path=yield g = os.walk(start_path) for par_dir, _, files in g: # print(par_dir,files) for file in files: file_path = r'%s\%s' % (par_dir, file) target.send(file_path) #阶段二:收到文件路径,打开文件获取获取对象,把文件对象发给阶段三 @init def opener(target): 'get file obj: f=open(filepath)' while True: file_path=yield with open(file_path,encoding='utf-8') as f: target.send((file_path,f)) #阶段三:收到文件对象,for循环读取文件的每一行内容,把每一行内容发给阶段四 @init def cat(target): 'read file' while True: filepath,f=yield for line in f: res=target.send((filepath,line)) if res: break #阶段四:收到一行内容,判断root是否在这一行中,如果在,则把文件名发给阶段五 @init def grep(target,pattern): 'grep function' tag=False while True: filepath,line=yield tag #target.send((filepath,line)) tag=False if pattern in line: target.send(filepath) tag=True #阶段五:收到文件名,打印结果 @init def printer(): 'print function' while True: filename=yield print(filename) start_path1=r'C:\Users\Administrator\PycharmProjects\python5期\a' start_path2=r'C:\Users\Administrator\PycharmProjects\python5期\a\b' g=search(opener(cat(grep(printer(),'root')))) print(g) # g.send(start_path1) g.send(start_path2)
内置函数
abs() 函数:返回数字的绝对值
语法:
abs( x ) #x -- 数值表达式
print(abs(-9)) print(abs(5.5)) print(abs(45))
all() 函数:判断给定的可迭代参数 iterable 中的所有元素是否不为 0、”、False 或者 iterable 为空,如果是返回 True,否则返回 False
语法:
all(iterable) #iterable元组或列表
示例:
any(['a', 'b', 'c', 'd']) # 列表list,元素都不为空或0,结果返回True any(['a', 'b', '', 'd']) # 列表list,存在一个为空的元素,结果返回True any([0, '', False]) # 列表list,元素全为0,'',false,结果返回False any(('a', 'b', 'c', 'd')) # 元组tuple,元素都不为空或0,结果返回True any(('a', 'b', '', 'd')) # 元组tuple,存在一个为空的元素,结果返回True any((0, '', False)) # 元组tuple,元素全为0,'',false,结果返回False any([]) # 空列表,结果返回False any(()) # 空元组,结果返回False
进制转换函数:十进制转二进制bin()、十进制转八进制oct()、十进制转十六进制hex()
bin(3) oct(9) hex(13)
bool()函数:布尔值使用常量True和False来表示
语法:
bool(x) #x为任意值
示例
bool(0) #False bool("abc") #True bool("") #False bool([]) #False bool() #False
bytes()函数:返回一个新的不可修改字节数组
#常用 bytes(string,encoding) print(bytes('sss',encoding='utf-8')) #等同于下面 print('sss'.encode('utf-8'))
help()函数:函数用于查看函数或模块用途的详细说明。
callable()函数:用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。对于函数, 方法, lambda 函式, 类, 以及实现了 call 方法的类实例, 它都返回 True。
chr()函数:用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符,对应ascii表
ord()函数:chr() 函数的配对函数,chr()传入数字返回对应字符,ord()传入字符返回数字
complex()函数:用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数
complex([real[, imag]]) real -- int, long, float或字符串 imag -- int, long, float x=1-2j #等同于x=complex(1-2j) print(x.real) #显示实部 print(x.imag) #显示虚部
int()函数:用于将一个字符串会数字转换为整型
dict()函数:用于创建一个字典
tuple()函数:将列表、字典或集合转换为元组
list()函数: 用于将元组、字典或集合转换为列表
set()函数:创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
str()函数:将对象转化为适于人阅读的形式。
dir()函数:不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法dir(),该方法将被调用。如果参数不包含dir(),该方法将最大限度地收集参数信息
import os dir(os) #显示os模块的可调用方法 输出结果 ['DirEntry', 'F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'PathLike', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_execvpe', '_exists', '_exit', '_fspath', '_get_exports_list', '_putenv', '_unsetenv', '_wrap_close', 'abc', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'close', 'closerange', 'cpu_count', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode', 'fsencode', 'fspath', 'fstat', 'fsync', 'ftruncate', 'get_exec_path', 'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getenv', 'getlogin', 'getpid', 'getppid', 'isatty', 'kill', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'makedirs', 'mkdir', 'name', 'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'replace', 'rmdir', 'scandir', 'sep', 'set_handle_inheritable', 'set_inheritable', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'st', 'startfile', 'stat', 'stat_float_times', 'stat_result', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'supports_fd', 'supports_follow_symlinks', 'symlink', 'sys', 'system', 'terminal_size', 'times', 'times_result', 'truncate', 'umask', 'uname_result', 'unlink', 'urandom', 'utime', 'waitpid', 'walk', 'write']
相关文章推荐
- Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分
- python基础之生成器表达式形式、面向过程编程、内置函数部分
- day22 yield的表达式的应用,面向过程编程,内置函数前几个
- python--表达式形式的yield、面向过程编程、内置函数
- python-迭代器、生成器、内置函数及面向过程编程
- 面向过程编程、三元表达式、列表推导式与生成器表达式
- 迭代器、生成器、面向过程编程
- python全栈开发-Day11 迭代器、生成器、面向过程编程
- 迭代器、生成器、面向过程编程(day4)
- OOP(面向对象编程) 和 OPP(面向过程编程) 的异同点及系统总结
- 面向过程与函数式编程区别的浅显理解
- 面向过程编程和面向对象编程
- 面向接口设计和编程——(面向对象、面向接口、面向过程、面向实现) --转载
- 菜鸟编程VB.NET登录窗体之面向过程
- 浅析两大类编程中五子棋,面向过程的设计思路
- 面向过程的编程思想
- [读书笔记] - <Essential C++> - 第二章: 面向过程的编程风格
- 关于面向对象编程与面向过程编程的介绍与解释
- 《Essential C++》笔记二、面向过程的编程风格
- 面向对象的形式,面向过程的思想