这篇文章主要介绍了python生成器和yield关键字怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
下列代码用于先体验普通列表推导式和生成器的差别:
# def add(): # temp = ["姓名", "学号", "班级", "电话"] # dic = {} # lst = [] # for item in temp: # inp = input("请输入{}:".format(item)) # if inp == "exit": # print("成功退出输入") # return False # else: # dic[item] = inp # lst.append(dic) # print("添加成功") # return lst # # def show(lst): # print("-"*30) # print("姓名\t\t学号\t\t班级\t\t电话") # print("=" * 30) # for i in range(len(lst)): # for val in lst[i].values(): # print(val, "\t", end="") # print() # print("-" * 30) # # def search(total_lst): # name = input("请输入您要查询的学生姓名:") # flag = False # tmp = [] # for i in range(len(total_lst)): # if total_lst[i]["姓名"] == name: # tmp.append(total_lst[i]) # show(tmp) # flag = True # if not flag: # print("抱歉,没有找到该学生") # # if __name__ == '__main__': # total_lst = [] # while True: # flag = add() # if flag: # total_lst = total_lst + flag # else: # break # show(total_lst) # search(total_lst) # # def show(lst): # print("="*30) # print("{:^25s}".format("输出F1赛事车手积分榜")) # print("=" * 30) # print("{:<10s}".format("排名"), "{:<10s}".format("车手"), "{:<10s}".format("积分")) # for i in range(len(lst)): # print("{:0>2d}{:<9s}".format(i+1, ""), "{:<10s}".format(lst[i][0]), "{:<10d}".format(lst[i][1])) # # if __name__ == '__main__': # data = 'lisi 380,jack 256,bob 385,rose 204,alex 212' # data = data.split(",") # dic = {} # da = [] # for i in range(len(data)): # da.append(data[i].split()) # for i in range(len(da)): # dic[da[i][0]] = int(da[i][1]) # data2 = sorted(dic.items(), key=lambda kv: (kv[1], kv[0]), reverse=True) # show(data2) # class Fun: # def __init__(self): # print("Fun:__init__()") # def test(self): # print("Fun") # # class InheritFun(Fun): # def __init__(self): # print("InheritedFun.__init__()") # super().__init__() # def test(self): # super().test() # print("InheritedFun") # a = InheritFun() # a.test() # from math import * # class Circle: # def __init__(self, radius=1): # self.radius = radius # def getPerimeter(self): # return 2 * self.radius * pi # def getArea(self): # return self.radius * self.radius * pi # def setRadius(self, radius): # self.radius = radius # # a=Circle(10) # print("{:.1f},{:.2f}".format(a.getPerimeter(), a.getArea())) # from math import * # class Root: # def __init__(self, a, b, c): # self.a = a # self.b = b # self.c = c # def getDiscriminant(self): # return pow(self.b, 2)-4*self.a*self.c # def getRoot1(self): # return (-self.b+pow(pow(self.b, 2)-4*self.a*self.c, 0.5))/(2*self.a) # def getRoot2(self): # return (-self.b - pow(pow(self.b, 2) - 4 * self.a * self.c, 0.5)) / (2 * self.a) # inp = input("请输入a,b,c: ").split(" ") # inp = list(map(int, inp)) # Root = Root(inp[0], inp[1], inp[2]) # print("判别式为:{:.1f}; x1:{:.1f}; x2:{:.1f}".format(Root.getDiscriminant(), Root.getRoot1(), Root.getRoot2())) # class Stock: # def __init__(self, num, name, pre_price, now_price): # self.num = num # self.name = name # self.pre_price = pre_price # self.now_price = now_price # def getCode(self): # return self.num # def getName(self): # return self.name # def getPriceYesterday(self): # return self.pre_price # def getPriceToday(self): # return self.now_price # def getChangePercent(self): # return (self.now_price-self.pre_price)/self.pre_price # # sCode = input() #输入代码 # sName = input() #输入名称 # priceYesterday = float(input()) #输入昨日价格 # priceToday = float(input()) #输入今日价格 # s = Stock(sCode,sName,priceYesterday,priceToday) # print("代码:",s.getCode()) # print("名称:",s.getName()) # print("昨日价格:%.2f\n今天价格:%.2f" % (s.getPriceYesterday(),s.getPriceToday())) # print("价格变化百分比:%.2f%%" % (s.getChangePercent()*100)) # from math import pi # # class Shape: # def __init__(self, name='None', area=None, perimeter=None): # self.name = name # self.area = area # self.perimeter = perimeter # def calArea(self): # return self.area # def calPerimeter(self): # return self.perimeter # def display(self): # print("名称:%s 面积:%.2f 周长:%.2f" % (self.name, self.area, self.perimeter)) # # class Rectangle(Shape): # def __init__(self, width, height): # super().__init__() # self.width = width # self.height = height # def calArea(self): # self.area = self.height*self.width # return self.area # def calPerimeter(self): # self.perimeter = (self.height+self.width)*2 # return self.perimeter # def display(self): # self.name = "Rectangle" # Rectangle.calArea(self) # Rectangle.calPerimeter(self) # super(Rectangle, self).display() # # class Triangle(Shape): # def __init__(self, bottom, height, edge1, edge2): # super().__init__() # self.bottom = bottom # self.height = height # self.edge1 = edge1 # self.edge2 = edge2 # def calArea(self): # self.area = (self.bottom*self.height) / 2 # return self.area # def calPerimeter(self): # self.perimeter = self.bottom+self.edge2+self.edge1 # return self.perimeter # def display(self): # self.name = "Triangle" # Triangle.calArea(self) # Triangle.calPerimeter(self) # super(Triangle, self).display() # # class Circle(Shape): # def __init__(self, radius): # super(Circle, self).__init__() # self.radius = radius # def calArea(self): # self.area = pi*pow(self.radius, 2) # return self.area # def calPerimeter(self): # self.perimeter = 2*pi*self.radius # return self.perimeter # def display(self): # self.name = "Circle" # Circle.calArea(self) # Circle.calPerimeter(self) # super(Circle, self).display() # # rectangle = Rectangle(2, 3) # rectangle.display() # # triangle = Triangle(3,4,4,5) # triangle.display() # # circle = Circle(radius=1) # circle.display() # # lst = list(map(lambda x: int(x), ['1', '2', '3'])) # print(lst) # # class ListNode(object): # def __init__(self): # self.val = None # self.next = None # # #尾插法 # def creatlist_tail(lst): # L = ListNode() #头节点 # first_node = L # for item in lst: # p = ListNode() # p.val = item # L.next = p # L = p # return first_node # #头插法 # def creatlist_head(lst): # L = ListNode() #头节点 # for item in lst: # p = ListNode() # p.val = item # p.next = L # L = p # return L # #打印linklist # def print_ll(ll): # while True: # if ll.val: # print(ll.val) # if ll.next==None: #尾插法停止点 # break # elif not ll.next: #头插法停止点 # break # ll = ll.next # #题解 # class Solution: # def printListFromTailToHead(self, listNode): # # write code here # res = [] # while(listNode): # res.append(listNode.val) # listNode=listNode.next # return res[3:0:-1] # # if __name__ == "__main__": # lst = [1, 2, 3] # linklist = creatlist_tail(lst) # solution = Solution() # res = solution.printListFromTailToHead(linklist) # print(res) # -*- coding:utf-8 -*- # class Solution: # def __init__(self): # self.stack1 = [] # self.stack2 = [] # def push(self, node): # # write code here # self.stack1.append(node) # def pop(self): # # return xx # if self.stack2: # return self.stack2.pop() # else: # for i in range(len(self.stack1)): # self.stack2.append(self.stack1.pop()) # return self.stack2.pop() # # if __name__ == '__main__': # solution = Solution() # solution.push(1) # solution.push(2) # print(solution.pop()) # print(solution.pop()) # # binary search # def binary_search(lst, x): # lst.sort() # if len(lst) > 0: # pivot = len(lst) // 2 # if lst[pivot] == x: # return True # elif lst[pivot] > x: # return binary_search(lst[:pivot], x) # elif lst[pivot] < x: # return binary_search(lst[pivot+1:], x) # return False # # def binary_search3(lst, x): # lst.sort() # head = 0 # tail = len(lst) # pivot = len(lst) // 2 # while head <= tail: # if lst[pivot]>x: # tail = pivot # pivot = (head+tail) // 2 # elif lst[pivot]<x: # head = pivot # pivot = (head+tail) // 2 # elif lst[pivot] == x: # return True # return False # if __name__ == '__main__': # lst = [5, 3, 1, 8, 9] # print(binary_search(lst, 3)) # print(binary_search(lst, 100)) # # print(binary_search(lst, 8)) # print(binary_search(lst, 100)) # 括号匹配 # def bracket_matching(ans): # stack = [] # flag = True # left = ['(', '{', '['] # right = [')', '}', ']'] # for i in range(len(ans)): # if ans[i] in left: # stack.append(ans[i]) # else: # tmp = stack.pop() # if left.index(tmp) != right.index(ans[i]): # flag = False # if stack: # flag = False # return flag # # print(bracket_matching('({})()[[][]')) # print(bracket_matching('({})()[[]]')) # def longestValidParentheses(s): # maxlen = 0 # stack = [] # for i in range(len(s)): # if s[i] == '(': # stack.append(s[i]) # if s[i] == ')' and len(stack) != 0: # stack.pop() # maxlen += 2 # return maxlen # print(longestValidParentheses('()(()')) # def GetLongestParentheses(s): # maxlen = 0 # start = -1 # stack = [] # for i in range(len(s)): # if s[i]=='(': # stack.append(i) # else: # if not stack: # start = i # else: # stack.pop() # if not stack: # maxlen = max(maxlen, i-start) # else: # maxlen = max(maxlen, i-stack[-1]) # return maxlen # print(GetLongestParentheses('()(()')) # print(GetLongestParentheses('()(()))')) # print(GetLongestParentheses(')()())')) # import torch # a = torch.tensor([[[1,0,3], # [4,6,5]]]) # print(a.size()) # b = torch.squeeze(a) # print(b, b.size()) # b = torch.squeeze(a,-1) # print(b, b.size()) # b = torch.unsqueeze(a,2) # print(b, b.size()) # # print('-----------------') # x = torch.zeros(2, 1, 2, 1, 2) # print(x.size()) # y = torch.squeeze(x) # print(y.size()) # y = torch.squeeze(x, 0) # print(y.size()) # y = torch.squeeze(x, 1) # print(y.size()) # from typing import List # class Solution: # def duplicate(self, numbers: List[int]) -> int: # # write code here # dic = dict() # for i in range(len(numbers)): # if numbers[i] not in dic.keys(): # dic[numbers[i]] = 1 # else: # dic[numbers[i]] += 1 # for key, value in dic.items(): # if value > 1: # return key # return -1 # if __name__ == '__main__': # solution = Solution() # print(solution.duplicate([2,3,1,0,2,5,3])) # class TreeNode: # def __init__(self, data=0): # self.val = data # self.left = None # self.right = None # # # class Solution: # def TreeDepth(self , pRoot: TreeNode) -> int: # # write code here # if pRoot is None: # return 0 # count = 0 # now_layer =[pRoot] # next_layer = [] # while now_layer: # for i in now_layer: # if i.left: # next_layer.append(i.left) # if i.right: # next_layer.append(i.right) # count +=1 # now_layer, next_layer = next_layer,[] # return count # # if __name__ == '__main__': # inp = [1,2,3,4,5,'#',6,'#','#',7] # bt = TreeNode(1) # # bt.left = TreeNode(2) # bt.right = TreeNode(3) # # bt.left.left = TreeNode(4) # bt.left.right = TreeNode(5) # bt.right.left = None # bt.right.right = TreeNode(6) # # bt.left.left.left = None # bt.left.left.right = None # bt.left.right.left = TreeNode(7) # # solution = Solution() # print('深度:', solution.TreeDepth(bt)) # class ListNode: # def __init__(self): # self.val = None # self.next = None # # def creatlist_tail(lst): # L = ListNode() # first_node = L # for item in lst: # p = ListNode() # p.val = item # L.next = p # L = p # return first_node # # def show(node:ListNode): # print(node.val,end=' ') # if node.next is not None: # node = show(node.next) # # class Solution: # def ReverseList(self, head: ListNode) -> ListNode: # # write code here # res = None # while head: # nextnode = head.next # head.next = res # res = head # head = nextnode # return res # # if __name__ == '__main__': # lst = [1,2,3] # linklist = creatlist_tail(lst) # show(linklist) # print() # solution = Solution() # show(solution.ReverseList(linklist)) # 字典推导式 # a = ['a', 'b', 'c'] # b = [4, 5, 6] # dic = {k:v for k,v in zip(a,b)} # print(dic) #列表推导式 # l = [i for i in range(10)] # print(l) # # # # # 生成器推导式 # l1 = (i for i in range(10)) # print(type(l1)) # 输出结果:<class 'generator'> # for i in l1: # print(i) # print('{pi:0>10.1f}'.format(pi=3.14159855)) # print("'","center".center(40),"'") # print("center".center(40,'-')) # print("center".zfill(40)) # print("center".ljust(40,'-')) # print("center".rjust(40,'-')) # s = "python is easy to learn, easy to use." # print(s.find('to',0,len(s))) # print(s.find('es')) # num = [1,2,3] # print("+".join(str(i) for i in num),"=",sum(num)) # print(''.center(40,'-')) # # import torch # from torch import nn # import numpy as np # # # 一维BN # d1 = torch.rand([2,3,4]) #BCW # bn1 = nn.BatchNorm1d(3, momentum=1) # res = bn1(d1) # print(res.shape) # # #二维BN(常用) # d2 = torch.rand([2,3,4,5]) #BCHW # bn2 = nn.BatchNorm2d(3, momentum=1) # res = bn2(d2) # print(res.shape) # print(bn2.running_mean) #3个chanel均值 # print(bn2.running_var) #3个chanel方差 # # # a = np.array(d2.tolist()) # mean = np.mean(a,axis=(0,2,3)) # print(mean) # # # def batchnorm_forward(x, gamma, beta, bn_param): # """ # Forward pass for batch normalization # # Input: # - x: Data of shape (N, D) # - gamma: Scale parameter of shape (D,) # - beta: Shift parameter of shape (D,) # - bn_param: Dictionary with the following keys: # - mode: 'train' or 'test' # - eps: Constant for numeric stability # - momentum: Constant for running mean / variance # - running_mean: Array of shape(D,) giving running mean of features # - running_var Array of shape(D,) giving running variance of features # Returns a tuple of: # - out: of shape (N, D) # - cache: A tuple of values needed in the backward pass # """ # mode = bn_param['mode'] # eps = bn_param.get('eps', 1e-5) # momentum = bn_param.get('momentum', 0.9) # # N, D = x.shape # running_mean = bn_param.get('running_mean', np.zeros(D, dtype=x.dtype)) # running_var = bn_param.get('running_var', np.zeros(D, dtype=x.dtype)) # # out, cache = None, None # # if mode == 'train': # sample_mean = np.mean(x, axis=0) # np.mean([[1,2],[3,4]])->[2,3] # sample_var = np.var(x, axis=0) # out_ = (x - sample_mean) / np.sqrt(sample_var + eps) # # running_mean = momentum * running_mean + (1 - momentum) * sample_mean # running_var = momentum * running_var + (1 - momentum) * sample_var # # out = gamma * out_ + beta # cache = (out_, x, sample_var, sample_mean, eps, gamma, beta) # elif mode == 'test': # # scale = gamma / np.sqrt(running_var + eps) # # out = x * scale + (beta - running_mean * scale) # x_hat = (x - running_mean) / (np.sqrt(running_var + eps)) # out = gamma * x_hat + beta # else: # raise ValueError('Invalid forward batchnorm mode "%s"' % mode) # # # Store the updated running means back into bn_param # bn_param['running_mean'] = running_mean # bn_param['running_var'] = running_var # # return out, cache # # import numpy as np # import matplotlib.pyplot as plt # # # def py_cpu_nms(dets, thresh): # # x1 = dets[:, 0] # y1 = dets[:, 1] # x2 = dets[:, 2] # y2 = dets[:, 3] # scores = dets[:, 4] # areas = (x2-x1+1)*(y2-y1+1) # res = [] # index = scores.argsort()[::-1] # while index.size>0: # i = index[0] # res.append(i) # x11 = np.maximum(x1[i],x1[index[1:]]) # y11 = np.maximum(y1[i], y1[index[1:]]) # x22 = np.minimum(x2[i],x2[index[1:]]) # y22 = np.minimum(y2[i],y2[index[1:]]) # # w = np.maximum(0,x22-x11+1) # h = np.maximum(0,y22-y11+1) # # overlaps = w * h # iou = overlaps/(areas[i]+areas[index[1:]]-overlaps) # # idx = np.where(iou<=thresh)[0] # index = index[idx+1] # print(res) # return res # # def plot_boxs(box,c): # x1 = box[:, 0] # y1 = box[:, 1] # x2 = box[:, 2] # y2 = box[:, 3] # # plt.plot([x1,x2],[y1,y1],c) # plt.plot([x1,x2],[y2,y2],c) # plt.plot([x1,x1],[y1,y2],c) # plt.plot([x2,x2],[y1,y2],c) # # if __name__ == '__main__': # boxes = np.array([[100, 100, 210, 210, 0.72], # [250, 250, 420, 420, 0.8], # [220, 220, 320, 330, 0.92], # [230, 240, 325, 330, 0.81], # [220, 230, 315, 340, 0.9]]) # plt.figure() # ax1 = plt.subplot(121) # ax2 = plt.subplot(122) # plt.sca(ax1) # plot_boxs(boxes,'k') # # res = py_cpu_nms(boxes,0.7) # plt.sca(ax2) # plot_boxs(boxes[res],'r') # plt.show() # 2 3 3 4 # 1 2 3 # 4 5 6 # 1 2 3 4 # 5 6 7 8 # 9 10 11 12 # lst1, lst2 = [], [] # n1,m1,n2,m2 = map(int,input().split()) # for i in range(n1): # nums = list(map(int,input().split())) #输入一行数据 # lst1.append(nums) # for i in range(n2): # nums = list(map(int,input().split())) # lst2.append(nums) # res = [] # for i in range(n1): # res.append([]) # for j in range(m2): # lst4 = [] # lst3 = lst1[i] # for k in range(n2): # lst4.append(lst2[k][j]) # res_num = sum(map(lambda x,y:x*y,lst3,lst4)) # res[i].append(res_num) # print(res) # # import numpy as np # print('numpy:',np.dot(lst1,lst2)) #定义残差块 # import torch # import torch.nn as nn # import torch.nn.functional as F # # class ResBlock(nn.Module): # def __init__(self,inchanel,outchanel,stride=1): # super(ResBlock,self).__init__() # self.left = nn.Sequential( # nn.Conv2d(inchanel,outchanel,kernel_size=3,stride=stride,padding=1,bias=False), # nn.BatchNorm2d(outchanel), # nn.ReLU(inplace=True), # nn.Conv2d(outchanel,outchanel,kernel_size=3,stride=1,padding=1,bias=False), # nn.BatchNorm2d(outchanel) # ) # self.shortcut = nn.Sequential() # if stride!=1 or inchanel!=outchanel: # self.shortcut = nn.Sequential( # nn.Conv2d(inchanel,outchanel,kernel_size=1,stride=stride,padding=1,bias=False), # nn.BatchNorm2d(outchanel) # ) # def forward(self,x): # out = self.left(x) # out = out + self.shortcut(x) # out = F.relu(out) # # return out # # class ResNet(nn.Module): # def __init__(self,Resblock,num_classes=10): # super(ResNet,self).__init__() # self.inchanel = 64 # self.conv1 = nn.Sequential( # nn.Conv2d(3,64,kernel_size=3,stride=1,padding=1,bias=False), # nn.BatchNorm2d(64), # nn.ReLU() # ) # self.layer1 = self.make_layer(ResBlock,64,2,1) # self.layer2 = self.make_layer(ResBlock, 128, 2, 2) # self.layer3 = self.make_layer(ResBlock, 256, 2, 2) # self.layer4 = self.make_layer(ResBlock, 512, 2, 2) # self.fc = nn.Linear(512,num_classes) # # def make_layer(self,ResBlock,channels,num_blocks,stride): # strides = [stride] + [1] * (num_blocks-1) # layers = [] # for stride in strides: # layers.append(ResBlock(self.inchanel,channels,stride)) # self.inchanel=channels # return nn.Sequential(*layers) # def forward(self,x): # out = self.conv1(x) # out = self.layer1(out) # out = self.layer2(out) # out = self.layer3(out) # out = self.layer4(out) # out = F.avg_pool2d(out,4) # out = out.view(out.size(0),-1) # out = self.fc(out) # return out # import torch # import torch.nn as nn # import torch.nn.functional as F # # class ASPP(nn.Module): # def __init__(self,in_channel=512,depth=256): # super(ASPP,self).__init__() # self.mean = nn.AdaptiveAvgPool2d((1,1)) # self.conv = nn.Conv2d(in_channel,depth,1,1) # self.atrous_block1 = nn.Conv2d(in_channel,depth,1,1) # self.atrous_block6 = nn.Conv2d(in_channel,depth,3,1,padding=6,dilation=6) # self.atrous_block12 = nn.Conv2d(in_channel,depth,3,1,padding=12,dilation=12) # self.atrous_block18 = nn.Conv2d(in_channel,depth,3,1,padding=18,dilation=18) # self.conv1x1_output = nn.Conv2d(depth*5,depth,1,1) # def forward(self,x): # size = x[2:] # pool_feat = self.mean(x) # pool_feat = self.conv(pool_feat) # pool_feat = F.upsample(pool_feat,size=size,mode='bilinear') # # atrous_block1 = self.atrous_block1(x) # atrous_block6 = self.atrous_block6(x) # atrous_block12 = self.atrous_block12(x) # atrous_block18 = self.atrous_block18(x) # # out = self.conv1x1_output(torch.cat([pool_feat,atrous_block1,atrous_block6, # atrous_block12,atrous_block18],dim=1)) # return out #牛顿法求三次根 # def sqrt(n): # k = n # while abs(k*k-n)>1e-6: # k = (k + n/k)/2 # print(k) # # def cube_root(n): # k = n # while abs(k*k*k-n)>1e-6: # k = k + (k*k*k-n)/3*k*k # print(k) # sqrt(2) # cube_root(8) # -*- coding:utf-8 -*- # import random # # import numpy as np # from matplotlib import pyplot # # # class K_Means(object): # # k是分组数;tolerance‘中心点误差';max_iter是迭代次数 # def __init__(self, k=2, tolerance=0.0001, max_iter=300): # self.k_ = k # self.tolerance_ = tolerance # self.max_iter_ = max_iter # # def fit(self, data): # self.centers_ = {} # for i in range(self.k_): # self.centers_[i] = data[random.randint(0,len(data))] # # print('center', self.centers_) # for i in range(self.max_iter_): # self.clf_ = {} #用于装归属到每个类中的点[k,len(data)] # for i in range(self.k_): # self.clf_[i] = [] # # print("质点:",self.centers_) # for feature in data: # distances = [] #装中心点到每个点的距离[k] # for center in self.centers_: # # 欧拉距离 # distances.append(np.linalg.norm(feature - self.centers_[center])) # classification = distances.index(min(distances)) # self.clf_[classification].append(feature) # # # print("分组情况:",self.clf_) # prev_centers = dict(self.centers_) # # for c in self.clf_: # self.centers_[c] = np.average(self.clf_[c], axis=0) # # # '中心点'是否在误差范围 # optimized = True # for center in self.centers_: # org_centers = prev_centers[center] # cur_centers = self.centers_[center] # if np.sum((cur_centers - org_centers) / org_centers * 100.0) > self.tolerance_: # optimized = False # if optimized: # break # # def predict(self, p_data): # distances = [np.linalg.norm(p_data - self.centers_[center]) for center in self.centers_] # index = distances.index(min(distances)) # return index # # # if __name__ == '__main__': # x = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]]) # k_means = K_Means(k=2) # k_means.fit(x) # for center in k_means.centers_: # pyplot.scatter(k_means.centers_[center][0], k_means.centers_[center][1], marker='*', s=150) # # for cat in k_means.clf_: # for point in k_means.clf_[cat]: # pyplot.scatter(point[0], point[1], c=('r' if cat == 0 else 'b')) # # predict = [[2, 1], [6, 9]] # for feature in predict: # cat = k_means.predict(feature) # pyplot.scatter(feature[0], feature[1], c=('r' if cat == 0 else 'b'), marker='x') # # pyplot.show() # def pred(key, value): # if key == 'math': # return value>=40 # else: # return value>=60 # def func(dic,pred): # # temp = [] # # for item in dic: # # if not pred(item,dic[item]): # # temp.append(item) # # for item in temp: # # del dic[item] # # return dic # # for k in list(dic.keys()): # if dic[k]<60: # del dic[k] # return dic # # if __name__ == '__main__': # dic={'math':66,'c':78,'c++':59,'python':55} # dic = func(dic,pred) # print(dic) # # class TreeNode: # def __init__(self): # self.left = None # self.right = None # self.data = None # # def insert(tree,x): # temp = TreeNode() # temp.data = x # if tree.data>x: # if tree.left == None: # tree.left = temp # else: # insert(tree.left,x) # else: # if tree.right == None: # tree.right = temp # else: # insert(tree.right,x) # # def print_tree(node): # if node is None: # return 0 # print_tree(node.left) # print(node.data) # print_tree(node.right) # # # def sort(lst): # tree = TreeNode() # tree.data = lst[0] # for i in range(1, len(lst)): # insert(tree,lst[i]) # print_tree(tree) # # sort([5,2,4]) # from collections import Iterable, Iterator # # # class Person(object): # """定义一个人类""" # # def __init__(self): # self.name = list() # self.name_num = 0 # # def add(self, name): # self.name.append(name) # # def __iter__(self): # return self # def __next__(self): # # 记忆性返回数据 # if self.name_num < len(self.name): # ret = self.name[self.name_num] # self.name_num += 1 # return ret # else: # raise StopIteration # # person1 = Person() # person1.add("张三") # person1.add("李四") # person1.add("王五") # # print("判断是否是可迭代的对象:", isinstance(person1, Iterable)) # print("判断是否是迭代器:", isinstance(person1,Iterator)) # for name in person1: # print(name) # nums = [] # a = 0 # b = 1 # i = 0 # while i < 10: # nums.append(a) # a,b = b,a+b # i += 1 # for i in nums: # print(i) # # class Fb(): # def __init__(self): # self.a = 0 # self.b = 1 # self.i = 0 # def __iter__(self): # return self # def __next__(self): # res = self.a # if self.i<10: # self.a,self.b = self.b,self.a+self.b # self.i += 1 # return res # else: # raise StopIteration # # fb = Fb() # for i in fb: # print(i) import time def get_time(func): def wraper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print("Spend:", end_time - start_time) return result return wraper @get_time def _list(n): l = [i*i*i for i in range(n)] @get_time def _generator(n): ge = (i*i*i for i in range(n)) @get_time def _list_print(l1): for i in l1: print(end='') @get_time def _ge_print(ge): for i in ge: print(end='') n = 100000 print('list 生成耗时:') _list(n) print('生成器 生成耗时:') _generator(n) l1 = [i*i*i for i in range(n)] ge = (i*i*i for i in range(n)) # print(l1) # print(ge) print('list遍历耗时:') _list_print(l1) print('生成器遍历耗时:') _ge_print(ge)
结论:
生成速度:生成器>列表
for_in_循环遍历:1、速度方面:列表>生成器;2、内存占用方面:列表<生成器
总的来说,生成器就是用于降低内存消耗的。
感谢你能够认真阅读完这篇文章,希望小编分享的“python生成器和yield关键字怎么用”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。