从 0 到 1 掌握 Python 函数:一篇搞定定义、调用与参数精髓
目录
前言
函数是 Python 编程的核心概念,它将代码块封装为可复用的单元,是实现模块化、结构化编程的基础。本文系统梳理函数的核心知识点,从目的到类型逐一解析
1. 函数目的
函数的本质是代码复用与逻辑封装,主要目的包括:
- 减少重复代码:将多次使用的逻辑封装为函数,避免冗余。
- 提高可读性:用函数名描述功能,使代码结构清晰
- 简化维护:修改函数内部逻辑即可影响所有调用处,无需逐处修改。
- 实现模块化:将复杂程序拆分为多个函数,分而治之
更简单的理解就是,函数的复用和维护
2. 函数定义
在 Python 中,函数通过 def 关键字定义,基本语法如下:
def 函数名(参数列表):
"""函数文档字符串(可选,用于说明功能)"""
函数体(实现功能的代码)
[return 返回值] # 可选,无 return 则默认返回 None
示例:一个a + b的函数实现:
def sum_ab(a,b):
"""计算两数的和"""
s = a+b
return s # 返回计算的结果
print(sum_ab(10, 20))
# 结果 30
- 函数名:遵循变量命名规则(字母、数字、下划线,首字符非数字),建议使用动词或动词短语(如
get_user()、save_data())。 - 函数体:必须缩进(通常 4 个空格,一个tab键),是实现具体功能的代码块。
- 文档字符串:用三引号包裹,可通过
函数名.__doc__或help(函数名)查看,增强代码可读性。
3. 函数声明
在 Python 中,函数定义即声明,两者是同一过程。当执行 def 函数名(...) 时,Python 会在内存中创建函数对象,并将其与函数名绑定。
- 声明后,函数不会自动执行,需通过调用触发执行。
- 函数必须先声明后调用,否则会报
NameError:
# 错误示例:调用在声明之前
print(add(1, 2)) # NameError: name 'add' is not defined
def add(a, b):
return a + b
4. 函数调用
函数调用是指执行函数体内代码的过程,语法为:
函数名(实参列表) # 实参需与函数定义的形参匹配
示例:调用上述 sum_ab 函数:
#sum_result = sum_ab(3, 5) # 调用 sum_ab 函数,传入实参 3 和 5
print(sum_result) # 输出:8(函数返回值)
- 调用时,实参的数量和类型需与函数定义的形参匹配(除非有默认参数)。
- 函数调用可作为表达式的一部分(如赋值、打印、作为其他函数的参数):
print(sum_ab(2, 3)) # 直接打印返回值,输出:5
5. 函数形参
形参(形式参数) 是函数定义时括号中的参数,提升函数灵活性,扩展函数功能,标识需要传递给函数的值,没有实际值,只是占位符
def greet(name): # name 是形参
print(f"Hello, {name}!")
- 形参仅在函数内部有效,函数执行结束后失效。
- 形参可以有多个,用逗号分隔:
def introduce(name, age): # name 和 age 都是形参
print(f"I'm {name}, {age} years old.")
6. 函数实参
实参(实际参数) 是函数调用时传入的具体数据,用于给形参赋值
示例:
greet("xiaoming") # "xiaoming" 是实参,传递给形参 name
introduce("xiaohei", 25) # "xiaohei" 和 25 是实参,分别传递给 name 和 age
- 实参可以是常量、变量、表达式等:
x = 10
y = 20
add(x, y) # 变量作为实参
add(x + y, 30) # 表达式作为实参(先计算 x+y 的值,再传入)
7. 函数返回值
函数的返回值是函数执行结束后向调用者传递的结果,通过 return 语句实现:
- 若有
return 表达式,则返回表达式的值。 - 若没有
return或return后无表达式,则默认返回None。 return会立即终止函数执行,其后的代码不会运行
def multiply(a, b):
return a * b # 返回乘积
def print_hello():
print("Hello")
# 无 return,默认返回 None
result1 = multiply(4, 5)
result2 = print_hello()
print(result1) # 输出:20
print(result2) # 输出:None
- 函数可返回任意类型的数据(数字、字符串、列表、字典,甚至另一个函数)。
- 可通过
return返回多个值(本质是返回一个元组):
def get_user():
return "Alice", 30, "female" # 等价于 return ("Alice", 30, "female")
name, age, sex = get_user() # 解包返回值
print(name) # 输出:Alice
8. 函数的参数类型
Python 函数支持多种参数类型,灵活适应不同调用场景:
(1)位置参数(必选参数)
必须按顺序传入的参数,数量和位置需与形参完全匹配:
def student_info(name, age):
print(f"Name: {name}, Age: {age}")
student_info("Alice", 20) # 正确:按位置传入 name="Alice",age=20
student_info(20, "Alice") # 错误:位置颠倒,逻辑混乱
(2)关键字参数
调用时通过 形参名=值 的形式传入,可忽略位置顺序:
student_info(age=20, name="Alice") # 正确:通过关键字指定,顺序无关
- 关键字参数必须放在位置参数之后,否则报错:
student_info(name="Alice", 20) # SyntaxError: positional argument follows keyword argument
(3)默认参数
函数定义时给形参指定默认值,调用时可省略该参数(使用默认值)
def student_info(name, age=18): # age 是默认参数,默认值 18
print(f"Name: {name}, Age: {age}")
student_info("Bob") # 省略 age,使用默认值 18 → Name: Bob, Age: 18
student_info("Bob", 20) # 覆盖默认值 → Name: Bob, Age: 20
- 默认参数必须放在位置参数之后(“必选参数在前,默认参数在后”)。
- 默认参数的默认值只在函数定义时计算一次,避免使用可变对象(如列表)作为默认值:
# 错误示例:默认值为可变对象,可能导致意外结果
def add_item(item, lst=[]):
lst.append(item)
return lst
print(add_item(1)) # [1]
print(add_item(2)) # [1, 2](预期是 [2],因默认列表被复用)
(4)可变位置参数(*args)
接收任意数量的位置参数,在函数内部以元组形式存储:
def sum_numbers(*args): # args 是元组,可接收 0 个或多个参数
return sum(args)
print(sum_numbers(1, 2, 3)) # 6(args = (1,2,3))
print(sum_numbers(10, 20)) # 30(args = (10,20))
(5)可变关键字参数(**kwargs)
接收任意数量的关键字参数,在函数内部以字典形式存储:
def print_info(** kwargs): # kwargs 是字典,key 是参数名,value 是值
for k, v in kwargs.items():
print(f"{k}: {v}")
print_info(name="Alice", age=20, sex="female")
# 输出:
# name: Alice
# age: 20
# sex: female
(6)参数组合顺序
多种参数共存时,必须按以下顺序定义:
** 位置参数 → 默认参数 → 可变位置参数(*args) → 可变关键字参数(kwargs)
def func(a, b=10, *args, **kwargs):
print(f"a={a}, b={b}, args={args}, kwargs={kwargs}")
func(1, 2, 3, 4, x=5, y=6)
# 输出:a=1, b=2, args=(3,4), kwargs={'x':5, 'y':6}
9. 匿名函数(lambda 函数)
匿名函数是用 lambda 关键字定义的极简函数,无函数名,适合实现简单逻辑:
语法
lambda 形参列表: 表达式 # 表达式结果即返回值
示例
# 定义一个计算平方的匿名函数
square = lambda x: x** 2
print(square(5)) # 输出:25
# 作为参数传递(如排序)
students = [("Alice", 20), ("Bob", 18)]
students_sorted = sorted(students, key=lambda x: x[1]) # 按年龄排序
print(students_sorted) # [('Bob', 18), ('Alice', 20)]
特点
- 匿名性:无函数名,仅临时使用。
- 单行性:仅含一个表达式,无法包含复杂逻辑(如循环、多条件判断)。
- 返回值:自动返回表达式结果,无需
return。 - 适用场景:简单逻辑、作为高阶函数参数(如
sorted()、map())。
总结
函数是 Python 代码组织的核心,通过封装逻辑实现复用和模块化。本文涵盖函数的核心概念:
- 从目的(复用与封装)到定义(
def关键字)、调用(函数名 + 实参); - 区分形参(定义时的占位符)与实参(调用时的具体值);
- 理解返回值(
return语句)和多种参数类型(位置参数、默认参数、可变参数等); - 掌握匿名函数(
lambda)的简洁用法。
熟练运用这些概念,能写出更简洁、高效、可维护的 Python 代码。函数的灵活使用是从 “入门” 到 “进阶” 的关键一步。
更多推荐



所有评论(0)