python函数与函数式编程

python函数与函数式编程
强烈推介IDEA2021.1.3破解激活,IntelliJ IDEA 注册码,2021.1.3IDEA 激活码  

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说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
]

转载于:https://www.cnblogs.com/yuer20180726/p/10790376.html

本文来源weixin_30595035,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/29860

发表评论