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,面向过程编程,部分内置函数相关推荐

  1. Python基础11-函数式编程与内置函数

    目录 函数即变量 lambda关键字定义匿名函数 高阶函数 内置函数map 内置函数filter 内置函数reduce 内置函数看文档 函数即变量 书接上回,Python里面,函数就是变量,可以被当成 ...

  2. python编程内置函数使用方法_python编程(4)--内置函数

    ​     函数,通常称为方法,是一种将自变量到因变量的映射(y = f(x)).在python里用def或者lambda去构造,语法如下. def f(x):      #x -- 输入 y = x ...

  3. day16——函数式编程和内置函数

    编程的方法论 面向过程:找到问题的 函数式:不可变.不用变量保存状态.不修改变量 面向对象: 高阶函数: 满足俩个特性任意一个即为高阶函数 1.函数的传入参数是一个函数名 2.函数的返回值是一个函数名 ...

  4. 【Python基础】Python 打基础一定要吃透这 5 个内置函数

    出品:Python数据之道 作者:Peter 编辑:Lemon 本文中介绍 Python 中 5 个高阶内置函数,它们不仅能够帮助我们了解 Python 的数据结构,同时也能加快数据处理的速度,体会到 ...

  5. Python中冷门但非常好用的内置函数

    Python中有许多内置函数,不像print.len那么广为人知,但它们的功能却异常强大,用好了可以大大提高代码效率,同时提升代码的简洁度,增强可阅读性 Counter collections在pyt ...

  6. python 元类的call_python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法...

    python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法 一, 内置函数补充 1,isinstance(obj,cls)检查 ...

  7. python中求包含5的数_Python 内置函数 ( ) 可以返回列表、元组、字典、集合、字符串以及 range 对象中元素个数。_学小易找答案...

    [简答题]实例1:求两数相除的结果. 先后输入2个数据,计算第一个数除以第二个数的结果. 要求能够处理输入数据为非数字.除数为零.文件末尾EndOfFile 和用户使用Ctrl + C 命令终止程序等 ...

  8. and true和if都是python语言的保留字_python自学 第三章 python语言基础之保留字、标识符与内置函数...

    一.保留字(关键字) 保留字是 python 语言中一些已经被赋予特定意义的单词,这就要求开发者在开发程序时,不能用这些保留字作为标识符给变量.函数.类.模板以及其他对象命名. Python 保留字一 ...

  9. python语音识别的第三方库_python标准库+内置函数+第三方库: 7.音频处理

    python标准库+内置函数+第三方库 欲善其事,必先利其器 这其器必是python的标准库+内置函数,话说许多第三方库, 也是对标准库的使用,进行封装,使得使用起来更方便. 这些库以使用场景来分类: ...

  10. python字符串(连载二)|字符串内置函数原来还可以这么玩!

    此系列连载涵盖 字符串,列表,字典,元组,集合等内置函数的基本用法.每次更新十个函数的基本用法.(建议收藏哈) 有福利哦,小编整理了些python学习资料,需要的自行领取!获取方式在文末哈! 目录: ...

最新文章

  1. Python爬虫与一汽项目【三】爬取中国五矿集团采购平台
  2. 可可:框架和边界之间有什么区别?
  3. java B2B2C Springcloud电子商城系统-通过消息队列传输zipkin日志
  4. Crawler:反爬虫之基于urllib库+伪装浏览器方式实现从各种网站上(以百度贴吧为例)获得你喜欢的照片下载到本地电脑上
  5. Linux下C语言的文件操作
  6. jwt用户注销 PHP,flask_jwt 如何实现用户注销
  7. 在Kubernetes集群上部署和管理JFrog Artifactory
  8. java swing 图片旋转_Java图片旋转,背景透明化
  9. django 热启动_传统的Web框架如何部署在Serverless架构上(以Flask为例)
  10. 常用数据结构以及数据结构的排序算法
  11. Building libmesh with Petsc support
  12. 冒险岛062mysql_冒险岛单机版062
  13. java里VO是什么?
  14. python3 urlencode_Python3 parse.urlencode() 与parse.unquote()
  15. win11怎么看激活状态
  16. BZOJ2794 Cloakroom【有限制的背包问题】
  17. 随机生成10位数QQ号.c
  18. SIM7600模块固件升级(模块自身升级)
  19. 如何让微信号开通检测软件替你顶起一片天?
  20. 利用python在网上接单赚钱,兼职也能月入过万,赶紧学起来!

热门文章

  1. mongodb聚合内存不足解决方案
  2. xml中处理特殊字符和转义字符
  3. 在OpenStack虚拟机实例中创建swap分区的一种方法
  4. 3D顶点转换和法线转换
  5. 适合用于UI设计器/开发人员探索您或他人创建的UI的一款UI设计开发软件——QuickLens for Mac
  6. Master of Typing 3 for mac (打字大师3)支持m1
  7. 一招教你查看Mac本机WiFi密码
  8. EasyRecovery深度扫描以恢复桌面遗失数据的方法
  9. 在windows2012R2安装SQLSERVER2012失败的问题之解决
  10. php生成透明png图像 无锯齿