本节内容
- 函数的介绍
- 函数的创建
- 函数参数及返回值
- LEGB作用域
- 特殊函数
- 函数式编程
1.函数的介绍
为什么要有函数?因为在平时写代码时,如果没有函数的话,那么将会出现很多重复的代码,这样代码重用率就比较低。。。并且这样的代码维护起来也是很有难度的,为了解决这些问题,就出现了函数,用来将一些经常出现的代码进行封装,这样就可以在任何需要调用这段代码的地方调用这个函数就行了。
函数的定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
特性:
- 代码重用
- 保持一致性
- 可扩展性
2.函数的创建
在python中函数定义的格式如下:
1 2 3 |
def 函数名(形参): 函数体内部代码块 |
函数的调用使用 函数名(实参) 就可以调用函数了。
函数名的命名规则和变量的命名规则一样:
- 函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号;
- 函数名是区分大小写的。
- 函数名不能是保留字。
形参和实参的区别:
函数在定义的时候,函数名后面的括号中可以添加参数,这些参数就叫做形参,形参:顾名思义就是形式参数,只是一个代号。
实参是在调用函数的时候函数名后面的括号中的参数,形参和实参需要一一对应起来,否则调用函数会报错。
3.函数参数及返回值
前面提到函数的形参和实参要一一对应,那么参数对应有如下几种:
- 必须参数
- 关键字参数
- 默认参数
- 不定长参数 *args
- 不定长参数 **kwargs
1.必须参数:
必须参数必须以对应的关系一个一个传递进入函数,函数调用时传递的实参必须和函数定义时的形参一一对应,不能多也不能少,顺序也得一致。
举个栗子:
1 2 3 |
1 def f(name,age): 2 print(name,age) 3 f("小明",18) |
2.关键字参数
关键字参数是实参里面的概念,在调用函数的时候声明某个参数是属于某个关键字的。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
举个栗子:
1 2 3 |
1 def f(name,age): 2 print(name,age) 3 f(name="小明",18) |
3.默认参数
默认参数是在函数声明的时候,可以给某个参数指定默认值,这样的参数叫做默认值参数。如果在调用函数的时候,默认参数没有接收到对应的实参,那么就会将默认值赋值给这个参数。
举个栗子:
1 2 3 |
1 def f(name,age,sex="male"): 2 print(name,age,sex) 3 f(name="小明",18) |
这样,就会把默认参数male赋值给sex了。
4.不定长参数 *args
在python里面,函数在声明的时候,参数中可以使用(*变量名)的方式来接受不确定长度的参数,但是在python里面大家约定俗成使用*args接受不定长参数,这样在调用函数的时候传递的参数就可以是不定长度的了。args接受了不定长参数之后,将这些参数放到一个tuple里面,可以通过访问args来获取这些不定长参数。
举个栗子:
1 2 3 |
1 def f(*args): 2 print(args) 3 f("小明",18,"male") |
打印出来的是一个tuple,里面存放了(“小明”,18,”male”)这三个元素。
不定长参数 **kwargs
但是上面的args只能接收未命名的参数,那假如有类似于关键字参数的不定长参数该怎么办呢?python里面使用(**变量名)来接收不定长的命名变量参数。同样,python里面也约定俗成使用**kwargs接收不定长命名参数。kwargs接收了不定长参数之后,将这些参数放到一个字典里面,可以通过key获取到相应的参数值。
举个栗子:
1 2 3 |
1 def f(**kwargs): 2 print(kwargs) 3 f(name="小明",age=18,sex="male") |
介绍完了这些参数之后,接下来要介绍的是关于这些参数混合使用的情况:
假如一个函数使用了上面所有种类的参数,那该怎么办?为了不产生歧义,python里面规定了假如有多种参数混合的情况下,遵循如下的顺序使用规则:
1 2 |
1 def f(必须参数,默认参数,*args,**kwargs): 2 pass |
如果同时存在args和kwargs的话,args在左边
默认参数在必须参数的右边,在*args的左边
关键字参数的位置不固定(ps:关键字参数也不在函数定义的时候确定)
那么,假如有一个列表想要传递进入一个不定长的未命名参数的函数中去,可以在该列表前面加上*实现,同理如果想传递一个字典进入不定长命名参数的函数中去,可以在该字典前面加上**
举个栗子:
1 2 3 4 5 6 |
1 def f(*args,**kwargs): 2 print(args) 3 for i in kwargs: 4 print("%s:%s"%(i,kwargs[i])) 5 6 f(*[1,2,3],**{"a":1,"b":2}],**{"a":1,"b":2}ۣ码重用率就比较低。。。并且这样的代码维护起来也是很有难度的,为了解决这些问题,就出现了函数,用来将一些经常出现的代码进行封装,这样就可以在任何需要调用这段代码的地方调用这个函数就行了。
函数的定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性:
2.函数的创建在python中函数定义的格式如下:
函数的调用使用 函数名(实参) 就可以调用函数了。 函数名的命名规则和变量的命名规则一样:
形参和实参的区别: 函数在定义的时候,函数名后面的括号中可以添加参数,这些参数就叫做形参,形参:顾名思义就是形式参数,只是一个代号。 实参是在调用函数的时候函数名后面的括号中的参数,形参和实参需要一一对应起来,否则调用函数会报错。 3.函数参数及返回值前面提到函数的形参和实参要一一对应,那么参数对应有如下几种:
1.必须参数:必须参数必须以对应的关系一个一个传递进入函数,函数调用时传递的实参必须和函数定义时的形参一一对应,不能多也不能少,顺序也得一致。 举个栗子:
2.关键字参数 关键字参数是实参里面的概念,在调用函数的时候声明某个参数是属于某个关键字的。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。 举个栗子:
3.默认参数默认参数是在函数声明的时候,可以给某个参数指定默认值,这样的参数叫做默认值参数。如果在调用函数的时候,默认参数没有接收到对应的实参,那么就会将默认值赋值给这个参数。 举个栗子:
这样,就会把默认参数male赋值给sex了。 4.不定长参数 *args在python里面,函数在声明的时候,参数中可以使用(*变量名)的方式来接受不确定长度的参数,但是在python里面大家约定俗成使用*args接受不定长参数,这样在调用函数的时候传递的参数就可以是不定长度的了。args接受了不定长参数之后,将这些参数放到一个tuple里面,可以通过访问args来获取这些不定长参数。 举个栗子:
打印出来的是一个tuple,里面存放了(“小明”,18,”male”)这三个元素。 不定长参数 **kwargs但是上面的args只能接收未命名的参数,那假如有类似于关键字参数的不定长参数该怎么办呢?python里面使用(**变量名)来接收不定长的命名变量参数。同样,python里面也约定俗成使用**kwargs接收不定长命名参数。kwargs接收了不定长参数之后,将这些参数放到一个字典里面,可以通过key获取到相应的参数值。 举个栗子:
介绍完了这些参数之后,接下来要介绍的是关于这些参数混合使用的情况: 假如一个函数使用了上面所有种类的参数,那该怎么办?为了不产生歧义,python里面规定了假如有多种参数混合的情况下,遵循如下的顺序使用规则:
如果同时存在args和kwargs的话,args在左边 默认参数在必须参数的右边,在*args的左边 关键字参数的位置不固定(ps:关键字参数也不在函数定义的时候确定) 那么,假如有一个列表想要传递进入一个不定长的未命名参数的函数中去,可以在该列表前面加上*实现,同理如果想传递一个字典进入不定长命名参数的函数中去,可以在该字典前面加上** 举个栗子:
|