目录
1.函数目的
在编程中,定义函数的目的是为了将一段可重复使用的代码逻辑封装起来,使其能够通过一个函数名和参数列表进行调用。函数定义的主要目的包括:
1. 模块化代码:将复杂的程序分解为较小的功能块,每个功能块对应一个函数,使得代码更易于理解和维护。
2. 提高代码复用性:定义函数可以使相同或类似功能在不同的上下文中多次调用,避免重复编写相同的代码片段。
3. 抽象和封装:函数将实现细节隐藏在函数体内部,只暴露给外部调用者函数的接口(即函数的名称和参数列表),这种封装提高了代码的可读性和可维护性。
4. 简化代码:函数可以将复杂的操作简化为一个函数调用,提高了代码的简洁性和可读性。
5. 提高可测试性:函数使得代码更易于单元测试,因为可以独立地测试每个函数的输入和输出,确保其行为符合预期。
6. 减少错误和调试时间:通过函数封装,可以减少代码中的重复性错误,并且当需要调试时,可以更方便地定位和修复问题。
2.函数定义
函数定义是在编程中定义一个可重复使用的代码块或子程序的过程。
函数定义通常包括这关键部分:函数名,形参,实参,函数体,返回值,
def wake_up(name, num): # wake_up 函数名 name,num 形参
"""
函数:封装叫醒功能
"""
for i in range(num):
print(f"醒醒啦 {name}")
# 调用一个函数
wake_up("王思聪", 1)
print("-----")
wake_up("马云", 2)
print("-----")
wake_up("马化腾", 5)
3.函数的调用
# 定义函数,形参为两个数 a 和 b
def add_numbers(a, b):
result = a + b
return result
# 调用函数,并输出结果
x = 5
y = 3
sum_result = add_numbers(x, y)
print("Sum:", sum_result)
在这个示例中:
1.add_numbers 是函数的名称,它接受两个形参 a 和 b。
2.在主程序中,我们定义了变量 x 和 y,它们作为实参传递给函数 add_numbers。
3.函数 add_numbers 返回 x + y 的结果,这个结果被赋值给变量 sum_result。
4.最后,程序打印出 Sum: 后面跟着函数返回的结果。
4.函数的形参,实参
例一:
# 定义一个函数,计算两个数的和
def add_numbers(a, b):
return a + b
# 调用函数,传递具体的数值作为实参
result = add_numbers(3, 5)
print("Result:", result) # 输出:Result: 8
# 分析add_numbers 函数有两个形参 a 和 b,用来接收两个数值。
# 函数调用 add_numbers(3, 5) 中,3 和 5 是实参,它们被传递给函数来执行加法操作。
例二:
# 定义一个函数,将两个字符串连接起来
def concatenate(str1, str2):
return str1 + " " + str2
# 调用函数,传递两个字符串作为实参
result = concatenate("Hello", "World!")
print("Result:", result) # 输出:Result: Hello World!
# concatenate 函数有两个形参 str1 和 str2,分别表示要连接的两个字符串。
# 函数调用 concatenate("Hello", "World!") 中,"Hello" 和 "World!" 是实参,它们被传递给
# 函数来执行字符串连接操作。
5.函数的返回值
在Python中,使用 return 语句返回函数值
1.返回一个值
def add(a, b):
return a + b
result = add(3, 5)
print(result) # 输出:8
返回值为a + b 的值
2.返回多个值
Python 中的函数可以返回多个值,实际上是返回一个元组(tuple)。
def divide(a, b):
quot = a // b
rema = a % b
return quot, rema
result = divide(10, 3)
print(result) # 输出:(3, 1)
divide
函数返回了两个值:商 quot
和余数 rema
,作为一个元组 (quot, rema)
返回给调用者。
3.没有返回值
有些函数并不需要返回值,或者只用于执行操作而不返回具体结果。这时可以使用 return
语句不带任何表达式,或者直接省略 return
语句:
def greet(name):
print(f"Hello, {name}!")
greet("Alice")
4.返回None
如果一个函数执行完毕后没有显式地使用 return
语句返回任何值,Python 默认会返回 None
:
def do_nothing():
pass
result = do_nothing()
print(result) # 输出:None
do_nothing
函数没有具体的返回值,因此 result
的值是 None
。
6.函数的参数类型
1. 必需参数
必需参数是指函数定义时声明的参数,在调用函数时必须按顺序传入对应的实参。例如:
def greet(name, greeting):
return f"{greeting}, {name}!"
# 使用关键字参数传递参数,可以不按顺序
result = greet(greeting="Hi", name="Bob")
print(result) # 输出:Hi, Bob!
name
和 greeting
都是必需参数
2. 关键字参数
关键字参数是指在调用函数时使用 key=value
形式传递的参数,可以不按照定义时的顺序传递。例如:
def greet(name, greeting):
return f"{greeting}, {name}!"
# 使用关键字参数传递参数,可以不按顺序
result = greet(greeting="Hi", name="Bob")
print(result) # 输出:Hi, Bob!
greeting="Hi", name="Bob",关键字参数
3. 默认参数
默认参数在函数定义时给定默认值,在调用函数时如果没有传入这些参数,则使用默认值。例如:
def sum_numbers(*args):
total = 0
for num in args:
total += num
return total
# 可以传递任意数量的实参
result1 = sum_numbers(1, 2, 3)
print(result1) # 输出:6
result2 = sum_numbers(10, 20, 30, 40)
print(result2) # 输出:100
greeting
参数有一个默认值 "Hello"
,如果调用时没有提供这个参数,就会使用默认值。
4. 可变参数
可变参数允许传递不定数量的实参给函数。在函数定义中,可以使用 *args
来表示可变参数。例如:
def sum_numbers(*args):
total = 0
for num in args:
total += num
return total
# 可以传递任意数量的实参
result1 = sum_numbers(1, 2, 3)
print(result1) # 输出:6
result2 = sum_numbers(10, 20, 30, 40)
print(result2) # 输出:100
5. 关键字可变参数
关键字可变参数允许传递不定数量的关键字参数给函数。在函数定义中,可以使用 **kwargs
来表示关键字可变参数。例如:
def value_s( **kwargs):
print(sid)
print(name)
print(*args)
print(info)
print(kwargs)
value_s(more1="小羊们别跑", s=10)
value_s
函数可以接受任意数量的关键字参数,并打印它们的键值对。
7.匿名函数
基本语法
匿名函数的基本语法如下:
lambda arguments: expression
lambda
是关键字,表示创建一个匿名函数。arguments
是函数的参数,类似于正常函数中的参数列表,可以是任意数量的参数。expression
是一个表达式,函数执行时返回这个表达式的结果。
示例
1.计算平方
square = lambda x: x ** 2
print(square(5)) # 输出:25
lambda x: x ** 2
创建了一个接受参数 x
并返回 x ** 2
的匿名函数。通过 square(5)
调用这个匿名函数,并输出结果 25
。
2.加法
add = lambda a, b: a + b
print(add(3, 4)) # 输出:7
这里的 lambda a, b: a + b
定义了一个接受两个参数 a
和 b
,并返回它们的和的匿名函数。