python生成器表达式yield,面向过程编程,部分内置函数
yield生成器表达式的基本形式
# def foo(): # print('starting') # while True: # x=yield # print('value:',x) # # g=foo() # print(next(g)) # print(g.send(1)) # print(g.send(2)) #next(g)执行函数yield返回默认值None;print(g.send(1))先将1传值给x,打印x运行到下一个yield,返回默认 #值None
# def init(func): # def wrapper(*args,**kwargs): # g=func(*args,**kwargs) # next(g) # return g # return wrapper # @init 初始化eater函数,相当于eater.send(None) # def eater(name): # print('%s start to eat'%name) # list=[] # while True: # food=yield list # list.append(food) # print('%s have eaten %s'%(name,food)) # e=eater('xiaoh') # print(e.send('apple')) # print(e.send('banana'))
import os g=os.walk(r'F:\Pycharmprojects') #g属性是generator也就是生成器,因此可是用for迭代取出内容 print(g) for i in g:print(i)执行结果 <generator object walk at 0x000001F352E42F68> ('F:\\Pycharmprojects', ['.idea', '0614', '0615', '0616', '0619'], ['1.4.py', 'asdasd.txt', 'asdasdswap.txt', 'bonus.py', 'class3', 'classwork day5.py', 'day3 homework1', 'day3 homework2', 'day3 homework3', 'homework 0612.py', 'practice1.py', 'practice2.py', 'shopping cart.py', 'test']) ('F:\\Pycharmprojects\\.idea', [], ['misc.xml', 'modules.xml', 'Pycharmprojects.iml', 'workspace.xml']) ('F:\\Pycharmprojects\\0614', [], ['classtest.py', 'homework.py', 'idpass', 'idpass.txt']) ('F:\\Pycharmprojects\\0615', [], ['a.txt', 'daily.txt', 'homework in class.py', 'homework.py', 'idpd.txt', 'makecache.txt']) ('F:\\Pycharmprojects\\0616', [], ['a.txt', 'classtest.py', 'stafftable.txt', '周末作业.py']) ('F:\\Pycharmprojects\\0619', [], ['classtest.py'])
import os g=os.walk(r'F:\Pycharmprojects' for par_dir,_,files in g:for file in files:f=r'%s\%s'%(par_dir,file)print(f)执行结果 F:\Pycharmprojects\1.4.py F:\Pycharmprojects\asdasd.txt F:\Pycharmprojects\asdasdswap.txt F:\Pycharmprojects\bonus.py F:\Pycharmprojects\class3 F:\Pycharmprojects\classwork day5.py F:\Pycharmprojects\day3 homework1 F:\Pycharmprojects\day3 homework2 F:\Pycharmprojects\day3 homework3 F:\Pycharmprojects\homework 0612.py F:\Pycharmprojects\practice1.py F:\Pycharmprojects\practice2.py F:\Pycharmprojects\shopping cart.py F:\Pycharmprojects\test F:\Pycharmprojects\.idea\misc.xml F:\Pycharmprojects\.idea\modules.xml F:\Pycharmprojects\.idea\Pycharmprojects.iml F:\Pycharmprojects\.idea\workspace.xml F:\Pycharmprojects\0614\classtest.py F:\Pycharmprojects\0614\homework.py F:\Pycharmprojects\0614\idpass F:\Pycharmprojects\0614\idpass.txt F:\Pycharmprojects\0615\a.txt F:\Pycharmprojects\0615\daily.txt F:\Pycharmprojects\0615\homework in class.py F:\Pycharmprojects\0615\homework.py F:\Pycharmprojects\0615\idpd.txt F:\Pycharmprojects\0615\makecache.txt F:\Pycharmprojects\0616\a.txt F:\Pycharmprojects\0616\classtest.py F:\Pycharmprojects\0616\stafftable.txt F:\Pycharmprojects\0616\周末作业.py F:\Pycharmprojects\0619\classtest.py
函数的参数传入,是函数的执行必须摄入的元素,而函数return/yield的返回值,是函数生成的结果,面向过程的思路就是,把程序的执行当做一串首尾相连的函数,一个函数摄入,生成的结果给另外一个函数使用,另外一个函数摄入再继续给下一个函数使用,以此循环直到目标结束。
举例:递归一个文件目录,找出其中含有指定内容的文件。
阶段一:递归地找文件的绝对路径,把路径发给阶段二
阶段二:收到文件路径,打开文件获取对象,把文件对象发给阶段三
阶段三:收到文件对象,for循环读取文件的每一行内容,把每一行内容发给阶段四
阶段四:收到一行内容,判断root是否在这一行中,如果在则把文件名发给阶段五
阶段五:收到文件名,打印结果
# import os # def init(func): # def wrapper(*args,**kwargs): # g=func(*args,**kwargs) # next(g) # return g # return wrapper #阶段一:递归地找文件的绝对路径,把路径发给阶段二 # @init # def search(target): # 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) #阶段二:收到文件路径,打开文件获取对象,把文件对象发给阶段三 # @init # def opener(target): # 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 # tag=False # if pattern in line: # target.send(filepath) # tag=True #阶段五:收到文件名,打印结果 # @init # def printer(): # 'print function' # while True: # filename=yield # print(filename) # start_path=r'' # g=search(opener(cat(grep(printer(),'root')))) # g.send(start_path)
内置函数
abxs()返回数字的绝对值
all()如果iterable的所有元素不为0、''、False或者iterable为空,all(iterable)返回True,否则返回False。空元组和空列表返回True
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', '', 'd')) # 元组tuple,存在一个为空的元素,结果返回False all((0,1,2,3)) # 元组tuple,存在一个为0的元素,结果返回False all([]) # 空列表,结果返回True all(()) # 空元组,结果返回True
bin()十进制数转换为二进制数
oct()十进制数转换为八进制数
hex()十进制数转换为十六进制数
bytes()将字符串转换为字节
divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)
print(divmod(7,2)) 结果 (3, 1)
any() 函数用于判断给定的可迭代参数 iterable 是否全部为空对象,如果都为空、0、false,则返回 False,如果不都为空、0、false,则返回 True
any(['a', 'b', 'c', 'd']) # 列表list,元素都不为空或0,结果返回True any(['a', 'b', '', 'd']) # 列表list,存在一个为空的元素,结果返回True any([0, 1, 2, 3]) # 列表list,存在一个为0的元素,结果返回True any(('a', 'b', '', 'd')) # 元组tuple,存在一个为空的元素,结果返回True any((0,1,2,3)) # 元组tuple,存在一个为0的元素,结果返回True any([]) # 空列表,结果返回False any(()) # 空元组,结果返回False
enumerate() 同时获得索引和值,可以接收第二个参数作为索引起始值
l=['a','b','c'] for i in enumerate(l,1):print(i) 执行结果 (1, 'a') (2, 'b') (3, 'c')
dic={'name':'xiaobai','age':22} #字典获得索引和KEY但KEY顺序可能会不同 for i in enumerate(dic):print(i)执行结果(0, 'name') (1, 'age')
eval()用来执行一个字符串表达式,并返回表达式的值
print(eval('3*3')) 执行结果 9
calllable()检查一个对象是否可调用,如果返回True,仍可能调用失败,如果返回False,肯定不会调用成功,
函数,方法,lambda函式,类,以及实现了__call__方法的类实例都会返回True
print(callable(7)) def fun1(a,b):return a+b print(callable(fun1)) 执行结果 False True
chr()用一个范围在0到255的整数作为参数返回一个对应的字符,参数可以是十进制数也可以是十六进制数
print(chr(0x30),chr(0x31),chr(0x61)) print(chr(48),chr(49),chr(97)) 执行结果 0 1 a 0 1 a
cmp(x,y)用于比较两个对象,如果x<y返回-1,如果x==y返回0,如果x>y返回1
frozenset() #返回一个冻结的集合,集合不能删除或者增加任何元素
print(frozenset(range(20))) 执行结果 frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19})
#isinstance() 判断一个对象是否是一个已知的类型返回布尔值
a=9 print(isinstance(a,int)) #判断a是否为整型 print(isinstance(a,(str,int,list))) #判断a是否为字符串,整型,列表 执行结果 True True
pow(x,y[,z]) z不存在时返回x的y次方,如果z存在返回(x**y)%z
print(pow(3,2)) print(pow(3,2,2)) 执行结果 9 1
for i in range(5,0,-2):print(i) l1=[3,1,5,9] print(list(reversed(l1))) #倒序 执行结果 5 3 1 [9, 5, 1, 3]
print(round(4.5637,3)) #round四舍五入,保留位数 执行结果 4.564
slice(start,stop[,step] )切片函数
l=['a1','a2','a3','a4','a5','a6','a7'] x=slice(2,5,2) print(l[x]) 执行结果 ['a3', 'a5']
zip()将可迭代对象作为参数,将对象中对应的元素打包成一个元祖,然后返回由这些元组组成的列表。如果各个
迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用*号操作符可以将元组解压为列表
s='hello' l=[1,2,3,4,5,6] print(zip(s,l)) for i in zip(s,l):print(i) 执行结果 <zip object at 0x0000020B95C4BE88> ('h', 1) ('e', 2) ('l', 3) ('l', 4) ('o', 5)
dict()用于创建一个字典
print(dict(a=1,b=2,c=3)) print(dict(zip(['one','two','three'],[1,2,3]))) print(dict([('one',1),('two',2),('three',3)])) 执行结果 {'a': 1, 'b': 2, 'c': 3} {'one': 1, 'two': 2, 'three': 3} {'one': 1, 'two': 2, 'three': 3}
dir()函数不带参数时返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。
如果参数包含方法__dir__(),则方法将被调用。如果参数不含__dir__(),该方法将最大限度地手机参数信息
open()函数用于打开一个文件
模式:r以只读方式打开文件,文件指针放在文件的开头,默认模式
rb以二进制打开一个文件用于只读,文件指针放在文件开头
r+打开一个文件用于读写,文件指针在文件的开头
rb+以二进制格式大爱一个文件用于读写,文件指针放在文件开头
w打开一个文件用于写入,如果该文件存在则将其覆盖,如果文件不存在则创建
wb以二进制格式打开一个文件用于写入,如果文件存在则覆盖,如果文件不存在则创建
w+打开一个文件用于读写。如果文件存在则将其覆盖,如果文件不存在则创建
wb+以二进制格式打开一个文件用于读写,如果文件存在则将其覆盖,如果不存在则创建
a打开一个文件用于追加。如果文件存在文件指针放在文件结尾。如果文件不存在则创建并写入
ab以二进制格式打开一个文件用于追加。如果文件存在,文件指针放在文件结尾,如果不存在则创建
并写入
a+打开一个文件用于读写,如果文件存在,文件指针则放在文件结尾,如果文件不存在创建并写入
ab+以二进制格式打开一个文件用于追加,如果文件存在文件指针放在文件结尾,如果不存在创建并写入
iter()函数用来生成迭代器
next()返回迭代器的下一个项目
filter()函数用于过滤序列,过滤掉不符合条件的元素,返回符合条件元素组成的新列表;接受两个参数
第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,将返回的布尔值放到新列表中
l=[1,2,3,4,5,6,7,8,9] b=list(filter(lambda x:x%2==1,l)) print(b)
执行结果 [1, 3, 5, 7, 9]
map()会根据提供的函数对制定序列做映射,第一个参数为函数,第二个为列表或元祖,返回新列表
c=list(map(lambda x,y:x+y,[1,3,5,7,9],[2,4,6,8,10])) print(c) 执行结果 [3, 7, 11, 15, 19]
max()内置for循环
salaries={'xiaobai':3000,'xiaohei':1000000,'xiaohong':10000,'xiaozi':2000} print(max(salaries)) t=zip(salaries.values(),salaries.keys()) print(max(t)) print(max(salaries,key=lambda x:salaries[x])) 执行结果 xiaozi (1000000, 'xiaohei') xiaohei 先for会报错 salaries={'xiaobai':3000,'xiaohei':1000000,'xiaohong':10000,'xiaozi':2000} print(max(salaries)) t=zip(salaries.values(),salaries.keys()) for i in t:print(i) print(max(t)) 执行结果 Traceback (most recent call last):File "F:/Pycharmprojects/0620/classtest.py", line 116, in <module>print(max(t)) ValueError: max() arg is an empty sequence xiaozi (3000, 'xiaobai') (1000000, 'xiaohei') (10000, 'xiaohong') (2000, 'xiaozi')
#reduce() from functools import reduce cm=reduce(lambda x,y:x+y,range(100)) print(cm) 执行结果 4950
转载于:https://www.cnblogs.com/c491873412/p/7050285.html
python生成器表达式yield,面向过程编程,部分内置函数相关推荐
- Python基础11-函数式编程与内置函数
目录 函数即变量 lambda关键字定义匿名函数 高阶函数 内置函数map 内置函数filter 内置函数reduce 内置函数看文档 函数即变量 书接上回,Python里面,函数就是变量,可以被当成 ...
- python编程内置函数使用方法_python编程(4)--内置函数
函数,通常称为方法,是一种将自变量到因变量的映射(y = f(x)).在python里用def或者lambda去构造,语法如下. def f(x): #x -- 输入 y = x ...
- day16——函数式编程和内置函数
编程的方法论 面向过程:找到问题的 函数式:不可变.不用变量保存状态.不修改变量 面向对象: 高阶函数: 满足俩个特性任意一个即为高阶函数 1.函数的传入参数是一个函数名 2.函数的返回值是一个函数名 ...
- 【Python基础】Python 打基础一定要吃透这 5 个内置函数
出品:Python数据之道 作者:Peter 编辑:Lemon 本文中介绍 Python 中 5 个高阶内置函数,它们不仅能够帮助我们了解 Python 的数据结构,同时也能加快数据处理的速度,体会到 ...
- Python中冷门但非常好用的内置函数
Python中有许多内置函数,不像print.len那么广为人知,但它们的功能却异常强大,用好了可以大大提高代码效率,同时提升代码的简洁度,增强可阅读性 Counter collections在pyt ...
- python 元类的call_python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法...
python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法 一, 内置函数补充 1,isinstance(obj,cls)检查 ...
- python中求包含5的数_Python 内置函数 ( ) 可以返回列表、元组、字典、集合、字符串以及 range 对象中元素个数。_学小易找答案...
[简答题]实例1:求两数相除的结果. 先后输入2个数据,计算第一个数除以第二个数的结果. 要求能够处理输入数据为非数字.除数为零.文件末尾EndOfFile 和用户使用Ctrl + C 命令终止程序等 ...
- and true和if都是python语言的保留字_python自学 第三章 python语言基础之保留字、标识符与内置函数...
一.保留字(关键字) 保留字是 python 语言中一些已经被赋予特定意义的单词,这就要求开发者在开发程序时,不能用这些保留字作为标识符给变量.函数.类.模板以及其他对象命名. Python 保留字一 ...
- python语音识别的第三方库_python标准库+内置函数+第三方库: 7.音频处理
python标准库+内置函数+第三方库 欲善其事,必先利其器 这其器必是python的标准库+内置函数,话说许多第三方库, 也是对标准库的使用,进行封装,使得使用起来更方便. 这些库以使用场景来分类: ...
- python字符串(连载二)|字符串内置函数原来还可以这么玩!
此系列连载涵盖 字符串,列表,字典,元组,集合等内置函数的基本用法.每次更新十个函数的基本用法.(建议收藏哈) 有福利哦,小编整理了些python学习资料,需要的自行领取!获取方式在文末哈! 目录: ...
最新文章
- Python爬虫与一汽项目【三】爬取中国五矿集团采购平台
- 可可:框架和边界之间有什么区别?
- java B2B2C Springcloud电子商城系统-通过消息队列传输zipkin日志
- Crawler:反爬虫之基于urllib库+伪装浏览器方式实现从各种网站上(以百度贴吧为例)获得你喜欢的照片下载到本地电脑上
- Linux下C语言的文件操作
- jwt用户注销 PHP,flask_jwt 如何实现用户注销
- 在Kubernetes集群上部署和管理JFrog Artifactory
- java swing 图片旋转_Java图片旋转,背景透明化
- django 热启动_传统的Web框架如何部署在Serverless架构上(以Flask为例)
- 常用数据结构以及数据结构的排序算法
- Building libmesh with Petsc support
- 冒险岛062mysql_冒险岛单机版062
- java里VO是什么?
- python3 urlencode_Python3 parse.urlencode() 与parse.unquote()
- win11怎么看激活状态
- BZOJ2794 Cloakroom【有限制的背包问题】
- 随机生成10位数QQ号.c
- SIM7600模块固件升级(模块自身升级)
- 如何让微信号开通检测软件替你顶起一片天?
- 利用python在网上接单赚钱,兼职也能月入过万,赶紧学起来!