python基础之生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式
直接上代码
1 # yield的表达式形式
2 def foo():
3 print('starting')
4 while True:
5 x=yield #默认返回为空,实际上为x=yield None
6 print('value',x)
7 g=foo()
8 print(g.__next__()) #停到yield位置,生成器初始化,遇到yield返回一个None
9 print('---分割线君---')
10 print(g.send(1)) #传值给yield,然后yield传给x,最后触发一次next,遇到yield返回一个None值并暂停
11 print('---分割线君---')
12 print(g.send(2))
输出结果
1 starting
2 None #运行g.__next__()的返回值
3 ---分割线君---
4 value 1 #运行g.send(1)的打印
5 None #运行g.send(1)的返回值,由yield返回
6 ---分割线君---
7 value 2 #运行g.send(2)的打印
8 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是否在这一行中,如果在,则把文件名发给阶段五
阶段五:收到文件名,打印结果
1 #应用:grep -rl 'root' /etc
2 import os
3 def init(func):
4 def wrapper(*args,**kwargs):
5 g=func(*args,**kwargs)
6 next(g)
7 return g
8 return wrapper
9 #阶段一:递归地找文件的绝对路径,把路径发给阶段二
10 @init
11 def search(target):
12 'search file abspath'
13 while True:
14 start_path=yield
15 g = os.walk(start_path)
16 for par_dir, _, files in g:
17 # print(par_dir,files)
18 for file in files:
19 file_path = r'%s\%s' % (par_dir, file)
20 target.send(file_path)
21 #阶段二:收到文件路径,打开文件获取获取对象,把文件对象发给阶段三
22 @init
23 def opener(target):
24 'get file obj: f=open(filepath)'
25 while True:
26 file_path=yield
27 with open(file_path,encoding='utf-8') as f:
28 target.send((file_path,f))
29
30 #阶段三:收到文件对象,for循环读取文件的每一行内容,把每一行内容发给阶段四
31 @init
32 def cat(target):
33 'read file'
34 while True:
35 filepath,f=yield
36 for line in f:
37 res=target.send((filepath,line))
38 if res:
39 break
40
41 #阶段四:收到一行内容,判断root是否在这一行中,如果在,则把文件名发给阶段五
42 @init
43 def grep(target,pattern):
44 'grep function'
45 tag=False
46 while True:
47 filepath,line=yield tag #target.send((filepath,line))
48 tag=False
49 if pattern in line:
50 target.send(filepath)
51 tag=True
52 #阶段五:收到文件名,打印结果
53 @init
54 def printer():
55 'print function'
56 while True:
57 filename=yield
58 print(filename)
59
60 start_path1=r'C:\Users\Administrator\PycharmProjects\python5期\a'
61 start_path2=r'C:\Users\Administrator\PycharmProjects\python5期\a\b'
62 g=search(opener(cat(grep(printer(),'root'))))
63
64 print(g)
65 # g.send(start_path1)
66 g.send(start_path2)
内置函数
abs() 函数:返回数字的绝对值
语法:
1 abs( x ) #x -- 数值表达式
示例:
print(abs(-9))
print(abs(5.5))
print(abs(45))
all() 函数:判断给定的可迭代参数 iterable 中的所有元素是否不为 0、''、False 或者 iterable 为空,如果是返回 True,否则返回 False
语法:
1 all(iterable) #iterable元组或列表
示例:
1 all(['a', 'b', 'c', 'd']) # 列表list,元素都不为空或0,结果返回True
2 all(['a', 'b', '', 'd']) # 列表list,存在一个为空的元素,结果返回False
3 all([0, 1,2, 3]) # 列表list,存在一个为0的元素,结果返回False
4 all(('a', 'b', 'c', 'd')) # 元组tuple,元素都不为空或0,结果返回True
5 all(('a', 'b', '', 'd')) # 元组tuple,存在一个为空的元素,结果返回False
6 all((0, 1,2, 3)) # 元组tuple,存在一个为0的元素,结果返回False
7 all([]) # 空列表,结果返回True
8 all(()) # 空元组,结果返回True
any() 函数:判断给定的可迭代参数 iterable 是否全部为空对象,如果都为空、0、false,则返回 False,如果不都为空、0、false,则返回 True
语法:
1 any(iterable) #iterable元组或列表
示例:
1 any(['a', 'b', 'c', 'd']) # 列表list,元素都不为空或0,结果返回True
2 any(['a', 'b', '', 'd']) # 列表list,存在一个为空的元素,结果返回True
3 any([0, '', False]) # 列表list,元素全为0,'',false,结果返回False
4 any(('a', 'b', 'c', 'd')) # 元组tuple,元素都不为空或0,结果返回True
5 any(('a', 'b', '', 'd')) # 元组tuple,存在一个为空的元素,结果返回True
6 any((0, '', False)) # 元组tuple,元素全为0,'',false,结果返回False
7 any([]) # 空列表,结果返回False
8 any(()) # 空元组,结果返回False
进制转换函数:十进制转二进制bin()、十进制转八进制oct()、十进制转十六进制hex()
语法:
1 bin(x)
2 oct(x) #x为int或者long int
3 hex(x)
示例:
1 bin(3)
2 oct(9)
3 hex(13)
bool()函数:布尔值使用常量True和False来表示
语法:
1 bool(x) #x为任意值
示例:
bool(0) #False
bool("abc") #True
bool("") #False
bool([]) #False
bool() #False
bytes()函数:返回一个新的不可修改字节数组
语法:
1 #常用
2 bytes(string,encoding)
示例:
1 print(bytes('sss',encoding='utf-8'))
2 #等同于下面
3 print('sss'.encode('utf-8'))
help()函数:函数用于查看函数或模块用途的详细说明。
语法:
1 help(x)
示例:
help('sys') # 查看 sys 模块的帮助
help('str') # 查看 str 数据类型的帮助
help(a) # 查看列表 list 帮助信息
callable()函数:用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。对于函数, 方法, lambda 函式, 类, 以及实现了 __call__ 方法的类实例, 它都返回 True。
语法:
1 callable(object)
示例:
1 callable(abs) # 函数返回 True,或者自定义函数都返回True
chr()函数:用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符,对应ascii表
语法:
1 chr(i) #i为0-255数字,可以使10进制也可以是16进制
示例:
1 chr(0x30) #返回0
2 chr(66) #返回B
ord()函数:chr() 函数的配对函数,chr()传入数字返回对应字符,ord()传入字符返回数字
语法:
1 ord(c) #c为字符,只能是一个
示例:
ord('B') #返回66
ord('1') #返回49
complex()函数:用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数
语法:
1 complex([real[, imag]])
2 real -- int, long, float或字符串
3 imag -- int, long, float
示例:
1 x=1-2j #等同于x=complex(1-2j)
2 print(x.real) #显示实部
3 print(x.imag) #显示虚部
int()函数:用于将一个字符串会数字转换为整型
语法:略
示例:略
dict()函数:用于创建一个字典
语法:略
示例:略
tuple()函数:将列表、字典或集合转换为元组
语法:略
示例:略
list()函数: 用于将元组、字典或集合转换为列表
语法:略
示例:略
set()函数:创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
语法:略
示例:略
str()函数:将对象转化为适于人阅读的形式。
语法:略
示例:略
dir()函数:不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息
语法:
1 dir(object)
示例:
1 import os
2 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基础之生成器表达式形式、面向过程编程、内置函数部分的更多相关文章
- Python基础学习笔记(八)常用字典内置函数和方法
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-dictionary.html 3. http://www.lia ...
- Python基础学习笔记(七)常用元组内置函数
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxue ...
- Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 # yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield No ...
- Day06:迭代器,生成器,生成表达式,面向过程编程,包及常用模块
今日内容:1.迭代器(****)2.生成器(***)3.生成器表达式(*****)4.面向过程编程(*****)5.包的使用(***)6.常用模块 logging (*****) re ( ...
- Python中生成器,迭代器,以及一些常用的内置函数.
知识点总结 生成器 生成器的本质就是迭代器. 迭代器:Python中提供的已经写好的工具或者通过数据转化得来的. 生成器:需要我们自己用Python代码构建的 创建生成器的三种方法: 通过生成器函数 ...
- python成长之路第三篇(3)_内置函数及生成器迭代器
打个广告欢迎加入linux,python资源分享群群号:478616847 目录: 1.lambda表达式 2.map内置函数 3.filter内置函数 4.reduce内置函数 5.yield生成器 ...
- Python基础编程 内置函数
内置函数 内置函数(一定记住并且精通) print()屏幕输出 int():pass str():pass bool():pass set(): pass list() 将一个可迭代对象转换成列表 t ...
- python 迭代器(一):迭代器基础(一) 语言内部使用 iter(...) 内置函数处理可迭代对象的方式
简介 在 Python 中,所有集合都可以迭代.在 Python 语言内部,迭代器用于支持: 1.for 循环2.构建和扩展集合类型3.逐行遍历文本文件4.列表推导.字典推导和集合推导5.元组拆包6. ...
- 人生苦短之我用Python篇(深浅拷贝、常用模块、内置函数)
深浅拷贝 有时候,尤其是当你在处理可变对象时,你可能想要复制一个对象,然后对其做出一些改变而不希望影响原来的对象.这就是Python的copy所发挥作用的地方. 定义了当对你的类的实例调用copy.c ...
随机推荐
- 在页面rem布局中用到的js代码
在你的页面加入以下代码,就初步搞定了 function fontSize() { var view_width = document.getElementsByTagName('html')[0].g ...
- bootstrap导航栏的辛酸史
昨天本来想完成test10的页面内容的,但是给老铁拉出去打麻将呢.不过还好昨天写了一些内容.现在奉上.不作更改. 今天完成的事情:(实现了test9的响应式导航栏的垂直平分和下拉列表的居中问题.) 我 ...
- 【起航计划 021】2015 起航计划 Android APIDemo的魔鬼步伐 20 App->Intents createChooser
Intents 这个例子的代码非常简单: public void onGetMusic(View view) { Intent intent = new Intent(Intent.ACTION_GE ...
- Struts_ActionWildcard_通配符配置
使用通配符,将配置量降到最低 不过,一定要遵守“约定由于配置”的原则 struts2.xml <?xml version="1.0" encoding="UTF-8 ...
- 使用QJM实现HDFS的HA配置
使用QJM实现HDFS的HA配置 1.背景 hadoop 2.0.0之前,namenode存在单点故障问题(SPOF,single point of failure),如果主机或进程不可用时,整个集群 ...
- 中兴ZXR10 GER4核心路由器配置案例
Connecting to 192.168.100.2:23...Connection established.To escape to local shell, press 'Ctrl+Alt+]' ...
- ARM实验5 —— 按键中断实验
key_int按键中断实验 实验内容: 通过开发板上的按键中断控制led灯进行跑马灯并打印信息. 通过简单事例说明猎户座4412处理器的GIC中断处理的应用,设置key2按键连接的引脚为中断模式,当识 ...
- 【js基础修炼之路】--创建文档碎片document.createDocumentFragment()
讲这个方法之前,我们应该先了解下插入节点时浏览器会做什么. 在浏览器中,我们一旦把节点添加到document.body(或者其他节点)中,页面就会更新并反映出这个变化,对于 ...
- 初学React:组件的样式
React中组件的样式有三种: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- 【洛谷4459】[BJOI2018] 双人猜数游戏(动态规划)
点此看题面 大致题意: 一直有两个数\(m,n\),已知\(s\le m\le n\),且\(Alice\)和\(Bob\)二个"最强大佬"各知道\(mn\)和\(m+n\).每轮 ...