python函数与函数式编程
Posted yuer20180726
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python函数与函数式编程相关的知识,希望对你有一定的参考价值。
https://www.cnblogs.com/evablogs/p/6699515.html
在理解函数式编程之前,我还是对函数的调用,参数传递以及函数的嵌套调用一头雾水,还是花了点时间整理了写思绪,以便我后面对装饰器复杂的参数传递和函数的调用的理解。
函数的定义
def 函数名():
代码块
例如:
1
2
3
|
def func_name(): block return value #return语句表示函数执行到此结束,如果没有return语句则会返回None,有return没有语句也是返回None |
另外,Python中不允许前向引用,即在函数定义之前,不允许调用该函数。所以函数必须先定义再调用,否则会报错,找不到该函数的定义。
1
2
3
4
5
6
|
print func_name() #若在函数定义前调用函数,则报错 Traceback (most recent call last): File "<pyshell#72>" , line 1 , in <module> print func_name() NameError: name ‘func_name‘ is not defined |
参数的传递
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
>>> def f(a,b,c = 10 ): #定义三个参数,设置c的默认值为10 return a + b + c >>> print (f( 3 , 2 )) #传递参数的值,默认匹配没有默认值的参数 15 >>> print (f( 3 , 2 , 1 )) #传递参数的值,若传递的参数都有值,则不会取默认值 6 >>> def func( * name): #包裹传递,将所有的参数传递给name元组 print type (name) print name >>> func( 1 , 4 , 6 ) < type ‘tuple‘ > ( 1 , 4 , 6 ) >>> func( 5 , 6 , 7 , 1 , 2 , 3 ) < type ‘tuple‘ > ( 5 , 6 , 7 , 1 , 2 , 3 ) >>> def func( * * dict ): #字典收集所有的关键字 print type ( dict ) print dict >>> func(a = 1 ,b = 9 ) < type ‘dict‘ > { ‘a‘ : 1 , ‘b‘ : 9 } >>> func(m = 2 ,n = 1 ,c = 11 ) < type ‘dict‘ > { ‘c‘ : 11 , ‘m‘ : 2 , ‘n‘ : 1 } |
函数嵌套
python程序,一个函数在另外一个函数的里面,外层的函数返回的是里层函数。
函数嵌套时,内层函数可以访问外层函数的变量,但不能对其变量重新赋值。
1
2
3
4
5
6
7
8
9
10
11
|
>>> def yao1(a = 1 ,b = 32 ): def yao2(c = 54 ): def yao3(d = 3 ): def yao4(e = 10 ): return a + b + c + d + e return yao4 return yao3 return yao2 >>> print yao1()()()() 100 |
函数式编程
函数式编程与函数不同,函数式编程是将一个函数作为参数传递给另一个函数,最后返回一个函数。
典型的函数式编程辅助函数有:reduce/map/filter等函数,一需要认识和积累这些辅助和内置函数,其二了解匿名函数lambda的使用,让函数式编程的代码更加简洁和易读。
1
2
3
4
5
6
7
8
9
10
|
>>> number = [ 2 , - 5 , 9 , - 7 , 2 , 5 , 4 , - 1 , 0 , - 3 , 8 ] #给列表赋值 >>> sum = filter ( lambda x: x> 0 , number) #filter(func,number):从number的item中依次筛选符合func条件的元素,即从number列表中筛选x>0的元素并返回 #lambda args: expression >>> average = reduce ( lambda x,y: x + y, sum ) / len ( sum ) #reduce(func,number):先将number元组中的前两个元素执行func函数,返回的值继续与下一个元素一起执行func函数 >>> print average 5 >>> >>> print map ( lambda x:x % 3 , range ( 6 )) #map(func,seq):seq中的每个元素都经过了func函数的作用,重新得到了func(seq[n])组成的列表 [ 0 , 1 , 2 , 0 , 1 , 2 ] |
以上是关于python函数与函数式编程的主要内容,如果未能解决你的问题,请参考以下文章