第7章 函数
使用函数的优点:
- 减少程序中的代码重复量。(去重)
- 把大而复杂的问题分解成小问题。(拆解)
- 有助于提升代码的整洁度,使代码更易于理解。(干净)
- 使一段代码可以重复使用多次。(复用)
根据函数所在作用域的不同分为:
- ① 函数:在模块中但是类之外定义,作用域为当前模块。
- ② 嵌套函数:在别的函数中定义的函数。
- ③ 方法:在当前类中定义的函数。
7.1 定义函数
语法格式:
def 函数名 ([参数列表]):
函数体
#如果没有数据要返回,则可以省略return语句
return 返回值
① 圆括号内是形参列表,如果有多个参数则使用逗号分隔开,即使该函数不需要接收任何参数,也必须保留一对空的圆括号。
② 圆括号后的“ : ”必不可少。
③ 函数体相对于def关键字必须保持缩进。
④ 函数体中可以使用return语句返回值。return语句可以多条,在这种情况下,一旦第一条return得到执行,函数立即终止。return可以出现在函数体的任何位置。
7.2 调用函数
语法格式:函数名 ([实参列表])
def cal(one,two):
print("第一个数: ",one)
print("第二个数: ",two)
return one+two
#使用位置参数调用函数
print("sum: ",cal(1,2))
#使用关键字参数调用函数
print("sum: ",cal(two=567,one=123))
使用位置参数调用函数: 实参列表传递参数的顺序必须与形参列表保持一致。
使用关键字参数调用函数: 关键字的名称就是定义函数时形参的名称,实参不再受形参的顺序限制(可读性高)
ps:函数在调用之前,必须先声明,再使用。(python解释型语言,没有预编译)
7.3 参数的默认值
在python中没有函数重载的概念,而是为函数的参数提供默认值实现。
调用该函数时,如果没有传入对应的实参值,则函数使用声明时指定的默认参数值。
默认值参数必须写在形参列表的右边
def eat(food="水果"):
return "你喜欢吃{0}".format(food)
print(eat("薯条"))#你喜欢吃薯条
print(eat())#你喜欢吃水果
7.4 可变参数
Python中的函数可以定义接收不确定数量的参数,这种参数被称为可变参数。可变参数有两种,即在参数前加*或** 。
基于元组的可变参数
def sum(*num):
total=0
for number in num:
total+=number
return total
#多个参数会被组装成元组num
print(sum(1,2,3,4,5))
print(sum(1,3,5,7,9,10))
基于字典的可变参数
def show_info(**info):
print("--------show_info------")
for k,v in info.items():
print('{0}-{1}'.format(k,v))
show_info(name="toro",age=15,sex="man")
show_info(stu_id="5220753",stu_no="1")
7.6 函数类型
过滤函数filter()
格式:filter(function,iterable)
- function是一个提供过滤条件的函数,返回布尔值(判断)
- iterable是容器类型的数据(序列)
def f1(x):
return x>50#找出大于50的元素
data1=[23,41,56,4,75,57]
filtered=filter(f1,data1)
data2=list(filtered)#转换成列表
print(data2)
注意:filter()函数的返回值并不是一个列表,加果需要返列表类型的数据,则还需要通过list()函数进行转换。
映射函数map()
格式:map(function,iterable)
- function是一个提供变换规则的函数,返回变换之后的元素(变换规则)
- iterable是容器类型的数据(序列)
def f1(x):
return x*2#变换规则*2
data1=[23,41,56,4,75,57]
filtered=map(f1,data1)
data2=list(filtered)#转换成列表
print(data2)#[46, 82, 112, 8, 150, 114]
lambda()函数
格式:lambda 参数列表:lambda体
def f1(x):
return x>50
# lambda x:(x>50),等价于上面两行代码
def f1(x):
return x*2
# lambda x:(x*2),等价于上面两行代码