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 ]

猜你喜欢

转载自www.cnblogs.com/yuer20180726/p/10790376.html