目录

前言

1. 函数目的

2. 函数定义

3. 函数声明

4. 函数调用

5. 函数形参

6. 函数实参

7. 函数返回值

8. 函数的参数类型

(1)位置参数(必选参数)

(2)关键字参数

(3)默认参数

(4)可变位置参数(*args)

(5)可变关键字参数(**kwargs)

(6)参数组合顺序

9. 匿名函数(lambda 函数)

语法

示例

特点

总结


前言

函数是 Python 编程的核心概念,它将代码块封装为可复用的单元,是实现模块化、结构化编程的基础。本文系统梳理函数的核心知识点,从目的到类型逐一解析

1. 函数目的

函数的本质是代码复用与逻辑封装,主要目的包括:

  1. 减少重复代码:将多次使用的逻辑封装为函数,避免冗余。
  2. 提高可读性:用函数名描述功能,使代码结构清晰
  3. 简化维护:修改函数内部逻辑即可影响所有调用处,无需逐处修改。
  4. 实现模块化:将复杂程序拆分为多个函数,分而治之

更简单的理解就是,函数的复用维护 

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 代码。函数的灵活使用是从 “入门” 到 “进阶” 的关键一步。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐