Python入门:8.Python中的函数

【Python入门系列】第8讲:Python中的函数全面详解(2026最新版)

函数是Python中最重要的代码组织方式。
学会函数,你就从“写一堆散乱代码”升级到“写可复用、可维护的专业代码”。

这一讲我们把函数的所有核心知识一次性讲透,包括参数、返回值、作用域,以及我们之前单独讲过的闭包基础。

1. 什么是函数?为什么需要函数?

函数就是一个可重复使用的代码块,它接收输入(参数),执行特定任务,返回输出(返回值)。

好处

  • 避免重复代码(DRY原则)
  • 让代码结构清晰、易读
  • 便于测试和维护
  • 支持团队协作

定义语法

def 函数名(参数列表):
    """文档字符串(可选,但强烈推荐)"""
    # 函数体
    return 返回值   # 可选,没有return默认返回None

2. 函数定义与调用基础

def greet(name):
    """向用户问好"""
    print(f"你好,{name}!欢迎学习Python!")

# 调用函数
greet("重阳")
greet("小明")

带返回值的函数

def add(a, b):
    """返回两个数的和"""
    return a + b

result = add(10, 20)
print(result)        # 30

3. 函数参数的四种传递方式(超级重要!)

(1)位置参数(最常见)

def power(base, exponent):
    return base ** exponent

print(power(2, 3))   # 8

(2)默认参数(给参数设置默认值)

def greet(name, greeting="你好"):
    print(f"{greeting},{name}!")

greet("重阳")                    # 你好,重阳!
greet("小红", "早上好")          # 早上好,小红!

默认参数规则

  • 默认参数必须放在非默认参数之后
  • 默认参数只在函数定义时计算一次(避免使用可变对象作为默认值!)

(3)关键字参数(显式指定参数名)

def student_info(name, age, city):
    print(f"姓名:{name},年龄:{age},城市:{city}")

student_info(age=25, city="Brussels", name="重阳")   # 顺序可以打乱

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

# *args:接收任意数量的位置参数 → 元组
def add_all(*args):
    return sum(args)

print(add_all(1, 2, 3, 4, 5))   # 15

# **kwargs:接收任意数量的关键字参数 → 字典
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="重阳", age=25, city="Brussels")

组合顺序必须是
def func(普通参数, 默认参数, *args, **kwargs)

4. return 语句

  • 一个函数可以有多个 return,但执行到第一个就会立即结束
  • 没有 return 或只写 return 时,返回 None
def divide(a, b):
    if b == 0:
        return None          # 提前返回
    return a / b

5. 变量作用域(Scope)

x = 100          # 全局变量

def func():
    y = 200      # 局部变量
    global x     # 声明使用全局变量
    x = 300
    print(x, y)

func()
print(x)         # 300
# print(y)       # 报错,y是局部变量

LEGB规则(查找顺序):
Local(局部) → Enclosing(闭包外层) → Global(全局) → Builtin(内置)

6. 嵌套函数 + 闭包(我们之前讲过的内容复习)

def make_counter():
    count = 0

    def counter():
        nonlocal count      # 修改外层变量必须声明
        count += 1
        return count

    return counter

c1 = make_counter()
print(c1())  # 1
print(c1())  # 2

7. 文档字符串(docstring)最佳实践

def calculate_bmi(weight, height):
    """
    计算BMI指数

    参数:
        weight: 体重(公斤)
        height: 身高(米)

    返回:
        BMI数值(保留2位小数)
    """
    bmi = weight / (height ** 2)
    return round(bmi, 2)

help(calculate_bmi)   # 可以查看文档

8. 综合实战 —— 改进版猜数字游戏(使用函数)

import random

def play_guess_game():
    """一个完整的猜数字游戏"""
    answer = random.randint(1, 100)
    attempts = 0
    max_attempts = 10

    print("=== 猜数字游戏 ===")
    print(f"我在1-100之间想了一个数字,你有{max_attempts}次机会!")

    while attempts < max_attempts:
        try:
            guess = int(input(f"第{attempts+1}次猜测:"))
            attempts += 1

            if guess < answer:
                print("太小了!")
            elif guess > answer:
                print("太大了!")
            else:
                print(f"恭喜你猜对了!一共用了{attempts}次")
                return
        except ValueError:
            print("请输入数字!")

    print(f"很遗憾,正确答案是{answer}")

# 调用游戏
play_guess_game()

9. 本讲总结口诀

函数四要素
def 定义 + 参数接收 + 函数体执行 + return 返回

参数记忆
位置 → 默认 → *args → **kwargs

作用域记忆
LEGB:Local → Enclosing → Global → Builtin


下一讲预告
Python入门第9讲:面向对象编程(OOP)基础 —— 类与对象

立即练习(强烈推荐)

  1. 写一个函数 is_prime(n),判断一个数是否为质数。
  2. 写一个函数 calc_statistics(numbers),接收一个数字列表,返回最大值、最小值、平均值、总和(用字典返回)。
  3. 改进之前的BMI计算程序,用函数封装,并支持输入多个人。
  4. *args**kwargs 写一个万能打印函数,能打印任意数量的参数和关键字信息。

把你的练习代码贴出来,我会帮你仔细检查、优化,并指出可以改进的地方!

准备好了吗?
回复 “下一讲” 我们马上进入面向对象编程世界!
或者对函数的任何部分(参数、作用域、闭包等)有疑问,现在就问我!

函数学完后,你的代码组织能力已经大幅提升,继续加油!你离能独立写小项目越来越近了!🐍✨

文章已创建 5268

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部