函数初识

面向过程编程和函数式编程

面向过程编程的缺点

1. 代码重复多

2. 代码可读性差

函数

1. 什么是函数?

函数就是对一项功能的封装

2. 函数的结构

比如我们计算一个字符串或列表的长度,我们可以写一个这样的函数

 1 def lenth(s):  # s为形参
 2     """
 3     计算可迭代对象长度
 4     :param s:
 5     :return:
 6     """
 7     count = 0
 8     for i in s:
 9         count += 1
10     return count

def是定义函数,下面写函数的执行语句,return是给函数的调用者返回一个或多个值,多个值以元组的形式返回

解释器遇到def是不会执行的,只有调用的时候才会执行,调用是函数名加一个括号,如lenth(l1),l1是传入的一个列表,称为实参,也就是实际传入的参数

return作用

1. 函数遇到return直接结束

2. return给函数的执行者(函数名加括号)返回值
单独return返回None
return单个值------>返回单个值,数据类型不变
return多个值------>返回以一个元组

3. 函数传参

函数的参数分为位置参数、关键字参数和混合参数

位置参数

函数可以传入多个参数,不加特别声明,就是位置参数,这些参数从左到右需一一对应

例如我们设计一个求两个数中的较大值的函数

1 def get_max(a, b):     # a,b就是位置参数
2     return a if a >= b else b
3 
4 
5 print(get_max(2, 3))

关键字参数

1 def func(name, movie):
2     print("%s是%s中的人物" % (name, movie))
3 
4 
5 func(movie="夏洛特烦恼", name="大春")

关键字参数的顺序可以颠倒

混合参数

位置参数和关键字参数可以混合使用,来看代码

1 def func(name, year, movie):    # 关键字参数必须在位置参数后面,不管是在形参位置和实参位置
2     print("%s是%s中的人物,故事发生在%s年" % (name, movie, year))
3 
4 
5 func("大春", 1998, movie="夏洛特烦恼")  

执行结果

大春是夏洛特烦恼中的人物,故事发生在1998年

默认参数

给形参设置默认值,通常是常用的数值,可以更改,需要注意的是默认参数一定要放在位置参数的后面

1 def func(movie, actor, country="中国"):    # 默认参数必须在位置参数后面
2     print("%s是在%s上映的一部电影,主角是%s" % (movie, country, actor))
3 
4 
5 func("夏洛特烦恼", "夏洛", "美国")     # 也可以写成country="美国",如果不写就是中国

执行结果

夏洛特烦恼是在美国上映的一部电影,主角是夏洛

默认参数这里有一个小陷阱,当默认参数是一个容器型数据类型时,那么这个数据在内存里只有一个,看一个实例

1 def func1(a, lst=[]):   # 默认参数如果是一个容器型数据类型,那么这个数据在内存中只有一个
2     lst.append(a)
3     return lst
4 
5 
6 print(func1(666))       # [666]
7 print(func1(22))        # [666,22]
8 print(func1(33, []))    # [33]

这里的默认参数是一个空列表,当第一次添加666时,这个列表变成了[666],第二次调用func函数添加22时,系统不会重新创建一个空列表,而是沿用之前的列表,而之前的列表已经变成了[666],因此再重新添加22时就会变成[666,22]。第8行重新给默认值参数传了一个空列表,表示不用默认的列表,而是用新传入的空列表,所以结果是[33]

万能参数

两个形参参数,接收所有的位置参数和关键字参数

1 def func(*args, **kwargs):
2     print(args)    # arg是以元组的形式
3     print(kwargs)  # kwargs是以字典的形式
4 
5 
6 func(1, 2, name="Ara", age=18)

执行结果

(1, 2)
{'name': 'Ara', 'age': 18}

小结

实参角度

(1)位置参数从左到右一一对应

(2)关键字参数从左到右一一对应,顺序随便

(3)混合参数,关键字参数一定要在位置参数后面

形参角度

(1)位置参数从左到右一一对应

(2)默认参数一定要放到位置参数后面

(3)万能参数接收实参角度的所有位置参数,关键字参数

 

posted @ 2018-12-28 15:51  乘月归  阅读(138)  评论(0)    收藏  举报