主要内容: 1.生成器和生成器函数 2.列表推导式 一.生成器 生成器是指就是迭代器,在python中有三种方式来获取生成器: 1.通过生成器函数 2.通过各种推导式来实现生成器 3.通过数据的转换也可以获取生成器 yield 和return的区别: yield分段来执行一个函数,break停止函数执行. 当程序运行完最后一个yield,那么后面继续进行__next__()程序会报错. send使用方法:send和__next__()一样可以让生成器执行到下一个yield. def eat():…
什么迭代器呢?它是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,任何实现了__iter__和__next__()(python2中实现next())方法的对象都是迭代器,__iter__返回迭代器自身,__next__返回容器中的下一个值,如果容器中没有更多元素了,则抛出StopIteration异常,至于它们到底是如何实现的这并不重要. 所以,迭代器就是实现了工厂模式的对象,它在你每次你询问要下一个值的时候给你返回.有很多关于迭代器的例子,比如itertools函数…
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat # python的函数是如何工作的 # 比方说我们定义了两个函数 def foo(): bar() def bar(): pass # 首先python解释器(python.exe)会用一个叫做PyEval_EvalFrameEx()的C语言函数去执行foo,所以python的代码是运行在C程序之上的 # 当运行foo函数时,会首先创建一个栈帧(stack frame),…
l=[1,2,3,4] for n in l: print n 在看上面这段代码的时候,我们没有显式的控制列表的偏移量,就可以自动的遍历了整个列表对象.那么for 语句是怎么来遍历列表l的呢?要回答这个问题,我们必须首先来看一下迭代器相关的知识. 1.迭代器 迭代器对象要求支持迭代器协议,所谓支持迭代器协议就是对象包含__iter__()和next()方法.其中__iter__()方法返回迭代器对象自己:next()方法返回下一个前进到下一个结果,在结尾时引发StopIteration异常. 列…
首先,思考一个问题,比如,我们想生成0-100的列表,我们怎么做? 当然,可以写成 list1=[1,2,3...,100] 可以看出,这种方法不适合生成长的列表,那么Python中就可以利用已有的列表,生成新的列表,叫做列表生成式,下面就很简洁了 list2=[x for x in range(1,101)] list1和list2是一样的,只是list2更简单 比列表生成式更进一步的是,是列表生成器generator g=(x*2 for x in range(1,101)) g是一个生成器…
Python yield 使用浅析(整理自:廖 雪峰, 软件工程师, HP 2012 年 11 月 22 日 ) 初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关键字,然而,带有 yield 的函数执行流程却和普通函数不一样,yield 到底用来做什么,为什么要设计 yield ?本文将由浅入深地讲解 yield 的概念和用法,帮助读者体会 Python 里 yield 简单而强大的功能. 您可能听说过,带有 yield 的函数在 Python 中被称之为…
1 引言 只要你学了Python语言,就不会不知道for循环,也肯定用for循环来遍历一个列表(list),那为什么for循环可以遍历list,而不能遍历int类型对象呢?怎么让一个自定义的对象可遍历? 这篇博客中,我们来一起探索一下这个问题,在这个过程中,我们会介绍到迭代器.可迭代对象.生成器,更进一步的,我们会详细介绍他们的原理.异同. 2 迭代器与可迭代对象 在开始下面内容之前,我们先说说标题中的“迭代”一词.什么是迭代?我认为,迭代一个完整过程中的一个重复,或者说每一次对过程的重复称为一…
主要内容: 1.lambda匿名函数 2.sorted() 3.filter() 4.map() 5.递归函数 一. lambda匿名函数 为了解决一些简单的需求而设计的一句话函数 # 计算n的n次方 def func(n): return n**n print(func(10)) f = lambda n: n**n print(f(10)) lambda表示的是匿名函数. 不需要用def来声明, 一句话就可以声明出一个函数 语法:      函数名 = lambda 参数: 返回值 注意: …
主要内容: python中68个内置函数的功能及使用方法…
主要内容: 1.函数参数 ----动态传参 2.名称空间与作用域 3.函数的嵌套 4.global,nonlocal关键字 一.函数参数 ------动态传参 形参的第三种:动态传参 动态传参分为两种: 1.动态接受位置参数,在参数位置编写*表示接受任意内容,多个参数传递进去,接收到的是列表. 动态传参的时候要注意,动态参数必须在位置参数的后面. 这个程序运行会报错,因为前面传递进去的所有位置参数都被*food接收了,a和b永远接收不到参数. 关于默认值参数: 我们发现,默认值参数写在动态参数前…