1. 函数的概念和作用
函数是一种封装代码的方法,可以将代码块赋予一个名称,使其容易理解和重复使用。函数能够接受任意数量的参数和返回值,这使得它们非常灵活且在无数场景中广泛应用。
为什么要使用函数?
提高代码复用性:将一些通用的代码块封装成一个函数,可以在程序的其他部分反复调用。
提高代码可读性:使用函数可以让代码更易读,尤其是对于一些大型程序来说。函数的名称和参数往往就可以让其他人很快地了解函数实现的功能。
提高代码的可维护性:函数运行测试与验证更容易,当需要修改某个功能时,只需要修改一个函数,而不是在整个程序中修改多次。
2. 定义函数
在Python中,可以使用def关键字定义一个函数。定义函数时需要指定函数名和参数,可以包含函数体和返回值。
2.1 语法格式
def function_name(parameter1, parameter2, ...):
# 执行代码
return result
其中,def关键字表明函数定义的开始,后跟函数的名称和一对圆括号,括号内指定传入函数的参数。函数体以冒号开始,并缩进四个空格。
函数体可以包含任意数量的Python语句,可能还会包含一个return语句,它指定函数执行完成后返回的值。
2.2 示例
以下是一个简单的例子,定义了一个函数add
,它接受两个数字作为参数,并返回它们的和。
def add(x, y):
result = x + y
return result
3. 调用函数
当定义了一个函数后,可以在程序中的任何地方调用它,以便利用该函数的功能。在调用函数时,需要传入与函数定义中声明的参数相同数量的参数。当函数返回时,也可以选择将返回值赋值给一个变量。
3.1 示例
使用上面定义的add
函数来执行两个数字的加法:
a = 10
b = 20
sum = add(a, b)
print("The sum of {0} and {1} is {2}".format(a, b, sum))
在控制台中,将打印以下输出:
The sum of 10 and 20 is 30
4. 函数参数
可以在函数定义中声明参数,参数允许您将值传递给函数。Python函数可以有两种类型的参数:形式参数和实际参数
4.1 形式参数
任何在函数定义中使用的参数都是形式参数。形式参数是调用函数时指定的变量名,可以根据需要指定零个或多个,但是必须在函数体中使用它们。
4.2 实际参数
当函数被调用时,它们接受的值称为实际参数。实参可以是常量、变量、表达式等。
4.3 示例
以下示例显示如何声明函数的参数,并调用使用一个参数的函数。
def square(x):
return x * x
# 调用函数
result = square(5)
print(result)
在此示例中,square()
函数的参数为x
。调用函数时,传递的参数为5
。函数返回传递的参数的平方,结果为25
。
5. 传递参数
Python中的函数可以以不同的方式接受传递的参数,包括使用默认参数值、使用关键字参数和使用不定数量的参数。
5.1 默认参数值
在定义函数时,可以指定默认参数值。当在函数调用时未传递参数值时,将使用默认值。这样的参数称为默认参数。
5.2 示例
以下示例显示如何声明具有默认参数值的函数:
def greeting(name, message = 'Hello'):
print(message, name)
# 调用函数
greeting('Bob')
greeting('Alice','Good morning!')
在此示例中,greeting()
函数的第二个参数message
具有默认值'Hello'
。在第一次调用函数时,只传递了一个参数。在第二次调用函数时,传递了两个参数。
5.3 关键字参数
在传递参数时,可以指定参数名称。这种方式称为关键字参数。这样可以跳过不关心的参数,同时可以按任意顺序传递参数。
5.4 示例
以下示例显示如何使用关键字参数方式调用函数:
def greeting(name, message = 'Hello'):
print(message, name)
# 使用关键字参数
greeting(message = 'Good afternoon!', name = 'Adam')
5.5 不定数量参数
如果不确定函数需要多少个参数,可以使用不定数量的参数。在Python中,有两种不定数量参数的类型:
不定数量的位置参数:在函数声明中,使用一个或多个星号(*)表示为不定数量的位置参数。
不定数量的关键字参数:在函数声明中,使用两个星号(**)表示为不定数量的关键字参数。
5.6 使用不定数量的位置参数
不定数量的位置参数可以接受任意数量的参数。这些参数以元组的形式提供给函数。在函数定义中,使用一个或多个星号(*)来表示不定数量的位置参数。
5.7 示例
以下示例显示如何使用一个星号来传递不同数量的参数。
def sum(*numbers):
result = 0
for num in numbers:
result = result + num
return result
# 调用函数
print(sum(1, 2, 3))
print(sum(10, 20, 30, 40, 50))
在此示例中,sum()
函数的参数为*numbers
。在第一次调用该函数时,传递了3个参数。
在第二次调用该函数时,传递了5个参数。
5.8 使用不定数量的关键字参数
不定数量的关键字参数可以接受任意数量的参数。这些参数以字典的形式提供给函数。在函数定义中,使用两个星号(**)表示不定数量的关键字参数。
5.9 示例
以下示例显示如何使用两个星号传递关键字参数:
def print_data(**data):
for key, value in data.items():
print("{0} : {1}".format(key, value))
# 调用函数
print_data(name='Adam', age=25, salary=4500.00)
在此示例中,print_data()
函数的参数**data
可以接受任意数量的关键字参数。在函数体中,使用data.items()
访问传递的关键字参数,并打印每个参数的值。
6. 全局变量和局部变量
6.1 声明全局变量
在Python中,如果要将变量视为全局变量,则必须使用global关键字声明该变量。
6.2 示例
以下示例显示如何在函数中声明全局变量:
count = 0
def increment():
global count
count += 1
print(count)
# 调用函数
increment()
increment()
increment()
在此示例中,increment()
函数声明了一个全局变量count
,并对其进行递增操作。
6.3 声明局部变量
局部变量是在函数内部定义的变量。
注意:不能在函数内部改变全局变量的值,因为全局变量的作用域范围超出了函数的作用域范围。
6.4 示例
以下示例显示如何在函数中声明局部变量:
def print_msg(msg):
count = 1
print("Message: " + msg)
print("Count: " + str(count))
# 修改局部变量的值
count += 1
# 调用函数
print_msg("Hello")
print_msg("Hi")
print_msg("Hey")
在此示例中,print_msg()
函数声明了一个名为count
的局部变量,并将其初始化为1
。函数调用时,count
的值在每次调用时都被递增。
7. lambda 函数
在Python中,lambda函数是一种特殊类型的函数,也称为匿名函数。这些函数通常很小,只包含单个语句。当您需要一个执行简单任务的函数时,这将非常有用。
7.1 语法格式
在Python中,使用lambda关键字来定义lambda函数。lambda函数的语法格式如下:
lambda arguments:expression
注意:lambda函数的参数数量可以为0个、1个、多个,但只能包含一个表达式。
7.2 示例
以下示例显示如何定义并调用lambda函数:
# 定义函数
square = lambda x: x ** 2
# 调用函数
result1 = square(5)
result2 = square(10)
# 输出结果
print("Square of 5 is ", result1)
print("Square of 10 is ", result2)
在此示例中,使用lambda
关键字定义了一个使用单个参数的lambda函数square
。函数体只包含一行代码。
在调用函数时,传递了数字5
和10
。函数返回数字的平方值。
8. 结论
函数是Python中非常强大的工具之一,提供了创建可维护和可重用代码的方式。Python中的函数可以接受任意数量的参数和返回值,使它们非常灵活且在无数场景中应用广泛。在Python中定义和调用函数非常简单,并且还可以使用默认参数值、关键字参数、不定数量的位置参数和关键字参数等。 全局变量和局部变量可以使您定义的函数更具灵活性。最后,您还可以使用lambda函数来执行一些简单的操作。