Python--函数的定义与调用

122 阅读4分钟

一、函数的核心概念

函数的本质是 “封装逻辑,按需调用”,核心要素包括:

  • 函数名:唯一标识,遵循变量命名规则(小写 + 下划线);
  • 参数:调用时传入的 “输入数据”;
  • 函数体:实现功能的代码块(需缩进);
  • 返回值:函数执行后输出的结果(可选)。

二、函数的定义

1. 基本语法

python

运行

def 函数名(参数列表):
    """函数文档字符串(可选,说明功能)"""
    函数体(实现逻辑)
    return 返回值(可选)
  • def:定义函数的关键字;
  • 参数列表:多个参数用逗号分隔,可空;
  • 文档字符串:用""" """包裹,可通过函数名.__doc__help(函数名)查看;
  • return:结束函数并返回结果,无return则默认返回None

2. 无参数无返回值

最简单的函数,仅执行固定逻辑:

python

运行

# 定义函数
def print_hello():
    """打印问候语"""
    print("Hello, Python!")

# 调用函数(必须调用才会执行)
print_hello()  # 输出:Hello, Python!

3. 有参数有返回值

带参数接收输入,通过return返回结果:

python

运行

def add(a, b):
    """计算两个数的和并返回"""
    result = a + b
    return result  # 返回计算结果

# 调用函数,接收返回值
sum_result = add(3, 5)
print(sum_result)  # 输出:8

三、函数的调用

调用函数的语法:函数名(传入参数),核心是参数匹配,常见调用方式如下:

1. 位置参数(最常用)

按参数定义的顺序传入值,一一对应:

python

运行

def multiply(x, y):
    return x * y

# 位置参数调用:x=4,y=6
print(multiply(4, 6))  # 输出:24

2. 关键字参数

通过参数名=值传入,顺序可任意,适合参数多的场景:

python

运行

# 关键字参数调用:y=6,x=4(顺序颠倒不影响)
print(multiply(y=6, x=4))  # 输出:24

3. 默认参数

定义函数时给参数指定默认值,调用时可省略该参数:

python

运行

def greet(name, msg="早上好"):
    """带默认参数的问候函数"""
    print(f"{name}{msg}!")

# 省略默认参数(使用msg="早上好")
greet("小明")  # 输出:小明,早上好!
# 覆盖默认参数
greet("小红", "下午好")  # 输出:小红,下午好!

⚠️ 注意:默认参数必须放在非默认参数后面(如def greet(msg="早上好", name)会报错)。

4. 可变长度参数

处理不确定数量的参数,分两种:

  • *args:接收任意数量的位置参数,打包成元组;
  • **kwargs:接收任意数量的关键字参数,打包成字典。

python

运行

# *args示例:计算任意个数的和
def sum_all(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum_all(1, 2, 3))  # 输出:6
print(sum_all(5, 10, 15, 20))  # 输出:50

# **kwargs示例:打印用户信息
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="小李", age=20, city="北京")
# 输出:
# name: 小李
# age: 20
# city: 北京

四、函数的高级用法

1. 函数嵌套

函数内部定义另一个函数,内层函数仅对外层函数可见:

python

运行

def outer():
    print("外层函数执行")
    def inner():
        print("内层函数执行")
    inner()  # 外层函数内调用内层函数

outer()
# 输出:
# 外层函数执行
# 内层函数执行

2. 函数作为参数 / 返回值(高阶函数)

python

运行

# 函数作为参数
def add(a, b):
    return a + b

def calculate(func, x, y):
    return func(x, y)

print(calculate(add, 10, 20))  # 输出:30

# 函数作为返回值
def get_operation(op):
    def add(a, b):
        return a + b
    def sub(a, b):
        return a - b
    if op == "+":
        return add
    else:
        return sub

add_func = get_operation("+")
print(add_func(5, 3))  # 输出:8

3. 匿名函数(lambda)

简化简单函数的定义,语法:lambda 参数: 表达式(无return,表达式结果即返回值):

python

运行

# 等价于 def add(a, b): return a + b
add = lambda a, b: a + b
print(add(4, 5))  # 输出:9

# 结合内置函数使用(如sorted)
nums = [(1, 3), (4, 1), (2, 2)]
# 按元组第二个元素排序
sorted_nums = sorted(nums, key=lambda x: x[1])
print(sorted_nums)  # 输出:[(4, 1), (2, 2), (1, 3)]

五、注意事项

  1. 作用域:函数内部定义的变量为局部变量,外部无法访问;全局变量需用global声明才能在函数内修改;

  2. 参数传递

    • 不可变类型(int/str/tuple):传值(函数内修改不影响外部);
    • 可变类型(list/dict):传引用(函数内修改会影响外部);
  3. 函数名复用:后定义的函数会覆盖先定义的同名函数;

  4. 文档字符串:建议为重要函数添加,提升可读性。

总结

  • 定义:用def关键字,明确参数和返回值;
  • 调用:匹配参数(位置 / 关键字 / 默认 / 可变),按需接收返回值;
  • 进阶:嵌套、高阶函数、lambda 可简化代码,提升灵活性。