温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python生成器和yield关键字怎么用

发布时间:2022-01-14 11:23:38 来源:亿速云 阅读:191 作者:小新 栏目:开发技术

这篇文章主要介绍了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)

python生成器和yield关键字怎么用

结论:

生成速度:生成器>列表
for_in_循环遍历:1、速度方面:列表>生成器;2、内存占用方面:列表<生成器
总的来说,生成器就是用于降低内存消耗的。

感谢你能够认真阅读完这篇文章,希望小编分享的“python生成器和yield关键字怎么用”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI