Python3 函数详解
函数是程序设计中的基本构建块,在 Python 中,函数用于组织可重用的代码片段。Python 提供了非常灵活的函数定义与调用方式。
1. 函数的定义与调用
1.1 定义函数
使用 def 关键字来定义函数,后跟函数名和参数列表。函数体包含在缩进块中。
基本语法
def function_name(parameters):
# 函数体
return value
示例 1:定义一个简单的加法函数
def add(a, b):
return a + b
result = add(3, 5)
print(result) # 输出 8
1.2 调用函数
调用函数时,只需使用函数名并传入适当的参数。
add(2, 4) # 调用函数并传入参数
2. 函数参数
2.1 位置参数(Positional Arguments)
函数的参数按照位置顺序传递。
def greet(name, age):
print(f"Hello {name}, you are {age} years old.")
greet("Alice", 25) # 位置参数
2.2 默认参数(Default Arguments)
在定义函数时,可以为参数设置默认值。如果调用时未传入对应的参数,将使用默认值。
def greet(name, age=30):
print(f"Hello {name}, you are {age} years old.")
greet("Bob") # 使用默认值 age=30
greet("Charlie", 40) # 使用传入的值 age=40
2.3 可变参数(Variable-Length Arguments)
*args:用于接收任意数量的位置参数。args是一个元组,包含所有传递的位置参数。**kwargs:用于接收任意数量的关键字参数。kwargs是一个字典,包含所有传递的键值对参数。
示例 1:使用 *args
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3)) # 输出 6
print(sum_all(5, 10, 15, 20)) # 输出 50
示例 2:使用 **kwargs
def greet(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
greet(name="Alice", age=25, location="New York")
# 输出:
# name: Alice
# age: 25
# location: New York
2.4 参数传递的顺序
调用函数时,参数的传递顺序为:位置参数 -> 默认参数 -> 可变参数。
def example(a, b=2, *args, c=3, **kwargs):
print(a, b, args, c, kwargs)
example(1, 4, 5, 6, c=10, d=20)
# 输出:
# 1 4 (5, 6) 10 {'d': 20}
3. 返回值(Return Values)
函数可以使用 return 语句返回一个值,也可以返回多个值。没有 return 语句时,函数默认返回 None。
3.1 返回单个值
def square(x):
return x * x
result = square(4)
print(result) # 输出 16
3.2 返回多个值
返回多个值时,Python 会将它们打包成一个元组。
def get_user_info():
return "Alice", 25 # 返回一个元组
name, age = get_user_info() # 解包元组
print(name, age) # 输出 Alice 25
4. 局部变量与全局变量
4.1 局部变量
在函数内定义的变量是局部变量,作用范围仅限于函数内部。
def local_variable():
x = 10 # 局部变量
print(x)
local_variable() # 输出 10
# print(x) # 会报错,因为 x 是局部变量,函数外不可访问
4.2 全局变量
在函数外定义的变量是全局变量,作用范围为整个程序。
x = 20 # 全局变量
def global_variable():
print(x)
global_variable() # 输出 20
修改全局变量
如果在函数内想要修改全局变量,需要使用 global 关键字:
x = 10
def modify_global():
global x
x = 20
modify_global()
print(x) # 输出 20
5. 匿名函数(Lambda 函数)
Lambda 函数 是一种快速定义小函数的方式,通常用于函数式编程中。它使用 lambda 关键字,通常用于简单的、一次性的函数。
5.1 基本语法
lambda 参数: 表达式
示例 1:Lambda 函数加法
add = lambda x, y: x + y
print(add(3, 5)) # 输出 8
示例 2:排序中的 lambda 函数
pairs = [(1, 2), (3, 1), (5, 4)]
pairs.sort(key=lambda x: x[1])
print(pairs) # 输出 [(3, 1), (1, 2), (5, 4)]
6. 高阶函数
高阶函数是接受函数作为参数或返回函数的函数。在 Python 中,map()、filter() 和 reduce() 是常见的高阶函数。
6.1 map() 函数
map() 函数接受一个函数和一个可迭代对象,将函数应用到可迭代对象的每一个元素。
numbers = [1, 2, 3, 4]
squared = map(lambda x: x ** 2, numbers)
print(list(squared)) # 输出 [1, 4, 9, 16]
6.2 filter() 函数
filter() 函数根据给定的函数和可迭代对象,过滤出返回值为 True 的元素。
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # 输出 [2, 4, 6]
6.3 reduce() 函数
reduce() 函数将一个二元函数应用于序列的每一项,将结果汇总为一个值。它位于 functools 模块中。
from functools import reduce
numbers = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, numbers)
print(product) # 输出 24
7. 函数的作用域
- 局部作用域:在函数内部定义的变量,只能在函数内部访问。
- 全局作用域:在函数外部定义的变量,可以在整个程序中访问。
- 内建作用域:Python 内置的名称空间,例如
print()、len()等。
总结
- 函数定义:使用
def关键字定义函数,支持多种参数类型(位置参数、默认参数、可变参数)。 - 返回值:通过
return返回值,支持返回单个或多个值。 - 作用域:区分局部变量与全局变量,通过
global关键字修改全局变量。 - Lambda 函数:用于定义简单的匿名函数。
- 高阶函数:接受函数作为参数并返回函数的函数,如
map()、filter()和reduce()。
函数是 Python 编程的核心工具之一,灵活掌握函数的用法,可以让你的代码更加简洁且高效。更多详细内容请关注其他相关文章!