Python 函数基础

使用函数的优点

#1、代码的组织结构不清晰,可读性差
#2、遇到重复的功能只能重复编写实现代码,代码冗余
#3、功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维护难度极大   

函数的概念

将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可

 函数分类

#1、内置函数
为了方便我们的开发,针对一些简单的功能,python解释器已经为我们定义好了的函数即内置函数。对于内置函数,我们可以拿来就用而无需事先定义,如len(),sum(),max()

#2、自定义函数
很明显内置函数所能提供的功能是有限的,这就需要我们自己根据需求,事先定制好我们自己的函数来实现某种功能,以后,在遇到应用场景时,调用自定义的函数即可。

函数使用的原则:先定义,再调用

#只检测语法,不执行代码
也就说,语法错误在函数定义阶段就会检测出来,而代码的逻辑错误只有在执行时才会知道

定义函数的三种形式

#1、无参:应用场景仅仅只是执行一些操作,比如与用户交互,打印
#2、有参:需要根据外部传进来的参数,才能执行相应的逻辑,比如统计长度,求最大值最小值
#3、空函数:设计代码结构

函数的参数

形参与实参

#形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上,函数调用结束,解除绑定
 1 #1、位置参数:按照从左到右的顺序定义的参数
 2         位置形参:必选参数
 3         位置实参:按照位置给形参传值
 4 
 5 #2、关键字参数:按照key=value的形式定义的实参
 6         无需按照位置为形参传值
 7         注意的问题:
 8                 1. 关键字实参必须在位置实参右面
 9                 2. 对同一个形参不能重复传值
10 
11 #3、默认参数:形参在定义时就已经为其赋值
12         可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参)
13         注意的问题:
14                 1. 只在定义时赋值一次
15                 2. 默认参数的定义应该在位置形参右面
16                 3. 默认参数通常应该定义成不可变类型
17 
18 
19 #4、可变长参数:
20         可变长指的是实参值的个数不固定
21         而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args,**kwargs
22 
23         ===========*args===========
24         def foo(x,y,*args):
25             print(x,y)
26             print(args)
27         foo(1,2,3,4,5)
28 
29         def foo(x,y,*args):
30             print(x,y)
31             print(args)
32         foo(1,2,*[3,4,5])
33 
34 
35         def foo(x,y,z):
36             print(x,y,z)
37         foo(*[1,2,3])
38 
39         ===========**kwargs===========
40         def foo(x,y,**kwargs):
41             print(x,y)
42             print(kwargs)
43         foo(1,y=2,a=1,b=2,c=3)
44 
45         def foo(x,y,**kwargs):
46             print(x,y)
47             print(kwargs)
48         foo(1,y=2,**{'a':1,'b':2,'c':3})
49 
50 
51         def foo(x,y,z):
52             print(x,y,z)
53         foo(**{'z':1,'x':2,'y':3})
54 
55         ===========*args+**kwargs===========
56 
57         def foo(x,y):
58             print(x,y)
59 
60         def wrapper(*args,**kwargs):
61             print('====>')
62             foo(*args,**kwargs)
63 
64 #5、命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递
65 可以保证,传入的参数中一定包含某些关键字
66         def foo(x,y,*args,a=1,b,**kwargs):
67             print(x,y)
68             print(args)
69             print(a)
70             print(b)
71             print(kwargs)
72 
73         foo(1,2,3,4,5,b=3,c=4,d=5)
74         结果:
75             2
76             (3, 4, 5)
77             3
78             {'c': 4, 'd': 5}
79 
80 此乃重点知识!!!
使用方法

 

  

 

posted @ 2017-12-09 16:55  年少倾负  阅读(110)  评论(0)    收藏  举报