day14,函数的使用方法:生成器表达式,生成器函数
生成器表达式:
#列表推导式
# y = [1,2,3,4,5,6,7,8]
# x = [1,4,9,16,25,36,49,64]
# x = []
# for i in y:
# x.append(i*i)
# print(x)
# x = [i*i for i in y]
# print(x) #range(100)
# x2 = [i/2 for i in range(100)]
# print(x2) #生成器表达式 # x = [i*i for i in y]
# print(x)
# g = (i*i for i in y)
# print(g)
# print(list(g))
# for i in g:
# print(i) #
# l = ['鸡蛋%s'%i for i in range(10)]
# print(l)
# laomuji = ('鸡蛋%s'%i for i in range(10))
# for egg in laomuji:
# print(egg)
生成器函数:
# def cloth():
# for i in range(100):
# yield '衣服%s'%i
#
# g = cloth()
# for i in g:
# print(i) # for i in range(100):
# print(g.__next__())
#
# for i in range(50):
# print(g.__next__()) #监听文件末尾追加的例子
# def tail():
# f = open('文件','r',encoding='utf-8')
# f.seek(0,2)
# while True:
# line = f.readline()
# if line:
# yield line
# import time
# time.sleep(0.1)
# g = tail()
# for i in g:
# print(i.strip()) # send
def func():
print('*'*10)
a = yield 5
print('a : ',a)
yield 10
# g = func()
# num = g.__next__()
# # print(num)
# num2 = g.send('alex')
# num2 = g.send('aaaa')
# print(num2) #从哪一个yield开始接着执行,就把一个值传给了那个yield
#send不能用在第一个触发生成器
#生成器函数中有多少个yield就必须有多少个next+send def averager():
total = 0.0
count = 0
average = None
while True:
term = yield average
total += term
count += 1
average = total/count
#
# g_avg = averager()
# g_avg.__next__()
# print(g_avg.send(10))
# print(g_avg.send(30))
# print(g_avg.send(20))
# print(g_avg.send(100))
# print(g_avg.send(200))
def init(func): #生成器的预激装饰器
def inner(*args,**kwargs):
g = func(*args,**kwargs) #func = averager
g.__next__()
return g
return inner @init
def averager():
total = 0.0
count = 0
average = None
term = yield average
total += term
count += 1
average = total/count
yield average # g_avg = averager()
# print(g_avg.send(10))
# print(g_avg.send(30)) #生成器函数 讲完了
#next
#进阶 send #网络编程 : ftp
def func():
a = 'AB'
b = 'CD'
yield from a
# for i in a:yield i
yield from b
# for i in b:yield i 'A','B','C','D'
#返回了4次
g = func()
# for i in g:
# print(i) #生成器函数:生成一个生成器的函数
#生成器的本质参数迭代器
#生成器函数的特点:
# 带有yield关键字
# 且调用之后,函数内的代码不执行 #触发执行的方式:
#next
#send (选会) :send(None) == __next__(),send在next的基础上传一个值到生成器函数内部
#send操作不能用在生成器使用的第一次
#for循环 def cloth():
for i in range(100):
yield '衣服%s'%i g1 = cloth()
g2 = cloth()
print(g.__next__())
print(g.__next__())
# for c in cloth():
# print(c)
# print(g.__next__())
# for i in range(10):
# print(g.__next__())
# for i in range(100):
# print(g.__next__())
# for c in g:
# print(c)
# if c.endswith('80'):
# break
# print(g.__next__())
# print('*'*20)
# for c in g:
# print(c) # g.__next__() #== next(g)
# g.__iter__() #== iter(g)
#内置函数
推导式拓展:
# new_l = []
# for i in range(30):
# if i%3 == 0:
# new_l.append(i)
# print(new_l)
#
# print(list(range(0,30,3)))
# print([i for i in range(30) if i%3 == 0])
# [i*i for i in range(30) if i%3 == 0]
# def square(x):
# return x*x
# [square(i) for i in range(30) if i%3 == 0] # names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
# ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
# ret = (name for name_lst in names for name in name_lst if name.count('e') >= 2)
# print(ret)
# 不利于代码可读,但是代码简洁 # mcase = {'a': 10, 'b': 34}
# mcase_frequency = {mcase[k]:k for k in mcase}
# print(mcase_frequency) # mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
# mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase}
# print(mcase_frequency) squared = {x**2 for x in [1, -1, 2]} #{1,4}
print(squared)
# Output: set([1, 4]) #考试
#2:00 --> 敲敲代码
#明天 :
# 装饰器剩余的两个例子
# 今天的考试内容明天要讲
#明天的默写:
#[i/2 for i in range(100)]
#[i*i for i in range(30) if i % 3 is 0]
# 修改成生成器表达式,且要求讲使用方法默写出来
day14,函数的使用方法:生成器表达式,生成器函数的更多相关文章
- python之旅:三元表达式、列表推导式、生成器表达式、函数递归、匿名函数、内置函数
三元表达式 #以下是比较大小,并返回值 def max2(x,y): if x > y: return x else: return y res=max2(10,11) print(res) # ...
- [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口
函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...
- web报表工具FineReport经常使用函数的使用方法总结(文本函数)
文本函数 CHAR CHAR(number):依据指定数字返回相应的字符.CHAR函数可将计算机其它类型的数字代码转换为字符. Number:用于指定字符的数字,介于1Number:用于指定字符的数字 ...
- Python-全局函数(内置方法、内置函数)
Python有很多内置方法,这些都全局可用 abs() 求数值的绝对值,如果是复数则返回其模 print(abs(-17), abs(30.2), abs(3+4j)) # Python中复数表示为 ...
- python之序列去重以及生成器、生成器函数、生成器表达式与迭代器浅谈
首先要明确序列值类型是否可哈希,因为可哈希的值很简单就可以用 in /not in 写个生成器去判断,如果是不可哈希的就要去转换为可哈希的再用 in/not in 去判断 原地不可变类型(可哈希): ...
- python开发函数进阶:生成器表达式&各种推导式
一,生成器表达式 #生成器表达式比列表解析更省内存,因为惰性运算 #!/usr/bin/env python #_*_coding:utf-8_*_ new_2 = (i*i for i in ran ...
- Python基础之函数:6、异常相关和生成器对象、yield用法、生成器表达式
目录 一.异常常见类型 1.类型错误 2.缩进错误 3.索引错误 4.语法错误 5.属性错误 6.key键错误 二.异常处理语法结构 1.基本语法结构 2.查看错误类型 3.针对不同类型所作措施 4. ...
- Python 进阶_生成器 & 生成器表达式
目录 目录 相关知识点 生成器 生成器 fab 的执行过程 生成器和迭代器的区别 生成器的优势 加强的生成器特性 生成器表达式 生成器表达式样例 小结 相关知识点 Python 进阶_迭代器 & ...
- Python基础:08列表解析与生成器表达式
一:列表解析 列表解析(List comprehensions)来自函数式编程语言Haskell .它可以用来动态地创建列表.它在 Python 2.0 中被加入. 列表解析的语法: [exp ...
- Learn day5 迭代器\生成器\高阶函数\推导式\内置函数\模块(math.time)
1.迭代器 # ### 迭代器 """能被next调用,并不断返回下一个值的对象""" """ 特征:迭代器会 ...
随机推荐
- VUE (vue-cli)脚手架项目说明
1. 概述 1.1 说明 使用vue-cli快速创建的vue项目目录如下: build -- webpack相关配置以及服务启动文件,配置多依赖于下边的config文件夹中内容 config -- ...
- ProtocolError: <ProtocolError for 127.0.0.1/RPC2: 401 Unauthor.
安装cloudera-manager-agent报错 查看/var/log/cloudera-scm-agent.log 报错 Traceback (most recent call last): F ...
- 打包APP
记得之前网上也有app打包平台,但是都会有所限制,或者增加广告等等,这里呢,介绍一款工具,可以自己将网站打包成app. wex5 (WeX5开源免费跨端开发工具-html5 app开发就用WeX5)官 ...
- Confluence 6 附件存储文件系统的分级
从 Confluence 3.0 开始,附件的存储方式有了重大的改变和升级.如果你是从 Confluence 2.10 及其早期版本升级上来的,请参考 Upgrading Confluence 页面中 ...
- 【python】内存相关
1. /proc/pid/status 可以查看进程相关的详细信息,当内存异常时可查看 参考:http://blog.csdn.net/beckdon/article/details/4849190 ...
- border画梯形
<!doctype html><html lang="en"> <head> <meta charset="UTF-8&quo ...
- Nginx详解四:Nginx基础篇之目录和配置语法
一.安装目录 命令:rpm -ql nginx 二.编译参数 命令:nginx -V 三.Nginx基本配置语法 修改主配置文件 当Nginx读配置文件读到include /etc/nginx/con ...
- 阿里云服务器配置SSL证书成功开启Https(记录趟过的各种坑)
环境: 阿里云云服务器 Windows Server 2008 标准版 SP2 中文版(趁1212优惠买的一年的水货配置) 阿里云购买的域名(已备案.已解析) 服务器:phpstudy:php5 ...
- java读取pdf和MS Office文档
有时候PDF中的文字无法复制,这可能是因为PDF文件加密了,不过使用PDFBox开源软件就可以把它读出来. 还有一个用于创建PDF文件的项目----iText. PDFBox下面有两个子项目:Font ...
- spring cloud 创建一个简单Eureka Server
在Spring Cloud实现一个Eureka Server是一件非常简单的事情.下面我们来写一个Eureka Server DEMO. 编码 父项目pom.xml <?xml version= ...