当前位置:首页>python>【一起学Python】第20天:函数的基础使用

【一起学Python】第20天:函数的基础使用

  • 2026-10-07 12:05:17
【一起学Python】第20天:函数的基础使用
函数(Function)是 Python 编程的核心基石。它将一段可重复使用的代码封装起来,让程序结构更清晰、维护更方便。掌握函数是从小白迈向进阶的关键一步。

一、什么是函数?

函数是一段组织好的、可重复使用的、用来实现单一或相关联功能的代码段。

为什么使用函数?

  • 代码复用:写一次,多次调用。
  • 模块化:将大问题分解为小问题。
  • 易于维护:修改逻辑只需改一处。
  • 隐藏细节:调用者无需关心内部实现。

二、函数的定义与调用

1. 基本语法

使用 def 关键字定义函数。

def 函数名 (参数):    """文档字符串(可选)"""    # 函数体    return 返回值  # 可选

2. 示例

def greet(name):    """向用户打招呼"""    print(f"Hello, {name}!")# 调用函数greet("Alice")  # 输出:Hello, Alice!

三、函数的参数详解

Python 的函数参数非常灵活,支持多种传递方式。

1. 位置参数 (Positional Arguments)

按顺序传递参数。

def add(a, b):    return a + bprint(add(1, 2))  # 3

2. 关键字参数 (Keyword Arguments)

通过参数名传递,顺序可以打乱。

def introduce(name, age):    print(f"{name} is {age} years old.")introduce(age=25, name="Bob")  # Bob is 25 years old.

3. 默认参数 (Default Arguments)

调用时如果不传参,则使用默认值。

def power(x, n=2):    return x ** nprint(power(3))    # 9 (n 默认为 2)print(power(3, 3)) # 27
⚠️ 避坑指南:默认参数必须是不可变对象(如数字、字符串、元组)。不要使用列表或字典作为默认参数!
# ❌ 错误写法def append_list(val, list_param=[]):    list_param.append(val)    return list_param# ✅ 正确写法def append_list(val, list_param=None):    if list_param is None:        list_param = []    list_param.append(val)    return list_param

4. 可变参数 (*args 和 **kwargs)

  • *args:接收任意数量的位置参数,打包成元组。
  • **kwargs:接收任意数量的关键字参数,打包成字典。
def demo(*args, **kwargs):    print("位置参数:", args)    print("关键字参数:", kwargs)demo(1, 2, 3, name="Alice", age=20)# 输出:# 位置参数:(1, 2, 3)# 关键字参数:{'name': 'Alice', 'age': 20}

5. 参数传递顺序

定义函数时,参数顺序必须遵循: **位置参数 -> 默认参数 -> *args -> 关键字参数 -> kwargs

def complex_func(a, b=10, *args, c, **kwargs):    pass

四、函数的返回值

  • 使用 return 语句返回值。
  • 如果没有 return 或 return 后无值,默认返回 None。
  • 可以返回多个值(实际上是返回一个元组)。
def get_info():    return "Alice", 25, "Engineer"name, age, job = get_info()  # 元组解包print(name, age, job)

五、变量的作用域 (Scope)

Python 遵循 LEGB 规则查找变量:

  1. Local (局部作用域)
  2. Enclosing (嵌套作用域)
  3. Global (全局作用域)
  4. Built-in (内置作用域)

1. 局部与全局

x = 100  # 全局变量def func():    x = 5  # 局部变量    print(x)func()   # 5print(x) # 100

2. global 关键字

在函数内修改全局变量需声明 global。

count = 0def increment():    global count    count += 1increment()print(count)  # 1

3. nonlocal 关键字

在嵌套函数中修改外层函数的变量。

def outer():    num = 10    def inner():        nonlocal num        num = 20    inner()    print(num)  # 20outer()

六、高级函数特性

1. 匿名函数 (lambda)

适用于简单的单行函数逻辑。

# 普通函数def square(x):    return x * x# lambda 函数square_lambda = lambda x: x * xprint(square_lambda(5))  # 25# 常用于排序data = [(1, 'a'), (3, 'c'), (2, 'b')]data.sort(key=lambda x: x[0])

2. 类型注解 (Type Hinting)

Python 3.5+ 支持,帮助 IDE 提示和代码阅读,不强制检查。

def add(a: int, b: int) -> int:    return a + b

3. 文档字符串 (Docstring)

使用三引号编写函数说明,可通过 help() 查看。

def multiply(x, y):    """返回两个数的乘积"""    return x * yhelp(multiply)

七、常见面试/实战考点

参数解包示例

def show(a, b, c):    print(a, b, c)args = [1, 2, 3]show(*args)  # 相当于 show(1, 2, 3)kwargs = {'a': 1, 'b': 2, 'c': 3}show(**kwargs)

八、实战练习

练习 1:编写一个计算器函数

支持加减乘除,除数为 0 时返回错误提示。

def calculate(a, b, op='+'):    if op == '+':        return a + b    elif op == '-':        return a - b    elif op == '*':        return a * b    elif op == '/':        if b == 0:            return "Error: Division by zero"        return a / b    else:        return "Error: Unknown operator"print(calculate(10, 5, '/'))  # 2.0

练习 2:统计函数执行时间(装饰器雏形)

import timedef run_time(func):    def wrapper(*args, **kwargs):        start = time.time()        result = func(*args, **kwargs)        end = time.time()        print(f"{func.__name__} 运行时间:{end - start:.4f}s")        return result    return wrapper@run_timedef slow_task():    time.sleep(1)slow_task()

九、总结

最新文章

随机文章