在程序中需要反复执行的某些代码,可用函数将它们封装起来。函数具有函数名、参数和返回值。可以在模块中但是类之外定义,作用域是当前模块,我们称之为函数,也可在别的函数中定义,我们称之为嵌套函数,还可在类中定义,我们称之为方法。
一、定义函数
def 函数名(形式参数列表):
函数体
return 返回值
如果没有数据返回则可省略return语句
由于定义函数时的参数不是实际数据,会在调用函数时传给它们实际数据,所以称定义函数时的参数为形式参数,简称形参;称调用函数时传递的实际数据为实际参数,简称实参。可将形参理解为在函数中定义的变量。
# coding=utf-8
def rect_area(width, height):
area = width * height
return area
def print_area(width, height):
area = width * height
print("{0} x {1} 长方形的面积:{2}".format(width, height, area))
C语言有函数重载,即可定义多个同名函数,但是参数列表不同。python中没有函数重载,而是为函数的参数提供默认值实现。
# coding=utf-8
def make_coffee(name="卡布奇诺"):
return "制作一杯{0}咖啡。".format(name)
coffee1 = make_coffee("拿铁")
coffee2 = make_coffee()
print(coffee1) # 制作一杯拿铁咖啡。
print(coffee2) # 制作一杯卡布奇诺咖啡。
二、可变参数
python中的函数可定义接收不确定数量的参数,这种参数被称为可变参数。可变参数有两种,即在参数前加*或**。
1. 基于元组的可变参数
*可变参数在函数中被组装成一个元组
# coding=utf-8
def sum(*numbers):
total = 0.0
for number in numbers:
total += number
return total
print(sum(100.0, 20.0, 30.0)) #输出150.0
print(sum(30.0, 80.0)) #输出110.0
2. 基于字典的可变参数
**可变参数在函数中被组装成一个字典
# coding=utf-8
def show_info(**info):
print('-----show_info-----')
for key, value in info.items():
print('{0} - {1}'.format(key, value))
show_info(name='Jack', age=20, sex=False)
show_info(student_name='Jack', student_no='2100')
四、函数中变量的作用域
全局变量:模块内
局部变量:函数内
# coding=utf-8
# 创建全局变量x
x = 20
def print_value():
# global x # 将x变量提升为全局变量
x = 10
print("函数中x = {0}".format(x))
print_value()
print("全局变量x = {0}".format(x))
五、函数类型
python中的任意一个函数都有数据类型,这种数据类型是function,被称为函数类型。
1.一个函数可作为另一个函数的返回值使用。
2. 一个函数可作为另一个函数的参数使用。
# coding=utf-8
# 定义加法函数
def add(a, b):
return a + b
# 定义减法函数
def sub(a, b):
return a - b
# 定义平方函数
def square(a):
return a * a
# 定义计算函数
def calc(opr):
if opr == '+':
return add
else:
return sub
f1 = calc('+') #f1实际上是add函数
f2 = calc('-') #f2实际上是sub函数
print(type(f1))
print("10 + 5 = {0}".format(f1(10, 5)))
print("10 - 5 = {0}".format(f2(10, 5)))
六、过滤函数filter()
filter(function,iterable)
# coding=utf-8
# 提供过滤条件函数
def f1(x):
return x > 50 # 找出大于50的元素
data1 = [75, 27, 16, 61, 95, 83, 29, 51, 67,101]
filtered = filter(f1, data1)
print(type(filtered))
data2 = list(filtered)
print(data2)
七、映射函数map()
map(function,iterable)
# coding=utf-8
# 代码文件: ch8_6_3.py
# 提供变换规则的函数
def f1(x):
return x * 2 # 变换规则乘以2
data1 = [75, 27, 16, 61, 95, 83, 29, 51, 67,101]
mapped = map(f1, data1)
print(type(mapped))
data2 = list(mapped) # 转换为列表
print(data2)
八、lambda函数
lambda 参数列表:lambda体
注意:lambda体只能是一条语句
在python中使用lambda关键字定义匿名函数,lambda关键字定义的函数也被称为lambda函数。
# coding=utf-8
# 代码文件:ch8_7.py
def calc(opr):
if opr == '+':
return lambda a, b: (a + b) #替代add函数
else:
return lambda a, b: (a - b) #替代sub函数
f1 = calc('+') #f1实际上是add函数
f2 = calc('-') #f2实际上是sub函数
print(type(f1))
print("10 + 5 = {0}".format(f1(10, 5)))
print("10 - 5 = {0}".format(f2(10, 5)))