生成器表达式:

#列表推导式
# 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,函数的使用方法:生成器表达式,生成器函数的更多相关文章

  1. python之旅:三元表达式、列表推导式、生成器表达式、函数递归、匿名函数、内置函数

    三元表达式 #以下是比较大小,并返回值 def max2(x,y): if x > y: return x else: return y res=max2(10,11) print(res) # ...

  2. [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

    函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...

  3. web报表工具FineReport经常使用函数的使用方法总结(文本函数)

    文本函数 CHAR CHAR(number):依据指定数字返回相应的字符.CHAR函数可将计算机其它类型的数字代码转换为字符. Number:用于指定字符的数字,介于1Number:用于指定字符的数字 ...

  4. Python-全局函数(内置方法、内置函数)

    Python有很多内置方法,这些都全局可用 abs() 求数值的绝对值,如果是复数则返回其模 print(abs(-17), abs(30.2), abs(3+4j)) # Python中复数表示为 ...

  5. python之序列去重以及生成器、生成器函数、生成器表达式与迭代器浅谈

    首先要明确序列值类型是否可哈希,因为可哈希的值很简单就可以用 in /not in 写个生成器去判断,如果是不可哈希的就要去转换为可哈希的再用 in/not in 去判断 原地不可变类型(可哈希): ...

  6. python开发函数进阶:生成器表达式&各种推导式

    一,生成器表达式 #生成器表达式比列表解析更省内存,因为惰性运算 #!/usr/bin/env python #_*_coding:utf-8_*_ new_2 = (i*i for i in ran ...

  7. Python基础之函数:6、异常相关和生成器对象、yield用法、生成器表达式

    目录 一.异常常见类型 1.类型错误 2.缩进错误 3.索引错误 4.语法错误 5.属性错误 6.key键错误 二.异常处理语法结构 1.基本语法结构 2.查看错误类型 3.针对不同类型所作措施 4. ...

  8. Python 进阶_生成器 & 生成器表达式

    目录 目录 相关知识点 生成器 生成器 fab 的执行过程 生成器和迭代器的区别 生成器的优势 加强的生成器特性 生成器表达式 生成器表达式样例 小结 相关知识点 Python 进阶_迭代器 & ...

  9. Python基础:08列表解析与生成器表达式

    一:列表解析 列表解析(List comprehensions)来自函数式编程语言Haskell .它可以用来动态地创建列表.它在 Python 2.0 中被加入. 列表解析的语法:     [exp ...

  10. Learn day5 迭代器\生成器\高阶函数\推导式\内置函数\模块(math.time)

    1.迭代器 # ### 迭代器 """能被next调用,并不断返回下一个值的对象""" """ 特征:迭代器会 ...

随机推荐

  1. Java多线程之控制执行顺序

    概念: 多线程在并发环境中的正常执行顺序是随机无序的,并不能按照期盼的结果输出. 因为启动一个线程时,线程并不会立即执行,而是等待CPU的资源调度,CPU能调度哪个线程,是通过多种复杂的算法计算而来. ...

  2. Codeforces 438E The Child and Binary Tree [DP,生成函数,NTT]

    洛谷 Codeforces 思路 看到计数和\(998244353\),可以感觉到这是一个DP+生成函数+NTT的题. 设\(s_i\)表示\(i\)是否在集合中,\(A\)为\(s\)的生成函数,即 ...

  3. css中input框不可点击+首行缩进

    Css 1)text-indent::首行缩进 2)disabled="true"设置input框不可以点击 3)Css:xx!important:声明提前优先级最高..!impo ...

  4. Confluence 6 MySQL 问题解决

    如果 Confluence 提示没有 class 文件,你可能将你的 JDBC 驱动放置到了错误的文件夹. 如果你收到了下面的错误信息,请确认 confluenceuser 用户已经具有了所有需求的数 ...

  5. Python实战二

    要求:按照要求完成对文件的增.删.改.查操作. def add(**kwargs): '''新增内容,在指定位置新增''' while True: flag = False with open(&qu ...

  6. PDF编辑方法,PDF怎么去除背景

    PDF文件现在是使用的频率很高的一个软件的格式,PDF文件能够更加直观清楚的表达,PDF文件的使用很方便但编辑起来就来没有那么容易了,PDF文件的编辑是需要借助软件的,今天小编就来跟大家分享一下PDF ...

  7. h5 video标签的使用

     标签的布置 <video src="1.mp4" poster="1.jpg" id="vid" controls> 你的浏览 ...

  8. 论文阅读笔记十四:Decoupled Deep Neural Network for Semi-supervised Semantic Segmentation(CVPR2015)

    论文链接:https://arxiv.org/abs/1506.04924 摘要 该文提出了基于混合标签的半监督分割网络.与当前基于区域分类的单任务的分割方法不同,Decoupled 网络将分割与分类 ...

  9. python 通用装饰器,带有参数的装饰器,

    # 使用装饰器对有返回值的函数进行装饰# def func(functionName): # print('---func-1----') # def func_in(): # print(" ...

  10. Html中,id、name、class、type的区别

    <input type="text" name="name" id="name" class="txt"> ...