函数与生成器

函数

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

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

相关推荐

  • Python 部分知识点总结(一)

    此篇博客只是记录第三周未掌握或不熟悉的知识点,用来加深印象。

    Python笔记 2018-03-26
  • Python函数

    函数 数学函数 Python函数 若干语句块、函数名称、参数列表构成,组织代码的最小单元 完成一定的功能 作用 结构化编程对代码的最基本的封装,一般按照功能组织一段代码 复用,减少冗余代码 简洁美观,可读易懂 函数分类 内建函数,max()、reversed() 库函数,math.ceil() 函数定义、调用 def语句定义函数 def 函数名(参数列表):…

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

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

    Python笔记 2018-04-01
  • queue,threading,user_agents

    queue 模块 队列
    threading 模块 线程
    user_agents 浏览器信息提取

    2018-05-07
  • Python第十二周学习总结

    Git的使用

    2018-05-27
  • Python内置数据结构——字符串

    知识结构图 学习笔记 字符串 字符组成的有序序列,字符的集合 使用单引号、双引号、三引号引起来的字符序列 不可变对象 Unicode类型 定义 单引号、双引号、三引号 r、R:引号内的字符原样输出 元素访问 索引访问 可迭代 join连接 “string“.join(iteratable) 使用string作为分隔符将可迭代对象连接起…

    2018-03-31