python counter、闭包、generator

1、python库——counter

from collections import Counter
breakfast=[‘spam‘,‘spam‘,‘eggs‘,‘spam‘]
breakfast_counter=Counter(breakfast)
breakfast_counter    #Counter({‘eggs‘: 1, ‘spam‘: 3})
#函数 most_common() 以降序返回所有元素,或者如果给定一个数字,会返回该数字前的的元素
breakfast_counter.most_common() #[(‘spam‘, 3), (‘eggs‘, 1)]
breakfast_counter.most_common(1) #[(‘spam‘, 3)]
#可以组合计数器
lunch=[‘eggs‘,‘eggs‘,‘bacon‘]
lunch_counter=Counter(lunch)
lunch_counter     #Counter({‘bacon‘: 1, ‘eggs‘: 2})
#第一种组合计数器的方式是使用 + 从一个计数器加上另一个
breakfast_counter+lunch_counter    #Counter({‘bacon‘: 1, ‘eggs‘: 3, ‘spam‘: 3})
#第二种组合计数器的方式是使用 -  从一个计数器去掉另一个
breakfast_counter-lunch_counter   #Counter({‘spam‘: 3})
lunch_counter-breakfast_counter   #Counter({‘bacon‘: 1, ‘eggs‘: 1})
#第三种组合计数器的方式是使用 &  得到二者共有的项
breakfast_counter&lunch_counter   #Counter({‘eggs‘: 1})

2、python闭包

结论:尽量减少使用闭包

1、有的闭包可以使用两个函数分开来写,简单易读。

2、如果不使用nonlocal,可以读取作用域外的变量,但是不能修改,使用nonlocal,可以读取和修改,容易出bug,慎用!

3、python generators

要想创建一个iterator,必须实现一个有__iter__()和__next__()方法的类,类要能够跟踪内部状态并且在没有元素返回的时候引发StopIteration异常。

这个过程很繁琐而且违反直觉,Generator能够解决这个问题。

python generator是一个简单的创建iterator的途径,前面介绍那些繁琐的步骤都可以被generator自动完成。

简单来说,generator是一个能够返回迭代器对象的函数。

原文地址:https://www.cnblogs.com/bawu/p/8064726.html

时间: 2024-10-27 05:41:56

python counter、闭包、generator的相关文章

Python之闭包

# -*- coding: utf-8 -*- #python 27 #xiaodeng #Python之闭包 #http://python.jobbole.com/82624/ #闭包:函数是一个对象,所以可以作为某个函数的返回结果 def line_conf(): def line(x): return 2*x+1 return line#line_conf的返回结果被赋给line对象 MyLine = line_conf() print MyLine(5)#11 print '**'*20

python的闭包

如果在一个内部函数里,对在外部作用域(非全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).定义在外部函数内的,担忧内部函数引用或者使用的变量称为自由变量,闭包在函数式编程中是一个重要的概念. 闭包将内部函数自己的代码和作用域以及外部函数的作用域结合起来,闭包的词法变量不余数全局名称空间域或者局部的--属于其他的名称空间. python的namespace: python通过namespace来检索变量/函数/方法,在python中有三种namespace·local na

【Python笔记】如何理解python中的generator functions和yield表达式

本篇笔记记录自己对Python的generator functions和yield表达式的理解. 1. Generator Functions Python支持的generator functions语法允许我们定义一个行为与iterator类似的函数,它可以被用在需要循环调用的场合.与普通函数相比,generator functions只是在函数定义中多了1个yield表达式,除此之外,没有其它特别之处. 当generator函数被创建时,python解释器会自动为它实现iteration p

python -- Counter 类

python -- Counter 类 我明白你会来,所以我等 参考 官方文档 class collections.Counter([iterable-or-mapping]) Counter 集成于 dict 类,因此也可以使用字典的方法,此类返回一个以元素为 key .元素个数为 value 的 Counter 对象集合 >>> from collections import Counter >>> s = "hello pinsily" >

Python 应用闭包思路动态生成unittest执行脚本---分析问题,解决问题,记录填坑。

至于为什么要动态生成unittest执行脚本,以及设计思路,代码阅读参考前文,传送门.好了,本文我们就上一篇文章中的问题做一下分析,记录一下填坑之路吧,这个坑真特么深,挣扎了好久才出来. 首先我们先说一下问题在哪,因为使用了闭包,闭包会绑定变量无法清除无法更改,假如我第一次运行testall函数循环两次,第一次是正常的,第二次运行testall函数循环一次,那么生成的报告就会出现问题,会出现第一次运行的结果.即是:后一次循环运行只要比前一次循环少,那么report一定会出现前一次的结果,必先的b

Python Iterator and Generator

Python Iterator and Generator Iterator ? 迭代器(Iterator)和可迭代对象(Iterable)往往是绑定的.可迭代对象就是我们平时经常用的list ,string, tuple这种.事实上迭代器的概念会比可迭代对象宽泛很多,一会举几个例子就能明白. ? 在使用list这种数据类型的时候,我们经常会使用下面这种迭代方式: # eg 1 mylist = [1,2,3,4] for x in mylist: print(x) >>>1 >&

Python函数编程——闭包和装饰器

Python函数编程--闭包和装饰器 一.闭包 关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数).而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量.参数.当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包.也就是说,内部函数会在外部函数返回后被执行.而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量.参数以及其他内部函数.这些局部变量.参数和函数声明(最初时)的值是外部函数返回时的值,但也会受到内部函数的影响. def outer(

python进阶一(函数式编程)【2-6 python中闭包】

python中闭包 在函数内部定义的函数和外部定义的函数是一样的,只是他们无法被外部访问: def g(): print 'g()...' def f(): print 'f()...' return g 将 g 的定义移入函数 f 内部,防止其他代码调用 g: 1 def f(): 2 print 'f()...' 3 def g(): 4 print 'g()...' 5 return g 但是,考察上一小节定义的 calc_sum 函数: 1 def calc_sum(lst): 2 de

python之生成器-generator

在跟着廖雪峰的博客学习python,看到生成器这一章节的时候,首先提到了generator .yield,然后在搜索资料的时候,又查到了协程这一概念,这篇文章总结一下这几个概念. generator  从字面上理解,就是生成器,它的实现方式有两种: 1.不同于列表生成器([]),而是用 ()来表示.(原来这种叫做生成器表达式哦,哈哈) 访问方式,可以用for 循环来访问,也可以用 .next 来访问. N = ['Hello', 'World', 18, 'Apple', 'None'] hh