生成器表达式形式

直接上代码

 # 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 file 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元组或列表

示例:

 all(['a', 'b', 'c', 'd'])      # 列表list,元素都不为空或0,结果返回True
all(['a', 'b', '', 'd']) # 列表list,存在一个为空的元素,结果返回False
all([0, 1,2, 3]) # 列表list,存在一个为0的元素,结果返回False
all(('a', 'b', 'c', 'd')) # 元组tuple,元素都不为空或0,结果返回True
all(('a', 'b', '', 'd')) # 元组tuple,存在一个为空的元素,结果返回False
all((0, 1,2, 3)) # 元组tuple,存在一个为0的元素,结果返回False
all([]) # 空列表,结果返回True
all(()) # 空元组,结果返回True

any() 函数:判断给定的可迭代参数 iterable 是否全部为空对象,如果都为空、0、false,则返回 False,如果不都为空、0、false,则返回 True

语法:

 any(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(x)
oct(x) #x为int或者long int
hex(x)

示例:

 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()函数:返回一个新的不可修改字节数组

语法:

1 #常用
bytes(string,encoding)

示例:

 print(bytes('sss',encoding='utf-8'))
#等同于下面
print('sss'.encode('utf-8'))

help()函数:函数用于查看函数或模块用途的详细说明。

语法:

 help(x)

示例:

help('sys')             # 查看 sys 模块的帮助
help('str') # 查看 str 数据类型的帮助
help(a) # 查看列表 list 帮助信息

callable()函数:用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。对于函数, 方法, lambda 函式, 类, 以及实现了 __call__ 方法的类实例, 它都返回 True。

语法:

 callable(object)

示例:

 callable(abs)             # 函数返回 True,或者自定义函数都返回True

chr()函数:用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符,对应ascii表

语法:

 chr(i)  #i为0-255数字,可以使10进制也可以是16进制

示例:

 chr(0x30)    #返回0
chr(66)  #返回B

ord()函数:chr() 函数的配对函数,chr()传入数字返回对应字符,ord()传入字符返回数字

语法:

 ord(c)  #c为字符,只能是一个

示例:

ord('B')  #返回66
ord('')  #返回49

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__(),该方法将最大限度地收集参数信息

语法:

 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开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分的更多相关文章

  1. python基础之生成器表达式形式、面向过程编程、内置函数部分

    生成器表达式形式 直接上代码 1 # yield的表达式形式 2 def foo(): 3 print('starting') 4 while True: 5 x=yield #默认返回为空,实际上为 ...

  2. Python中生成器,迭代器,以及一些常用的内置函数.

    知识点总结 生成器 生成器的本质就是迭代器. 迭代器:Python中提供的已经写好的工具或者通过数据转化得来的. 生成器:需要我们自己用Python代码构建的 创建生成器的三种方法: 通过生成器函数 ...

  3. Python基础编程 内置函数

    内置函数 内置函数(一定记住并且精通) print()屏幕输出 int():pass str():pass bool():pass set(): pass list() 将一个可迭代对象转换成列表 t ...

  4. Python基础学习笔记(八)常用字典内置函数和方法

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-dictionary.html 3. http://www.lia ...

  5. Python基础学习笔记(七)常用元组内置函数

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxue ...

  6. python 迭代器(一):迭代器基础(一) 语言内部使用 iter(...) 内置函数处理可迭代对象的方式

    简介 在 Python 中,所有集合都可以迭代.在 Python 语言内部,迭代器用于支持: 1.for 循环2.构建和扩展集合类型3.逐行遍历文本文件4.列表推导.字典推导和集合推导5.元组拆包6. ...

  7. 跟着ALEX 学python day3集合 文件操作 函数和函数式编程 内置函数

    声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  一. 集合 集合是一个无序的,不重复的数据组合,主要作用如下 1.去重 把一个列表变成集合 ,就自动去重 ...

  8. day5--装饰器函数的信息打印,迭代器,生成器,列表推导式,内置函数

    本文档主要内容: 一 装饰器函数的信息打印 二 迭代器 三 生成器 四 生成器表达式和列表推导式 五 内置函数 一 装饰器函数的信息打印 一个函数一旦被装饰器给装饰后,这个函数的信息使用原来的命令打印 ...

  9. day12——生成器、推导式、简单内置函数

    day12 生成器 迭代器:python中内置的一种节省空间的工具 生成器的本质就是一个迭代器 迭代器和生成器的区别:一个是pyhton自带的,一个是程序员自己写的 写一个生成器 基于函数 在函数中将 ...

随机推荐

  1. 局部性原理的点滴应用场景 use of localityprinciple

    话说九月份博士入学面试的时候被问到了一个问题:请说明一下局部性原理在计算机科学中的应用场景?(哈哈,不记得怎么问的了,大概是这个意思)但是巴拉巴拉整半天却也只说出了一个Cache,后来补充的也都是跟C ...

  2. HDFS error

    错误信息描述: HDFS error: could only be replicated to 0 nodes, instead of 1;以及由此衍生出来的种种奇葩问题(具体的错误信息见后面),下面 ...

  3. Tunnel Warfare(HDU1540+线段树+区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540 题目: 题意:总共有n个村庄,有q次操作,每次操作分为摧毁一座村庄,修复一座村庄,和查询与询问的 ...

  4. js基础知识点收集

    js基础知识点收集 js常用基本类型 function show(x) { console.log(typeof(x)); // undefined console.log(typeof(10)); ...

  5. netcat、nc工具随记

    netcat又称nc工具,其最主要的作用就是建立连接并返回两个数据流,剩下的就看各位的想象力了,想象力是很重要的,这也是这个工具的强大之处的所在,所以重要的东西才要说三遍,想象力! 具体参数如下: - ...

  6. ThinkPHP5 正则验证中有“|”时提示“规则错误”的解决方案

    正则规则中有“|”时,会引起解析错误: 'regex:\d{3,4}[\s,-]?\d{7,8}|1[3,4,5,8]\d[\s,-]?\d{4}[\s,-]?\d{4}' 使用数组语法可以解决: [ ...

  7. mysql连接池优化笔记

    中间件mycat是一个高性能的分表分库读写分离的中间件,但配置不好的情况会出现很多性能问题. 1.mycat-web的监控的准确性有问题,1.6-RELEASE  ,1.0-SNAPSHOT (web ...

  8. C基础 时间业务实战代码

    引言 业务代码中遇到这样需求, 1. 二者是同一天吗, 2. 时间戳和时间串来回转, 3. 其它扩展需求 等. C写代码同样需要处理这方面时间问题. 本文就是为了解决这个问题. 相比其它时间库, 这里 ...

  9. CSS3 icon font

    大家都知道现在各个浏览器都支持CSS3的自定义字体(@font-face),包括IE6都支持,只是各自对字体文件格式的支持不太一样.那么对于网站中用到的各种icon,我们就可以尝试使用font来实现, ...

  10. css3属性书写的时候带的一些前缀的意思

    使用css3属性时,大部分都要带这些识别前缀,早期点的浏览器才能识别.现在最新版的浏览器基本都支持css3 基本都不用写前缀 ,写前缀是为了向前兼容老版本的浏览器而已. -ms-transform: ...