函数与生成器

函数

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

函数中没有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

相关推荐

  • ss

    sas

    Python笔记 2018-05-10
  • 封装与解构 集合

    封装和解构 封装:将多个值进行分割,结合在一起,本质上返回元组,只是省掉了小括号 ‘==‘意思为内容一致,‘=’意思为内存空间一致 解构:把线性结构的元素解开,并顺序的赋值给其他变量,左边接纳的变量数要和左边解开的元素数量一致 集合不是非线性 解构中使用*变量名接收,但不能单独使用,被*变量名收集后组成一个列表 第一个下划线为9,结果被第二个下划线重新赋值为…

    Python笔记 2018-04-01
  • 面向对象之魔术方法

    特殊属性 属性 含义 __name__ 类、函数、方法的名称 __module__ 类定义所在的模块名 __class__ 对象或类所属的类 __bases__ 类的基类的元组,顺序为它们在基类列表中出现的顺序 __doc__ 类、函数的文档字符串,若没定义则为None __mro__ 类的mro,方法查找顺序 __dict__ 类或实例的属性,可写的字典 …

    2018-05-20
  • 函数

    函数、参数、参数解构
    返回值、作用域
    递归函数
    匿名函数、
    生成器

    2018-04-16
  • 装饰器

    装饰器 需求 一个加法函数,想增强它的功能,能够输出被调用过以及调用的参数信息 def add(x, y): return x + y 增加信息输出功能 def add(x, y): print(“call add, x + y”)  # 日志输出到控制台 return x + y p 上面的加法函数是完成了需求,但是有以下的缺点 打…

    Python笔记 2018-04-23
  • Python数据结构

    数据结构个人总结,方便以后查找。

    Python笔记 2018-04-01