函数与生成器

函数

由若干语句组成的语句块,函数名,参数列表构成,是组织代码的最小单元,完成一定的功能,结构化编程对代码的最基本的封装,封装的目的是为了复用

函数中没有return,隐式会返回一个none值

定义中的参数列表成为形式参数,只是一种形式表达,简称形参

调用时写的参数是实际参数,是实实在在传入的值,简称实参

函数的定义,只是声明了参数,不会执行,可以进行调用,定义需要在调用前,也就是说调用时,已经被定义过了

函数是否可调用,用callable(函数名)进行检测

参数调用时传入的参数要和定义的个数相匹配(可变参数例外)

位置参数:按照参数定义顺序传入实参

关键字参数:使用形参的名字来输入实参的方式,如果使用了形参名字,那么传参顺序就可和定义顺序不同,要求位置参数必须在关键字参数之前,位置参数是按照位置对应传入的

在形参前使用*表示该形参是可变参数,可以接受多个实参(包括0个),收集多个实参为一个tuple,不能进行更改

在形参前使用**符号,表示可以接收多个关键字参数,收集的实参名称和值组成一个字典

如果在一个星号参数后,或者一个位置可变参数后,出现的普通参数,实际上已经不是普通参数了,而是keyword-only参数,args可以看作已经截获了所有的位置参数,普通参数不使用关键字参数就不可能拿到实参

参数列表的一般顺序是,普通参数,缺省参数,可变位置参数,keyword-only参数(可带缺省值),可变关键字参数

参数解构:给函数提供实参的时候,可以在集合类型前使用*或者**,把集合类型的结构解开,提取出所有元素作为函数的实参,非字典类型使用*解构成位置参数,字典类型使用**解构成关键字参数,提取出来的元素数目要和参数的要求匹配,也要和参数的类型匹配

def fn(x, y, z=3, *arg, m=4, n, **kwargs):

 

匿名函数

匿名函数,即没有名字的函数,借助lambda表达式构建匿名函数

格式:  lambda参数列表:表达式

参数列表不需要小括号,冒号是用来分割参数列表和表达式的,不需要使用return,表达式的值,就是匿名函数的返回值,lambda表达式(匿名函数)只能写在一行上,称为单行函数

print((lambda *args: (x for x in args))(*range(5)))

 

生成器

列表解析式:返回值for元素in可迭代对象if条件,使用中括号[ ],内部是for循环,if条件语句可选,返回一个新的列表

生成器表达式:返回值for元素in可迭代对象if条件,列表解析式的中括号换成小括号就行了,返回一个生成器

集合解析式:返回值for元素in可迭代对象if条件,列表解析式的中括号换成大括号{}就行了,立即返回一个集合

字典解析式:返回值for元素in可迭代对象if条件,列表解析式的中括号换成大括号{}就行了,使用key:value形式,立即返回一个字典

 

生成器表达式:只需将列表解析式中的[ ]换位()即可,延迟计算,惰性求值,列表解析式立即返回结果

生成器为可迭代对象,迭代器,迭代器是可迭代对象,可迭代对象不一定是迭代器

迭代器不可从头再走,不回头,若为列表,可进行再次迭代,可回头

生成器表达式省内存,列表解析式返回新的列表

生成器没有数据,内存占用少,但是使用时候,虽一个个返回数据,但合起来所占内存差不多

迭代器未必是生成器

is可用来看地址是否相同

 

 

 

 

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/96306

(0)
DrueDrue
上一篇 2018-04-16 09:14
下一篇 2018-04-16 10:22

相关推荐

  • 函数

    函数 数学定义:y=f(x),y是x的函数,x是自变量 Python函数 有若干个语句块,函数名称,参数列表构成,它是组织代码的最小单元 完成一定作用 函数的作用 结构化编程对代码的最基本的封装,一般按照功能组织一段代码 封装的目的为了复用,减少了冗余代码 代码更加简洁美观,更加易读 函数的分类 内建函数,如max(),reversed()等 库函数,如ma…

    2018-04-16
  • 元组与字符串

    元组tuple 一个有序的元素组成的集合,不可变,用()表示,可进行索引,正索引:从左至右,从0开始;负索引:从右至左,从-1开始,正负索引不可超界,否则引发indexerror,tuple[index],index就是索引,使用中括号访问 元组是只读的,所以没有增,改,删的方法 冒泡法:属于交换排序,两两比较大小,交换位置,结果分为升序和降序排列 升序:n…

    Python笔记 2018-04-01
  • 树 非线性结构,每个元素可有多个前驱和后继 树是n(n>=0)个元素的集合,n=0时,称为空树,树只有一个特殊的没有前驱的元素,称为树的根root,树中除了根结点外,其余元素只能有一个前驱,可以有零个和多个后继,子树也有自己的根 结点:树中的数据元素 结点的度degree:结点拥有的子树的数目称为度,记作d(v)。树的度是树内各结点的度最大值 叶子结点…

    2018-04-16
  • Python面向对象基础

    语言分类 面向机器 抽象成机器指令,让机器容易理解 代表:汇编语言 面向过程 按照步骤一步一步走,若出现情况A做相应的处理,若出现情况B做相应的处理 问题规模小,可以步骤化,按部就班处理 代表:C 面向对象OOP 计算机需要处理的问题的规模越来越大,需要多人、多部门协作 代表:C++、Java、Python 面向对象 一种认识世界、分析世界的方法论。将万事万…

    2018-05-06
  • Python文件操作

    计算机体系架构 运算器:完成各种算术运算、逻辑运算、出具传输等数据加工处理 控制器:控制程序的执行 CPU = 运算器 + 控制器 存储器:用于记忆程序的数据,内存 输入设备:将数据或程序输入到计算机中 输出设备:将数据或程序的处理结果展示给用户 文件IO常用操作 open 打开 read 读取 write 写入 close 关闭 readline 行读取 …

    Python笔记 2018-05-02
  • 杨辉三角专题

    杨辉三角;二项式

    2018-04-09