1. 函数的概念
函数(Function)是一段可重复使用的代码,它将一些变量(或参数)作为输入,执行一些操作,最终返回一个结果。定义和调用函数是Python编程中的基础技能之一,也是提高代码可读性和代码复用性的重要手段。
1.1 函数的定义
在Python中,定义函数使用关键字def,函数名后面跟着一对圆括号和冒号(:),括号中可以包含一些参数,函数的执行体必须缩进。
def function_name(paramenters):
# 函数执行体
return result
函数名是可自定义的,但要遵循Python命名规范,以字母或下划线开头,只包含字母、数字、下划线,且不能是关键字。参数是可选的,可以在括号中定义多个参数,多个参数之间用逗号隔开。
1.2 函数的调用
定义函数后,需要调用函数才能执行函数体中的代码,并获取返回值。函数的调用格式为:函数名(参数)。
result = function_name(paramenters)
调用函数时,需要传递与参数数量和类型相符的参数,函数调用后会返回一个结果,可以将结果保存到变量中或者直接输出。
2. 函数的参数传递
2.1 位置参数
位置参数是一种最常见的参数传递方式,也是函数默认的参数传递方式。位置参数的传递顺序必须与函数定义中的顺序一致,否则会导致函数返回错误的结果。
def sum(a, b):
result = a + b
return result
# 调用函数
x = 3
y = 4
print(sum(x, y))
在调用函数时,将参数x赋值给a,参数y赋值给b,函数返回3和4的和7。
2.2 默认参数
默认参数可以在函数定义时为参数设置默认值,如果在函数调用时没有为参数传递值,则使用默认参数的值。
def power(x, n=2):
result = 1
while n > 0:
result *= x
n -= 1
return result
# 调用函数
print(power(3))
print(power(3, 3))
在调用函数时,只传递了一个参数3,函数通过默认参数将n的值设为2,因此返回3的平方9。第二个调用传递了两个参数3和3,函数使用传递的参数计算3的立方27。
2.3 可变长参数
2.3.1 不定长位置参数
不定长位置参数是指在函数定义时,无法确定参数数量和类型,使用*args表示。传递参数时,可以传递任意数量的位置参数,函数将自动将参数放入一个元组中。
def print_args(*args):
print(args)
# 调用函数
print_args(1, 2, 3)
print_args('a', 'b', 'c', 'd')
在调用函数时,传递的参数数量不确定,函数使用*args接收传递的参数,将参数组成一个元组,分别输出(1, 2, 3)和('a', 'b', 'c', 'd')。
2.3.2 不定长关键字参数
不定长关键字参数是指在函数定义时,使用**kwargs表示的参数,可以传递任意数量、任意名称的关键字参数,函数将自动将参数放入一个字典中。
def print_kwargs(**kwargs):
print(kwargs)
# 调用函数
print_kwargs(a=1, b=2, c=3)
print_kwargs(x='hello', y='world')
在调用函数时,传递的参数数量和名称不确定,函数使用**kwargs接收传递的参数,将参数组成一个字典,分别输出{'a': 1, 'b': 2, 'c': 3}和{'x': 'hello', 'y': 'world'}。
3. 函数的返回值
在Python中,函数使用return关键字返回结果,可以返回单个结果、元组、列表、字典等数据类型。
def calculate(x, y):
add = x + y
sub = x - y
mul = x * y
div = x / y
return add, sub, mul, div
# 调用函数
result = calculate(3, 4)
print(result) # (7, -1, 12, 0.75)
在调用函数时,函数返回add、sub、mul、div组成的元组(7, -1, 12, 0.75),可以将结果保存到变量中,或者直接输出。
4. 匿名函数
在Python中,可以使用lambda关键字定义匿名函数,也称为lambda函数。lambda函数可以接收任意数量的参数,并使用一个表达式计算返回结果。
sum = lambda x, y: x + y
# 调用函数
result = sum(3, 4)
print(result) # 7
在上面的例子中,lambda函数接收两个参数x和y,返回它们的和x+y。可以将lambda函数赋值给一个变量,通过变量调用函数。
5. 练习:计算平均数
练习:定义一个函数,接收一个列表作为参数,返回列表中所有元素的平均数。如果传递的参数不是列表,则返回None。
def average(lst):
if not isinstance(lst, list):
return None
if len(lst) == 0:
return 0
total = sum(lst)
return total / len(lst)
# 调用函数,测试函数是否正确
lst1 = [2, 3, 4, 5, 6]
lst2 = [0, 0, 0, 0]
lst3 = []
lst4 = (2, 3, 4, 5, 6)
lst5 = 'hello'
assert average(lst1) == 4
assert average(lst2) == 0
assert average(lst3) == None
assert average(lst4) == None
assert average(lst5) == None
在上面的代码中,定义了一个average函数,用于计算列表中所有元素的平均数。在函数中,首先判断传递的参数是否为列表,如果不是,则返回None;然后判断列表长度是否为零,如果是,则返回0;最后计算列表所有元素的和,除以元素个数,返回计算结果。
总结
函数是Python编程中的基础技能之一,定义和调用函数是提高代码可读性和代码复用性的重要手段。Python中函数的参数传递方式有位置参数、默认参数、可变长参数等,函数的返回值可以是单个值、元组、列表、字典等数据类型。另外,在Python中还可以使用lambda表达式定义匿名函数,提高编程效率。