程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

第四章:Python函数(python函数菜鸟教程)

hfteth 2025-06-15 16:25:23 技术文章 2 ℃

4.1 函数的定义与调用

4.1.1 理论知识

函数是组织好的、可重复使用的代码块,用于执行特定的任务。它可以提高代码的复用性和可维护性。

在Python中,定义函数使用def关键字,其基本语法如下:

def function_name(parameters):
    """函数文档字符串,用于描述函数的功能、参数和返回值"""
    # 函数体
    statements
    return expression
  • function_name是函数的名称,遵循Python的命名规则。
  • parameters是函数的参数列表,可以为空,多个参数之间用逗号分隔。参数是函数在调用时接收的数据。
  • 函数文档字符串(docstring)是对函数功能、参数和返回值的描述,虽然不是必需的,但强烈建议添加,以便他人理解和使用该函数。
  • statements是函数体,包含实现函数功能的具体代码。
  • return语句用于返回函数的执行结果。return语句是可选的,如果没有return语句,函数将返回None。

调用函数时,使用函数名后跟括号,如果函数有参数,在括号内传入相应的参数值。

4.1.2 示例代码

def add_numbers(a, b):
    """
    这个函数用于将两个数字相加并返回结果。

    参数:
    a (int或float): 要相加的第一个数字。
    b (int或float): 要相加的第二个数字。

    返回:
    int或float: a和b相加的结果。
    """
    result = a + b
    return result


sum_result = add_numbers(3, 5)
print(f"两数之和为: {sum_result}")

4.1.3 代码解释

  • 首先使用def定义了一个名为add_numbers的函数,它接受两个参数a和b。
  • 在函数体中,将a和b相加的结果赋值给result,然后使用return返回result。
  • 调用add_numbers(3, 5),将3和5作为参数传递给函数,函数执行后返回8,并将返回值赋给sum_result。
  • 最后通过print函数输出两数之和。

4.2 函数参数

4.2.1 位置参数

理论知识:位置参数是根据参数的位置来传递值的参数。在调用函数时,传递的参数值按照顺序依次对应函数定义中的参数。

示例代码

def describe_person(name, age):
    print(f"{name} 今年 {age} 岁。")


describe_person("Alice", 25)

代码解释

  • describe_person函数接受两个位置参数name和age。
  • 调用describe_person("Alice", 25)时,"Alice"按照位置对应name参数,25对应age参数,所以输出Alice 今年 25 岁。。

4.2.2 关键字参数

理论知识:关键字参数是在调用函数时,通过参数名来指定参数值的方式。这样可以不按照参数定义的顺序传递参数。

示例代码

def describe_person(name, age):
    print(f"{name} 今年 {age} 岁。")


describe_person(age=30, name="Bob")

代码解释

  • 同样是describe_person函数,这里调用时使用关键字参数,明确指定age的值为30,name的值为"Bob",所以输出Bob 今年 30 岁。,即使参数顺序与函数定义不同也能正确传递。

4.2.3 默认参数

理论知识:默认参数是在函数定义时为参数提供一个默认值。在调用函数时,如果没有传递该参数的值,则使用默认值。

示例代码

def describe_person(name, age=18):
    print(f"{name} 今年 {age} 岁。")


describe_person("Charlie")
describe_person("David", 22)

代码解释

  • describe_person函数中age参数有默认值18。
  • 调用describe_person("Charlie")时,没有传递age参数的值,所以使用默认值18,输出Charlie 今年 18 岁。。
  • 调用describe_person("David", 22)时,传递了age的值为22,则使用传递的值,输出David 今年 22 岁。。

4.2.4 可变参数

理论知识

  • *args:用于收集多个位置参数,将它们作为一个元组传递给函数。
  • **kwargs:用于收集多个关键字参数,将它们作为一个字典传递给函数。

示例代码

def print_info(*args, **kwargs):
    print("位置参数:", args)
    print("关键字参数:", kwargs)


print_info(1, 2, 3, name="Eve", city="New York")

代码解释

  • print_info函数使用*args和**kwargs来收集参数。
  • 调用print_info(1, 2, 3, name="Eve", city="New York")时,1、2、3被收集到args元组中,name="Eve"和city="New York"被收集到kwargs字典中。
  • 函数分别输出位置参数元组和关键字参数字典。

4.3 函数返回值

4.3.1 单返回值

理论知识:函数可以通过return语句返回一个值,这个值可以是任何数据类型。

示例代码

def square_number(num):
    return num ** 2


result = square_number(5)
print(f"5 的平方是: {result}")

代码解释

  • square_number函数接受一个参数num,计算其平方并通过return返回结果。
  • 调用square_number(5),返回值25赋给result,然后输出5 的平方是: 25。

4.3.2 多返回值

理论知识:函数也可以返回多个值,实际上是返回一个包含多个值的元组。

示例代码

def divide_numbers(a, b):
    quotient = a // b
    remainder = a % b
    return quotient, remainder


div_result, mod_result = divide_numbers(10, 3)
print(f"10 除以 3 的商是: {div_result},余数是: {mod_result}")

代码解释

  • divide_numbers函数接受两个参数a和b,计算商和余数,并通过return返回这两个值。
  • 调用divide_numbers(10, 3),返回的商和余数分别赋给div_result和mod_result,然后输出商和余数。

4.4 函数的嵌套

4.4.1 理论知识

函数的嵌套是指在一个函数内部定义另一个函数。内部函数只能在外部函数内部被调用,这种方式可以实现更复杂的逻辑封装和代码组织。

4.4.2 示例代码

def outer_function(x):
    def inner_function(y):
        return x + y
    return inner_function


closure = outer_function(5)
result = closure(3)
print(f"结果是: {result}")

4.4.3 代码解释

  • outer_function函数接受一个参数x,并在其内部定义了inner_function函数。inner_function函数接受参数y,并返回x + y。
  • outer_function函数返回inner_function,此时inner_function形成了一个闭包,它记住了外部函数outer_function的x值。
  • 调用outer_function(5),返回的inner_function对象赋给closure。
  • 调用closure(3),实际上是调用inner_function(3),由于闭包特性,它可以使用outer_function中x的值5,所以返回5 + 3 = 8,并输出结果。

4.5 递归函数

4.5.1 理论知识

递归函数是指在函数的定义中使用自身来解决问题的函数。递归函数必须有一个终止条件,否则会导致无限递归,最终耗尽系统资源。

4.5.2 示例代码

def factorial(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * factorial(n - 1)


fact_result = factorial(5)
print(f"5 的阶乘是: {fact_result}")

4.5.3 代码解释

  • factorial函数用于计算阶乘。
  • 当n为0或1时,这是终止条件,直接返回1。
  • 否则,通过n * factorial(n - 1)进行递归调用,例如计算5!时,会依次计算5 * 4 * 3 * 2 * 1。最终返回5的阶乘结果120并输出。
最近发表
标签列表