网站首页 > 技术文章 正文
4.1 函数的定义与调用
4.1.1 理论知识
函数是组织好的、可重复使用的代码块,用于执行特定的任务。它可以提高代码的复用性和可维护性。
在Python中,定义函数使用def关键字,其基本语法如下:
def function_name(parameters):
"""函数文档字符串,用于描述函数的功能、参数和返回值"""
# 函数体
statements
return expression
- function_name是函数的名称,遵循Python的命名规则。
- parameters是函数的参数列表,可以为空,多个参数之间用逗号分隔。参数是函数在调用时接收的数据。
- 函数文档字符串(docstring)是对函数功能、参数和返回值的描述,虽然不是必需的,但强烈建议添加,以便他人理解和使用该函数。
- statements是函数体,包含实现函数功能的具体代码。
- return语句用于返回函数的执行结果。return语句是可选的,如果没有return语句,函数将返回None。
调用函数时,使用函数名后跟括号,如果函数有参数,在括号内传入相应的参数值。
4.1.2 示例代码
def add_numbers(a, b):
"""
这个函数用于将两个数字相加并返回结果。
参数:
a (int或float): 要相加的第一个数字。
b (int或float): 要相加的第二个数字。
返回:
int或float: a和b相加的结果。
"""
result = a + b
return result
sum_result = add_numbers(3, 5)
print(f"两数之和为: {sum_result}")
4.1.3 代码解释
- 首先使用def定义了一个名为add_numbers的函数,它接受两个参数a和b。
- 在函数体中,将a和b相加的结果赋值给result,然后使用return返回result。
- 调用add_numbers(3, 5),将3和5作为参数传递给函数,函数执行后返回8,并将返回值赋给sum_result。
- 最后通过print函数输出两数之和。
4.2 函数参数
4.2.1 位置参数
理论知识:位置参数是根据参数的位置来传递值的参数。在调用函数时,传递的参数值按照顺序依次对应函数定义中的参数。
示例代码:
def describe_person(name, age):
print(f"{name} 今年 {age} 岁。")
describe_person("Alice", 25)
代码解释:
- describe_person函数接受两个位置参数name和age。
- 调用describe_person("Alice", 25)时,"Alice"按照位置对应name参数,25对应age参数,所以输出Alice 今年 25 岁。。
4.2.2 关键字参数
理论知识:关键字参数是在调用函数时,通过参数名来指定参数值的方式。这样可以不按照参数定义的顺序传递参数。
示例代码:
def describe_person(name, age):
print(f"{name} 今年 {age} 岁。")
describe_person(age=30, name="Bob")
代码解释:
- 同样是describe_person函数,这里调用时使用关键字参数,明确指定age的值为30,name的值为"Bob",所以输出Bob 今年 30 岁。,即使参数顺序与函数定义不同也能正确传递。
4.2.3 默认参数
理论知识:默认参数是在函数定义时为参数提供一个默认值。在调用函数时,如果没有传递该参数的值,则使用默认值。
示例代码:
def describe_person(name, age=18):
print(f"{name} 今年 {age} 岁。")
describe_person("Charlie")
describe_person("David", 22)
代码解释:
- describe_person函数中age参数有默认值18。
- 调用describe_person("Charlie")时,没有传递age参数的值,所以使用默认值18,输出Charlie 今年 18 岁。。
- 调用describe_person("David", 22)时,传递了age的值为22,则使用传递的值,输出David 今年 22 岁。。
4.2.4 可变参数
理论知识:
- *args:用于收集多个位置参数,将它们作为一个元组传递给函数。
- **kwargs:用于收集多个关键字参数,将它们作为一个字典传递给函数。
示例代码:
def print_info(*args, **kwargs):
print("位置参数:", args)
print("关键字参数:", kwargs)
print_info(1, 2, 3, name="Eve", city="New York")
代码解释:
- print_info函数使用*args和**kwargs来收集参数。
- 调用print_info(1, 2, 3, name="Eve", city="New York")时,1、2、3被收集到args元组中,name="Eve"和city="New York"被收集到kwargs字典中。
- 函数分别输出位置参数元组和关键字参数字典。
4.3 函数返回值
4.3.1 单返回值
理论知识:函数可以通过return语句返回一个值,这个值可以是任何数据类型。
示例代码:
def square_number(num):
return num ** 2
result = square_number(5)
print(f"5 的平方是: {result}")
代码解释:
- square_number函数接受一个参数num,计算其平方并通过return返回结果。
- 调用square_number(5),返回值25赋给result,然后输出5 的平方是: 25。
4.3.2 多返回值
理论知识:函数也可以返回多个值,实际上是返回一个包含多个值的元组。
示例代码:
def divide_numbers(a, b):
quotient = a // b
remainder = a % b
return quotient, remainder
div_result, mod_result = divide_numbers(10, 3)
print(f"10 除以 3 的商是: {div_result},余数是: {mod_result}")
代码解释:
- divide_numbers函数接受两个参数a和b,计算商和余数,并通过return返回这两个值。
- 调用divide_numbers(10, 3),返回的商和余数分别赋给div_result和mod_result,然后输出商和余数。
4.4 函数的嵌套
4.4.1 理论知识
函数的嵌套是指在一个函数内部定义另一个函数。内部函数只能在外部函数内部被调用,这种方式可以实现更复杂的逻辑封装和代码组织。
4.4.2 示例代码
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
closure = outer_function(5)
result = closure(3)
print(f"结果是: {result}")
4.4.3 代码解释
- outer_function函数接受一个参数x,并在其内部定义了inner_function函数。inner_function函数接受参数y,并返回x + y。
- outer_function函数返回inner_function,此时inner_function形成了一个闭包,它记住了外部函数outer_function的x值。
- 调用outer_function(5),返回的inner_function对象赋给closure。
- 调用closure(3),实际上是调用inner_function(3),由于闭包特性,它可以使用outer_function中x的值5,所以返回5 + 3 = 8,并输出结果。
4.5 递归函数
4.5.1 理论知识
递归函数是指在函数的定义中使用自身来解决问题的函数。递归函数必须有一个终止条件,否则会导致无限递归,最终耗尽系统资源。
4.5.2 示例代码
def factorial(n):
if n == 0 or n == 1:
return 1
else:
return n * factorial(n - 1)
fact_result = factorial(5)
print(f"5 的阶乘是: {fact_result}")
4.5.3 代码解释
- factorial函数用于计算阶乘。
- 当n为0或1时,这是终止条件,直接返回1。
- 否则,通过n * factorial(n - 1)进行递归调用,例如计算5!时,会依次计算5 * 4 * 3 * 2 * 1。最终返回5的阶乘结果120并输出。
猜你喜欢
- 2025-06-15 python入门到脱坑函数—语法详解(python函数教程)
- 2025-06-15 python中的流程控制语句:continue、break 和 return使用方法
- 2025-06-15 在Python中将函数作为参数传入另一个函数中
- 2025-06-15 Python:读取文本返回关键词及其权重
- 2025-06-15 小白必看!Python 六大数据类型增删改查秘籍,附超详细代码解析
- 2025-06-15 Python学不会来打我(21)python表达式知识点汇总
- 2025-06-15 Python基础入门之range()函数用方法详解
- 2025-06-15 python入门 到脱坑输入与输出—str()函数与repr()函数
- 2025-06-15 Python教程:序列中的最大值max()、最小值min()和长度len()详解
- 2025-06-15 Python学不会来打我(20)循环控制语句break/continue详解
- 06-15python 打地鼠小游戏(打地鼠小游戏代码)
- 06-15浅析 Python 中的队列类(python队列函数)
- 06-15python委托定制超类getattr和getattribute管理属性
- 06-15python 内置函数 getattr(python内置函数的用法)
- 06-15一文掌握Python 的 getattr函数(python中getattribute)
- 06-15Python 字典 get() 方法:操作指南
- 06-15python入门到脱坑函数—语法详解(python函数教程)
- 06-15python中的流程控制语句:continue、break 和 return使用方法
- 266℃Python短文,Python中的嵌套条件语句(六)
- 265℃python笔记:for循环嵌套。end=""的作用,图形打印
- 264℃PythonNet:实现Python与.Net代码相互调用!
- 260℃Python实现字符串小写转大写并写入文件
- 258℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 118℃原来2025是完美的平方年,一起探索六种平方的算吧
- 99℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 92℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
-
- python 打地鼠小游戏(打地鼠小游戏代码)
- 浅析 Python 中的队列类(python队列函数)
- python委托定制超类getattr和getattribute管理属性
- python 内置函数 getattr(python内置函数的用法)
- 一文掌握Python 的 getattr函数(python中getattribute)
- Python 字典 get() 方法:操作指南
- python入门到脱坑函数—语法详解(python函数教程)
- python中的流程控制语句:continue、break 和 return使用方法
- 在Python中将函数作为参数传入另一个函数中
- Python:读取文本返回关键词及其权重
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)