迭代计算

02函数整合篇

只谈情不闲聊 提交于 2019-12-28 13:14:36
目录 前言 函数 函数的简介 函数的结构与调用 函数的返回值 函数的参数 万能参数,仅限关键字参数 *的魔性用法。 名称空间作用域 高阶函数 内置函数 globals locals global nonlocal关键字 函数名的应用 默认参数的坑 可迭代对象和迭代器 while模拟for循环 可迭代对象与迭代器的对比 可迭代对象与迭代器的对比 生成器 yield from 出错题 生成器表达式,列表推导式,字典推导式 匿名函数 小练习 内置函数 内置函数 I 了解 callable 判断是否可调用 bin oct hex进制转换 all any判断是否全部为真或假 内置函数II 重要 sep 设定分隔符。 end去除默认换行 sum() 数字相加求和 min max()可以加功能 reversed() 将一个序列翻转 sorted排序函数 可以加key map对元素进行映射 zip() 拉链方法 filter筛选过滤 返回迭代器 闭包 装饰器 标准版的装饰器; 带参数的装饰器 多个装饰器装饰一个函数 递归 前言 本篇博客整合了以下与函数有关的知识点 函数 函数的简介 # 函数:以功能(完成一件事)为导向,登录,注册,len,一个函数就是一个功能。 随调随用。 # 减少代码的重复性。 # 增强了代码的可读性。 函数的结构与调用 定义一个函数 def len_num(a):

python基础6 迭代器 生成器

半城伤御伤魂 提交于 2019-12-28 01:13:15
迭代器 可迭代的或迭代对象 可迭代的: 内部含有__iter__方法的数据类型叫可迭代的,也叫 迭代对象 , range是一个迭代对象 ,内部含有iter()方法。为什么可迭代对象能被for 循环,因为可迭代对象含有iter方法,只要函数iter方法的对象就可以被for循环。这也是可迭代协议。 运用dir()方法来测试一个数据类型是不是可迭代的的。如果含有iter的,就是可迭代对象、 迭代器协议 迭代器协议 是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常, 以终止迭代 (只能往后走不能往前退)。 迭代器:可以被 next() 函数调用并不断返回下一个值的对象称为迭代器 ,迭代器是一个实现了迭代器协议的对象。也可以这样说包含next方法的可迭代对象叫迭代器 迭代器和列表的区别? 区别在于节省内存和惰性运算 如果我有一个列表中有500个数据,那么这个列表就非常占用内存,如果把列表变为迭代器,就占用很少的内存,为什么会占用内存少呢,因为迭代器只记录当前这元素和下一个元素,当你找我要的时候我才在内存中生成数据,不找我要,就不生成数据,也就不占用内存,这就是迭代器的惰性运算。 如何区分迭代器和可迭代对象?这个在我们时间长了后会混淆。 可迭代对象最简单的定义:可以使用for in 语句进行循环的对象。比如字符串、列表、元组

Python之迭代器和生成器

霸气de小男生 提交于 2019-12-28 01:12:45
迭代器 可迭代的数据类型: list dic str set tuple f=open()--文件句柄 range enumerate 不可迭代的数据类型: int bool 什么叫迭代? 结合我们使用for循环取值的现象,再从字面上理解一下,其实迭代就是,可以将某个数据集内的数据“一个挨着一个的取出来”,就 叫做迭代 。 什么是 可迭代协议 ? 可以被迭代要满足的要求就叫做可迭代协议。 可迭代协议 的定义非常简单,就是内部实现了__iter__方法, 只要含有__iter__方法的都是可迭代的。 可以被for循环的都是可迭代的,要想可迭代,内部必须有一个__iter__方法。 在for循环中,就是在内部调用了__next__方法才能取到一个一个的值。 print(dir[ ]) #告诉我列表拥有的方法 总结:   迭代器遵循 迭代器协议:必须拥有__iter__方法和__next__方法。   可以被for循环的都是可迭代的   可迭代的内部都有__iter__方法   只要是迭代器 一定可迭代   可迭代的.__iter__()方法就可以得到一个迭代器   迭代器中的__next__()方法可以一个一个的获取值   for循环其实就是在使用迭代器   只有是可迭代对象的时候 才能用 for   当我们遇到一个新的变量,不确定能不能for循环的时候,就判断它是否可迭代

函数复习

雨燕双飞 提交于 2019-12-27 09:57:02
1 什么是函数?  函数就是具备某一个功能的工具,    ----需要工具时,需要提前准备好,然后拿来就用且可以重复使用  所以    函数需要先定义,再使用 2 为什么要用函数?   1,代码的组织结构不清晰,可读性差  2,遇到重复的功能只能重复编写实现代码,代码冗余  3,功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维护难度极大 3 函数的分类:内置函数与自定义函数  内置函数:python解释器已经为我们定义好了的函数  自定义函数:我们自己根据需求,事先定制好的我们自己的函数,来实现某种功 4 如何自定义函数   语法  def 函数名(参数1,参数2,参数3.......):      """注释"""      函数体      return 返回的值  # 函数名要能反映其意义       函数使用的原则:先定义,再调用    函数即"变量","变量"必须先定义后引用。未定义而直接引用函数,就相当于在引用一个不存在的变量名    函数的使用,必须遵循原则:先定义,后调用   ###我们在使用函数时,一定要明确区分定义阶段和调用阶段###    #定义阶段      def foo():        print('from foo')        bar()      def bar():        print('from bar')  

函数、迭代器、生成器、装饰器

被刻印的时光 ゝ 提交于 2019-12-27 09:53:23
函数 函数基础 一、为什么要使用函数 把重复的代码提取出来,节省代码量 二、函数分类 内置函数,如len(),sun() 自定义函数 三、如何定义函数 def 函数名(参数1,参数2,参数3,...): '''注释''' 函数体 return 返回的值 四、函数使用的原则:先定义,后使用 五、调用函数 1、如何调用函数:函数名加括号 2、函数的返回值 函数的返回值通常都是一个,如果出现 return a,b 这种情况,其实是表示一个元组 六、函数的参数 #1、位置参数:按照从左到右的顺序定义的参数 位置形参:必选参数 位置实参:按照位置给形参传值,顺序必须一一对应 #2、关键字参数:按照key=value的形式定义的实参 无需按照位置为形参传值 注意的问题: 1. 关键字实参必须在位置实参右面 2. 对同一个形参不能重复传值 #3、默认参数:形参在定义时就已经为其赋值 可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参) 注意的问题: 1. 只在定义时赋值一次 2. 默认参数的定义应该在位置形参右面 3. 默认参数通常应该定义成不可变类型,举例 def add_end(L=[]): print(id(L)) L.append('END') return L print(add_end()) print(add_end()) 结果:

python之迭代器和生成器

天大地大妈咪最大 提交于 2019-12-27 07:30:34
一、迭代器协议 1、什么是迭代器协议 (1)、迭代器协议指对象必须提供一个next方法,执行该方法要么返回迭代中的下一项, 要么就引起一个StopIteration异常,以终止迭代(只能往后奏不能往前走) (2)、可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义了一个__iter__()方法) (3)、协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(for循环、sum、min、max函数) 使用迭代器协议访问对象 二、for循环机制 for循环的本质:循环所有对象,全都是使用迭代器协议 备注:for循环的本质就是遵循迭代器协议去访问对象,那么for循环的对象可定都是迭代器了啊,么错, 既然这样,for循环可以遍历(字符串、列表、元组、字典、集合、文件对象),那这些类型的数据肯定都是可迭代对象啊?但是,为什么我定义了一个列表l=[1,2,3,4,4]没有next()方法? ——字符串、列表、元组、字典、集合、文件对象这些都不是可迭代对象,只不过在for循环中,调用了他们 内部的__iter__方法,把他们变成了可迭代对象 ———for循环调用可迭代对象的__next__方法进行取值,而且for循环会捕捉Stopiteration异常,以终止迭代 1、for循环工作机制的模拟 1 l = [1,2,3] #将列表赋值为l 2 # for i in l:

Python-迭代器和生成器

▼魔方 西西 提交于 2019-12-27 07:25:23
一、递归和迭代:   1、递归(问路的案例)     递归算法是自己调用自己的过程   2、迭代(父生子,子生孙)       更新换代 二、迭代器协议:   1、迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就触发StopTteration异常,已终止迭代(只能往下走,不能往上走)   2、可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)   3、协议是一种约定,可迭代对象实现了迭代器协议,Python的内部工具(for循环,sum,max,min函数等)使用迭代器协议访问对象   4、for循环的本质就是遵循迭代器协议取访问对象,那么for循环的对象肯定都是迭代器。   5、不可迭代对象:字符串,列表,元组,字典,集合,文件对象。只不过for循环时,调用了他们的内部__iter__()方法,把他们变成了可迭代对象     -注-       1、生成器是可迭代对象       2、实现了延迟计算,看内存(按需执行)         3、生成器本质和其他类型一样,都是实现了迭代器协议,只不过生成器是一边计算一边生成,从而节省内存空间,其余的可迭代对象没有这个功能 三、迭代器:     1、遵循迭代器协议的访问方式: 1 x='hello' # 非可迭代对象 2 # print(dir(x)) 3 iter

python_10 迭代器和生成器

徘徊边缘 提交于 2019-12-27 07:21:27
迭代器协议: 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stopiteration异常,以终止迭代(只能往后走不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义_iter_方法) 3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象 for循环机制: for循环的本质:循环所有对象,全都是使用迭代器协议。 (字符串,列表,元组,字典,集合,文件对象)这些都不是可迭代对象,只不过在for循环时,调用了他们内部的_iter_方法,把他们变成了可迭代对象 然后for循环调用可迭代对象的_next_方法去取值,而且for循环会捕捉Stopiteration异常,以终止迭代。 s='abc' s_i=s.__iter__() print(s_i.__next__()) print(s_i.__next__()) print(s_i.__next__()) print(s_i.__next__())#抛StopIteration异常 >>>a >>>b >>>c >>>a Traceback (most recent call last): b File "E:/ch/Pylearning/Learning_09.py",

Python的迭代器与生成器

喜你入骨 提交于 2019-12-27 07:12:10
Python中的生成器和迭代器方便好用,但是平时对生成器和迭代器的特性掌握的不是很到位,今天将这方面的知识整理一下。 迭代器 为了更好的理解迭代器和生成,我们需要简单的回顾一下迭代器协议的概念。 迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法) 3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。 for循环 for循环的本质:循环所有对象,全都是使用迭代器协议。 for循环就是基于迭代器协议提供了一个统一的可以遍历所有对象的方法,即在遍历之前,先调用对象的__iter__方法将其转换成一个迭代器,然后使用迭代器协议去实现循环访问,这样所有的对象就都可以通过for循环来遍历了, 列表,字符串,元组,字典,集合,文件对象等本质上来说都不是可迭代对象,在使用for循环的时候内部是先调用他们内部的_iter_方法,使他们变成了可迭代对象,然后在使用可迭代对象的_next_方法依次循环元素,当元素循环完时,会触发StopIteration异常,for循环会捕捉到这种异常,终止迭代。

python内置函数

南笙酒味 提交于 2019-12-27 06:26:47
abs (x) 返回一个数字的绝对值。参数可以是整数或浮点数。如果参数是复数,则返回其幅值。 all (iterable) 如果迭代的所有元素都是TRUE(或者如果迭代是空的)返回true。 any (iterable) 如果迭代的任何元素都为真,则返回true。如果迭代为空,则返回false ascii (object) ascii() 函数类似 repr() 函数, 返回一个表示对象的字符串, 但是对于字符串中的非 ASCII 字符则返回通过 repr() 函数使用 \x, \u 或 \U 编码的字符。 生成字符串类似 Python2 版本中 repr() 函数的返回值。 bin (x) 返回一个整数 int 或者长整数 long int 的二进制表示。 bool ([x]) bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False。bool 是 int 的子类。 breakpoint (*args, **kws) Python 3.7添加了breakpoint(),这个内置函数使得函数被调用时,让执行切换到调试器。相应的调试器不一定是Python自己的pdb,可以是之前被设为首选调试器的任何调试器。以前,调试器不得不手动设置,然后调用,因而使代码更冗长。而有了breakpoint(),只需一个命令即可调用调试器,并且让设置调试器和调用调试器泾渭分明。