200字
未Python 代码复用神器!10 分钟学会函数 `def`,一次编写多次调用
2025-12-08
2025-12-08

image-tUNy.png

Python 代码复用神器!10 分钟学会函数 def,一次编写多次调用

导语:告别重复,拥抱高效编程!

各位编程初学者,你是否在学习 Python 的过程中,遇到过这样的场景:你需要多次执行一段几乎完全相同的代码,只是其中几个值有所不同?比如,你可能写了三次计算矩形面积的代码,每次都手动修改长和宽的值。这不仅效率低下,还容易出错,更重要的是,它违反了编程界的一条黄金法则——“不要重复你自己”(Don't Repeat Yourself, DRY)

别担心!Python 提供了一个极其强大且易于使用的工具来解决这个问题,那就是函数(Function)。函数是组织代码、实现代码复用、提高程序可读性和可维护性的基石。掌握函数,就像拥有了一把可以批量生产的“魔法锤”,你只需定义一次操作流程,就能在需要时随时调用,大大提升你的编程效率和代码质量。

今天,我们将用最通俗易懂的方式,带你从零开始,在 10 分钟内学会如何使用 def 关键字定义和调用 Python 函数,从此告别重复劳动,迈向更专业的编程之路!

1. 入门准备:你需要知道什么?

在深入学习函数之前,你需要确保:

  • Python 环境已安装: 你的电脑上已经安装了 Python 解释器(建议 Python 3.6+)。
  • 基本语法了解: 你对 Python 的变量、数据类型(如整数、字符串)、print() 函数和基本的赋值操作有初步了解。
  • 一颗学习的心: 准备好动手实践,边学边练!

2. 什么是函数?一个生活中的比喻

想象一下你家里的洗衣机

  • 输入 (Input): 你把脏衣服放进去,选择洗涤模式(参数)。
  • 过程 (Process): 洗衣机按照预设的程序(函数体)进行洗涤、漂洗、脱水等操作。
  • 输出 (Output): 你得到一堆干净的衣服。

洗衣机就是一台“函数”:你给它输入(脏衣服和模式),它执行一系列操作,最后给你一个输出(干净衣服)。你不需要每次都手动搓洗、漂洗、拧干,只需按一个按钮,就能重复利用这套“洗涤”流程。

在编程中,函数也是如此:它接收输入(参数),执行一系列预定义的操作(函数体),然后可能返回一个结果(返回值)

3. 函数的定义与调用:手把手教学

3.1 定义函数:def 关键字登场!

在 Python 中,我们使用 def 关键字来定义一个函数。

基本语法结构:

def 函数名(参数1, 参数2, ...):
    # 函数体(这里写要执行的代码)
    # ...
    # 可选:return 返回值

让我们拆解一下:

  • def: 定义函数的关键字,必不可少。
  • 函数名: 你给函数起的名字,需要遵循 Python 的命名规则(小写字母和下划线,如 my_function)。函数名应该清晰地表明函数的功能。
  • (参数1, 参数2, ...): 函数的参数列表。这是函数接收外部数据的地方。参数是可选的,函数可以没有参数,但括号 () 必须保留。
  • :: 冒号,表示函数定义的开始。
  • 函数体: 缩进的代码块,包含了函数要执行的所有指令。Python 对缩进非常严格! 函数体内的所有语句必须保持相同的缩进级别(通常是 4 个空格)。
  • return 返回值: 可选的 return 语句。如果函数需要将某个结果传递回调用它的地方,就使用 return。如果没有 return 语句,函数默认返回 None

第一个例子:一个简单的“打招呼”函数

我们来定义一个不带参数和返回值的函数,它只打印一句问候语。

def greet():
    """
    这是一个简单的打招呼函数,它会打印一句问候语。
    """
    print("你好,欢迎来到 Python 世界!")

# 注意:此时函数只是被定义了,还没有执行。

代码解释:

  • def greet(): 定义了一个名为 greet 的函数,它没有参数。
  • """ ... """: 这是函数的文档字符串(Docstring),用于解释函数的功能。这是一个非常好的编程习惯,方便自己和他人理解代码。
  • print("你好,欢迎来到 Python 世界!"): 这是函数体,当函数被调用时,这行代码会被执行。

3.2 调用函数:让函数动起来!

定义了函数之后,要让它执行,我们需要**调用(Call)**它。

语法:

函数名(参数1的值, 参数2的值, ...)

继续上面的例子:

def greet():
    """
    这是一个简单的打招呼函数,它会打印一句问候语。
    """
    print("你好,欢迎来到 Python 世界!")

# 调用 greet 函数
greet()
greet() # 可以多次调用

# 预期输出:
# 你好,欢迎来到 Python 世界!
# 你好,欢迎来到 Python 世界!

3.3 带参数的函数:让函数更灵活

函数最强大的地方在于它能够接收参数,这样我们就可以根据不同的输入执行相同的逻辑。

例子:向指定的人打招呼

def greet_person(name):
    """
    向指定的人打招呼。
    参数:
        name (str): 要打招呼的人的名字。
    """
    print(f"你好,{name}!很高兴认识你。")

# 调用 greet_person 函数,并传入不同的名字
greet_person("小明")
greet_person("李华")
greet_person("张三丰")

# 预期输出:
# 你好,小明!很高兴认识你。
# 你好,李华!很高兴认识你。
# 你好,张三丰!很高兴认识你。

代码解释:

  • def greet_person(name):: 定义了一个名为 greet_person 的函数,它有一个参数 name
  • 当调用 greet_person("小明") 时,字符串 "小明" 会被赋值给函数内部的 name 变量。
  • print(f"你好,{name}!很高兴认识你。"): 使用了 f-string (格式化字符串字面量) 来方便地将 name 的值嵌入到字符串中。

3.4 带有返回值的函数:让函数传递结果

有些函数不仅要执行操作,还需要把计算结果返回给调用者。这时,我们使用 return 语句。

例子:计算两个数的和

def add_numbers(a, b):
    """
    计算两个数的和并返回结果。
    参数:
        a (int/float): 第一个数。
        b (int/float): 第二个数。
    返回:
        int/float: 两个数的和。
    """
    sum_result = a + b
    return sum_result # 将计算结果返回

# 调用 add_numbers 函数,并接收返回值
result1 = add_numbers(5, 3)
print(f"5 + 3 = {result1}")

result2 = add_numbers(100, 200)
print(f"100 + 200 = {result2}")

# 也可以直接在 print 中调用
print(f"7 + 8 = {add_numbers(7, 8)}")

# 预期输出:
# 5 + 3 = 8
# 100 + 200 = 300
# 7 + 8 = 15

代码解释:

  • def add_numbers(a, b):: 定义了一个接收两个参数 ab 的函数。
  • sum_result = a + b: 在函数内部计算 ab 的和。
  • return sum_result: 将 sum_result 的值作为函数的执行结果返回。
  • result1 = add_numbers(5, 3): 调用函数并将返回值存储在 result1 变量中。

print()return 的区别:

  • print() 是将信息显示到控制台,它没有将数据传回给调用者。
  • return 是将函数内部处理后的数据传回给调用者,调用者可以继续使用这个数据。

一个函数可以有多个 return 语句,但一旦执行了 return,函数就会立即结束,其后的代码将不再执行。

3.5 综合实例:计算矩形面积

现在,让我们用一个更实际的例子来巩固所学:编写一个函数来计算矩形的面积。

def calculate_rectangle_area(length, width):
    """
    计算矩形的面积。
    参数:
        length (float/int): 矩形的长度。
        width (float/int): 矩形的宽度。
    返回:
        float/int: 矩形的面积。
    """
    if length <= 0 or width <= 0:
        print("错误:长度和宽度必须是正数。")
        return None # 返回 None 表示计算失败
    
    area = length * width
    return area

# 调用函数并打印结果
area1 = calculate_rectangle_area(10, 5)
if area1 is not None: # 检查是否成功计算
    print(f"长为 10,宽为 5 的矩形面积是:{area1}")

area2 = calculate_rectangle_area(7.5, 4)
if area2 is not None:
    print(f"长为 7.5,宽为 4 的矩形面积是:{area2}")

area3 = calculate_rectangle_area(-5, 3) # 尝试传入无效参数
if area3 is not None:
    print(f"长为 -5,宽为 3 的矩形面积是:{area3}") # 这行不会执行

# 预期输出:
# 长为 10,宽为 5 的矩形面积是:50
# 长为 7.5,宽为 4 的矩形面积是:30.0
# 错误:长度和宽度必须是正数。

这个例子展示了:

  • 如何定义带多个参数的函数。
  • 如何使用 if 语句在函数内部进行条件判断。
  • 如何根据条件返回不同的值(包括 None 表示错误情况)。
  • 如何在调用函数后处理其返回值。

4. 常见陷阱与注意事项

在初学函数时,有些常见的错误需要注意:

  • 缩进错误(IndentationError): Python 依靠缩进来判断代码块的归属。函数体内的所有语句必须保持相同的缩进级别。

    # 错误示例
    def my_bad_function():
    print("这行会报错,因为缩进不对") 
        print("这行也报错")
    

    正确做法:

    def my_good_function():
        print("这行是正确的缩进")
        print("这行也是正确的缩进")
    
  • 忘记调用函数: 定义了函数,但没有调用它,函数体内的代码就不会执行。

    def say_hello():
        print("Hello!")
    
    # 定义了,但没有调用,所以不会有输出
    
  • 参数数量不匹配: 调用函数时,传入的参数数量必须与函数定义时的参数数量一致。

    def greet(name):
        print(f"Hello, {name}!")
    
    # greet() # 错误:缺少一个参数
    # greet("Alice", "Bob") # 错误:多了一个参数
    
  • 理解 returnprint 的区别: 再次强调,print 是显示,return 是返回数据。

    def multiply_and_print(a, b):
        result = a * b
        print(f"乘积是: {result}") # 只是打印
    
    def multiply_and_return(a, b):
        result = a * b
        return result # 返回结果
    
    val1 = multiply_and_print(2, 3) # 打印 "乘积是: 6",但 val1 的值是 None
    val2 = multiply_and_return(2, 3) # val2 的值是 6
    
    print(f"val1 的值是: {val1}") # 输出:val1 的值是: None
    print(f"val2 的值是: {val2}") # 输出:val2 的值是: 6
    

5. 总结与展望

恭喜你!现在你已经掌握了 Python 函数的核心概念:

  • def 关键字用于定义函数。
  • 函数可以有参数来接收输入。
  • 函数体内的代码通过缩进来标识。
  • 函数可以使用 return 语句来返回结果
  • 通过 函数名()调用函数。

函数是 Python 编程中最重要的概念之一,它让你的代码:

  • 更易读: 将复杂任务分解成小块。
  • 更易维护: 修改一个功能只需修改对应的函数。
  • 更高效: 避免重复编写相同的代码。
  • 更模块化: 方便代码的组织和团队协作。

下一步你可以学习:

  • 默认参数: 给参数设置默认值。
  • 可变参数 (*args, **kwargs): 接收不定数量的参数。
  • 局部变量与全局变量: 理解变量的作用域。
  • Lambda 表达式: 编写匿名函数。

持续练习是掌握编程的关键。尝试编写更多自己的函数,解决一些小问题,你会发现函数的强大之处!

祝你编程愉快!

未Python 代码复用神器!10 分钟学会函数 `def`,一次编写多次调用
作者
一晌小贪欢
发表于
2025-12-08
License
CC BY-NC-SA 4.0

评论