把python基本功搞扎实(7)
来源:互联网 发布:百分百软件下载 编辑:程序博客网 时间:2024/05/21 17:50
来谈一谈函数
1.定义函数
一个函数主要由三部分构成:函数名,函数参数,函数返回值,由def语句定义函数
2.函数参数
python的函数参数主要分为以下几种:必选参数,默认参数,可变参数,关键字参数
必选参数:
顾名思义,必选参数就是在调用函数的时候要传入数量一致的参数
默认参数:
默认参数是指在定义函数的时候提供一些默认值,如果在调用函数的时候没有传递该参数,则自动使用默认值,否则使用传递时该参数的值。
使用默认参数需要注意两点:1.默认参数要放在所有必选参数的后面 2.默认参数应该使用不可变对象
可变参数:
当我们无法估计函数应该制定多少个参数的时候,就可以使用可变参数了。参数签名有个*就代表是可变的,而参数接收的是一个tuple。还有,那个*表示任意参数,实际上,它还有另外一个用法,用来给函数传递参数
def add(x,y): return x*ya=[1,2]add(*a) #相当于add(1,2)
关键字参数:
可变参数允许你将不定数量的参数传递给函数,而关键字参数则允许你将不定长度的键值对,作为参数传递给一个函数。其表达形式是参数前面有两个××号。在函数内部,它会表示成一个dict。
参数组合:
在实际的使用中,会同时用到必选参数,默认参数,可变参数和关键字参数或其中的某些。但是,需要注意的是,它们在使用的时候要按照顺序:必选参数,默认参数,可变参数和关键字参数。
3.高阶参数
一个函数接收另一个函数作为参数,这种函数称之为高阶函数
def test(g,arr): return [g(x) for x in arr]
map:
map函数的使用形式如下:
map(function,sequence)
reduce:
reduce函数的使用形式如下:
reduce(function,sequence[,initial])
先将sequence的前两个item传给function,然后函数的返回值和sequence的下一个item再传给function。直到sequence没有元素,如果有initial,则作为初始值调用
reduce(lambda x,y:x*y,[1,2,3,4]) #相当于((1*2)*3)*4
filter:
filter函数用于过滤元素,它的使用形式如下:
filter(function,sequnce)
将function依次作用于sequence的每个item,即function(item),将返回值为True的item组成一个迭代器返回
4.匿名函数
匿名函数的创建方式为:lambda 参数:表达式。解释:关键字lambda说明它是一个匿名函数,冒号:前面的变量是该匿名函数的参数,冒号后面是函数的返回值,注意这里不需要return关键字。
5.闭包
一个函数但会了一个内部函数,该内部函数引用了外部函数的相关函数的相关参数和变量,我们把该返回的内部函数称为闭包(Closure)
from math import powdef make_pow(n): def inner_func(x): return pow(x,n) return inner_func
在上面的代码中,函数make_pow里面又定义了一个内部函数inner_func,然后将该函数返回。因此,我们可以使用make_pow来生成另一个函数。内部函数inner_func引用了外部函数make_pow的自由变量n,也就是说,当函数make_pow的生命周期结束后,n这个变量依然会保存在inner_func中,它被inner_func所引用。
闭包的作用是引用了自由变狼,即使生成闭包的环境已经释放,闭包仍然存在。闭包在运行时可以有多个实例,即使传入的参数相同。利用闭包,我们还可以模拟类的实例
6.装饰器
装饰器本质上是一个高阶函数,以被装饰的函数为参数,并返回一个包装后的函数
装饰器的一般使用形式为:
@decoratordef func(): pass装饰器可以定义多个,离函数定义最近的装饰器先被调用,装饰器还可以带参数
7.partial函数
python提供了一个functools的模块,该模块为高阶函数提供支持,partial就是其中的一个函数,该函数的形式如下:functools.partial(func[,*args][,**kwargs])
partial函数的功能就是:把一个函数的某些参数给固定住,返回一个新的函数
阅读全文
0 0
- 把python基本功搞扎实(7)
- 把python基本功搞扎实(1)
- 把python基本功搞扎实(2)
- 把python基本功搞扎实(3)
- 把python基本功搞扎实(4)
- 把python基本功搞扎实(5)
- 把python基本功搞扎实(6)
- 把python基本功搞扎实(8)
- 把python基本功搞扎实(9)
- Python基本功:list 和 tuple,掌握了扎实的基本功,才能用好python语言
- 经验之谈php+mysql扎实个人基本功
- php+mysql扎实个人基本功
- [转载]一家之言的经验之谈php+mysql扎实个人基本功
- 一家之言的经验之谈php+mysql扎实个人基本功
- 一家之言的经验之谈php+mysql扎实个人基本功
- c语言基本功不扎实,竟然这个不晓得
- 李刚突破java__程序开发-扎实的开发基本功
- 李刚突破java__程序开发-扎实的开发基本功
- CSS-关于BFC的理解(转)
- noip 2006 金明的预算方案
- Noip 2007 矩阵取数游戏
- linux基础
- 基于Python单向循环链表实现尾部、任意位置添加,删除
- 把python基本功搞扎实(7)
- JAVA面试题整理之—基础篇第二部
- 图像识别——象棋识别相关论文资料算法暂存
- golang tcp server client
- Ubuntu14.04 下安装OpenCV源码库
- @JoinColumn 详解
- ubuntu16.04编译android2.3源码
- 深入理解Java继承
- 数组中只出现一次的数字