函数_python
函数是程序中的一个重要构建块,它封装了一段可重用的代码。通过定义函数,可以提高代码的可读性和可维护性。Python中的函数使用 def
关键字定义,并允许通过参数来传递外部信息,返回值则允许函数将计算结果返回给调用者。
6.1 定义函数:def
关键字
在Python中,函数使用 def
关键字定义,接着是函数名称、参数列表和代码块。函数体通过缩进来表示。
6.1.1 基本函数定义
函数的定义格式如下:
def function_name(parameters):
# 执行的代码块
return result # 可选的返回值
示例:
# 定义一个简单的函数
def greet(name):
print(f"Hello, {name}!")
# 调用函数
greet("Alice")
greet("Bob")
6.2 参数与返回值
Python函数可以接收参数(输入)并返回值(输出)。返回值是可选的,但如果函数需要返回某些结果,可以使用 return
语句。
6.2.1 参数
函数的参数是通过函数调用时传入的值,可以是位置参数、默认参数、可变参数或关键字参数。
示例:
# 定义带有多个参数的函数
def add(a, b):
return a + b
# 调用函数
result = add(3, 5)
print(result) # 输出 8
6.2.2 返回值
return
语句用于将函数的结果返回给调用者。如果没有 return
语句,函数默认返回 None
。
示例:
def multiply(a, b):
return a * b
result = multiply(4, 5)
print(result) # 输出 20
6.3 默认参数、可变参数、关键字参数
Python函数支持不同类型的参数,可以让函数更加灵活。
6.3.1 默认参数
默认参数是在函数定义时指定的参数值。如果调用时没有提供该参数的值,则使用默认值。
示例:
def greet(name="Guest"):
print(f"Hello, {name}!")
greet() # 输出 Hello, Guest!
greet("Tom") # 输出 Hello, Tom!
6.3.2 可变参数(*args
和 **kwargs
)
*args
用于传递任意数量的位置参数。它将接收到的位置参数作为一个元组。**kwargs
用于传递任意数量的关键字参数。它将接收到的关键字参数作为一个字典。示例:
# 使用 *args
def sum_all(*args):
total = 0
for num in args:
total += num
return total
print(sum_all(1, 2, 3)) # 输出 6
print(sum_all(5, 10, 15, 20)) # 输出 50
# 使用 **kwargs
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=25, city="New York")
# 输出:
# name: Alice
# age: 25
# city: New York
6.3.3 组合使用默认参数、*args 和 **kwargs
可以将默认参数、*args
和 **kwargs
一起使用,通常 *args
和 **kwargs
应该位于所有普通参数和默认参数之后。
示例:
def func(a, b=2, *args, c=3, **kwargs):
print(a, b, args, c, kwargs)
func(1, 5, 6, 7, c=8, d=9) # 输出: 1 5 (6, 7) 8 {'d': 9}
6.4 匿名函数(Lambda函数)
Python提供了一个用于创建简洁函数的方式:Lambda函数。Lambda函数是一种匿名函数,通常用于编写小的函数,而不需要定义一个完整的函数。
Lambda函数的基本语法如下:
lambda arguments: expression
示例:
# 定义一个求平方的lambda函数
square = lambda x: x ** 2
print(square(5)) # 输出 25
# Lambda与map()一起使用
numbers = [1, 2, 3, 4]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # 输出 [1, 4, 9, 16]
6.5 函数的作用域(局部与全局变量)
函数的作用域决定了变量的可见性和生命周期。Python中主要有两种作用域:局部作用域和全局作用域。
6.5.1 局部变量与全局变量
示例:
# 全局变量
x = 10
def my_function():
# 局部变量
y = 5
print(x + y) # 访问全局变量x和局部变量y
my_function() # 输出 15
6.5.2 修改全局变量
在函数内修改全局变量时,必须使用 global
关键字来显式声明该变量为全局变量,否则会创建一个新的局部变量。
示例:
x = 10
def modify_global():
global x # 声明 x 是全局变量
x = 20
modify_global()
print(x) # 输出 20
6.5.3 nonlocal
关键字
nonlocal
关键字用于在函数内修改嵌套作用域(外层函数)中的变量,而不是创建局部变量。
示例:
def outer_function():
x = 10
def inner_function():
nonlocal x # 修改外层函数的x
x = 20
inner_function()
print(x) # 输出 20
outer_function()
小结
def
关键字定义函数,可以包含参数和返回值。*args
)和关键字参数(**kwargs
)。lambda
关键字可以创建简洁的匿名函数,常用于简单的操作。global
和 nonlocal
可以修改外部作用域的变量。通过灵活地使用函数,你可以将重复的代码块封装成函数,提高代码的可复用性和可维护性。在写更复杂的程序时,理解作用域和参数的使用方法将帮助你更好地控制变量的生命周期和作用范围。
作者:ppdd805