函数入门
在 Python 中,函数(Function) 是一段封装了特定功能的可重用代码块,通过函数名调用,能让代码更简洁、模块化,便于维护和复用。
一、为什么需要函数?
假设你需要多次计算两个数的和,如果每次都写一遍加法代码,会导致重复冗余。而函数可以将这段加法逻辑封装起来,需要时直接调用,减少重复代码。
二、函数的基本结构
用 def 关键字定义函数,语法如下:
def 函数名(参数1, 参数2, ...):
"""函数文档字符串(可选,说明函数功能)"""
函数体(实现功能的代码块,需缩进)
return 返回值(可选,默认返回 None)
- 函数名:遵循变量命名规则(字母、数字、下划线,不能以数字开头),建议见名知意(如
add、calculate_area)。 - 参数:函数接收的输入(可选,无参数则写空括号
())。 - 函数体:实现具体功能的代码,必须缩进(4个空格)。
- return:指定函数的返回结果(可选),执行到
return后函数立即结束。
三、函数的定义与调用
1. 无参数、无返回值的函数
# 定义函数:打印问候语
def say_hello():
"""打印简单的问候语"""
print("Hello, Python!")
# 调用函数:函数名+括号
say_hello() # 输出:Hello, Python!
2. 带参数的函数
参数是函数的“输入”,让函数更灵活(可处理不同数据)。
# 定义函数:计算两数之和(带两个参数)
def add(a, b):
"""返回a和b的和"""
result = a + b
return result # 返回计算结果
# 调用函数:传入实际参数(实参)
sum1 = add(3, 5) # 实参3、5分别传给形参a、b
print(sum1) # 输出:8
sum2 = add(10, 20)
print(sum2) # 输出:30
- 形参(parameter):定义函数时的参数(如
a、b),是“形式上的参数”。 - 实参(argument):调用函数时传入的参数(如
3、5),是“实际的数据”。
3. 带默认参数的函数
默认参数允许函数在调用时省略部分参数(使用预设值),需放在位置参数后面。
# 定义函数:计算a与b的乘积,b的默认值为1
def multiply(a, b=1):
"""返回a乘以b的结果,b默认是1"""
return a * b
# 调用时可省略默认参数
print(multiply(5)) # 只传a,b用默认值1 → 5*1=5
print(multiply(5, 3)) # 传a和b,覆盖默认值 → 5*3=15
4. 关键字参数调用
调用函数时,可通过“参数名=值”的形式指定参数,无需严格按顺序传递。
def introduce(name, age):
print(f"我叫{name},今年{age}岁")
# 按位置传参(需顺序一致)
introduce("小明", 18) # 输出:我叫小明,今年18岁
# 按关键字传参(顺序可换)
introduce(age=20, name="小红") # 输出:我叫小红,今年20岁
四、函数的返回值
- 用
return语句指定返回值,函数执行到return后会立即结束。 - 若没有
return,函数默认返回None(表示“无值”)。 - 函数可返回多个值(本质是返回一个元组,可直接解包)。
示例:返回多个值
# 定义函数:返回一个数的平方和立方
def square_and_cube(x):
square = x **2
cube = x** 3
return square, cube # 实际返回 (square, cube) 元组
# 调用函数,接收多个返回值
s, c = square_and_cube(3) # 解包元组,s=9,c=27
print(s, c) # 输出:9 27
五、函数的文档字符串(docstring)
函数内首行的字符串(用 """ 或 ''' 包裹),用于说明函数功能、参数、返回值等,可通过 help(函数名) 查看。
def calculate_area(radius):
"""
计算圆的面积
参数:
radius: 圆的半径(正数)
返回:
圆的面积(π * radius²)
"""
import math
return math.pi * radius **2
# 查看文档
help(calculate_area) # 输出函数的说明文档
六、函数的作用域
- 局部变量:函数内部定义的变量,仅在函数内部有效(外部无法访问)。
- 全局变量:函数外部定义的变量,可在函数内部读取(若要修改需用
global声明)。
示例:局部变量与全局变量
# 全局变量
global_var = 100
def test_scope():
# 局部变量(仅在函数内有效)
local_var = 200
print("函数内访问全局变量:", global_var) # 可读取全局变量
print("函数内访问局部变量:", local_var)
test_scope()
# print(local_var) # 报错:外部无法访问局部变量
七、综合示例:简易计算器函数
def calculator(a, b, op):
"""
简易计算器:实现加减乘除
参数:
a: 第一个数字
b: 第二个数字
op: 运算符(+、-、*、/)
返回:
计算结果(除法时除数为0返回"错误")
"""
if op == "+":
return a + b
elif op == "-":
return a - b
elif op == "*":
return a * b
elif op == "/":
if b == 0:
return "错误:除数不能为0"
else:
return a / b
else:
return "错误:不支持的运算符"
# 调用函数测试
print(calculator(10, 5, "+")) # 15
print(calculator(10, 0, "/")) # 错误:除数不能为0
print(calculator(7, 3, "%")) # 错误:不支持的运算符
总结
- 函数通过
def定义,用函数名()调用,核心是“封装功能、重复使用”。 - 参数让函数更灵活(位置参数、默认参数、关键字参数)。
- 返回值用
return指定,可返回单个值或多个值(元组)。 - 文档字符串提升函数可读性,作用域区分变量的访问范围。
多写函数能让代码更简洁,减少冗余,是编程的核心技能之一。
如何让代码可以被重复使用?如何提高代码的可读性和可维护性?方法之一便是使用函数。函数就是组织在一起的、可以被其他代码调用的、实现特定功能的一段代码。
目标:掌握函数的编写方式以及函数的基本使用。
概要:
- 初识函数
- 函数的参数
- 函数的返回值
定义函数
在Python中,用关键字def定义函数,其语法为
# 定义函数
def 函数名():
函数内编写代码
return 返回值
...
# 执行函数
函数名()
例如,我们定义一个求某数的n次方的函数,示例如图所示。

简化power函数

为了进一步理解函数的概念和用法,下面再以斐波那契数列(Fibonacci sequence)的函数定义做进一步说明。斐波那契数列的定义可简要表述为:第一项和第二项的值均为1,其后每一项的值为其前两项的值之和。其函数定义及调用如下图所示。
斐波那契数列的定义可简要表述为:第一项和第二项的值均为1,其后每一项的值为其前两项的值之和。

函数的参数
在定义函数时,如果在括号中添加
变量,我们称它为函数的形式参数。
默认参数值
在某些情况下,我们可能需要以默认参数值调用函数。例如,下图中关于求某数的n次方的函数,我们希望默认情况下为求平方。也就是说,如果不提供n的值,则默认n为2。

不定长参数
在某些情况下,我们在定义函数时可能不知道需要传递的参数的个数。在这种情况下,我们可以使用*args和**kwargs的方式来传递所有参数。其中,“”表示将未命名参数以元组的形式传入;“*”表示将命名参数以字典的形式传入。

args及kwargs并不是Python的关键字,只是惯例写法而已。有了“”和“**”这样的不定长参数传递方式,函数就可以处理任何形式和数量的参数了。
# 1. ** 必须放在 * 的后面
def func1(*args, **kwargs):
print(args, **kwargs)
# 2. 参数和动态参数混合时,动态参数只能放在最后。
def func2(a1, a2, a3, *args, **kwargs):
print(a1, a2, a3, args, **kwargs)
# 3. 默认值参数和动态参数同时存在
def func3(a1, a2, a3, a4=10, *args, a5=20, **kwargs):
print(a1, a2, a3, a4, a5, args, kwargs)
func3(11, 22, 33, 44, 55, 66, 77, a5=10, a10=123)
函数返回值
在开发过程中,我们希望函数可以帮助我们实现某个功能,但让函数实现某功能之后有时也需要有一些结果需要反馈给我们,这里就需要使用返回值了。
在了解了返回值的基本使用之后,接下来在学3个关键知识:
- 返回值可以是任意类型,如果函数中没写return,则默认返回None
def func():
return [1,True,(11,22,33)]
result = func()
print(result)
def func():
value = 1 + 1
ret = func()
print(ret) # None
当在函数中未写返回值 或 return 或 return None ,执行函数获取的返回值都是None。
def func():
value = 1 + 1
return # 或 return None
ret = func()
print(ret) # None
- return后面的值如果有逗号,则默认会将返回值转换成元组再返回。
def func():
return 1,2,3
value = func()
print(value) # (1,2,3)
- 函数一旦遇到return就会立即退出函数(终止函数中的所有代码)
def func():
print(1)
return "结束吧"
print(2)
ret = func()
print(ret)