函数是程序中的一个重要构建块,它封装了一段可重用的代码。通过定义函数,可以提高代码的可读性和可维护性。Python中的函数使用 def 关键字定义,并允许通过参数来传递外部信息,返回值则允许函数将计算结果返回给调用者。

6.1 定义函数:def 关键字

在Python中,函数使用 def 关键字定义,接着是函数名称、参数列表和代码块。函数体通过缩进来表示。

6.1.1 基本函数定义

函数的定义格式如下:

def function_name(parameters):
    # 执行的代码块
    return result  # 可选的返回值

示例

# 定义一个简单的函数
def greet(name):
    print(f"Hello, {name}!")
    
# 调用函数
greet("Alice")
greet("Bob")

 

6.2 参数与返回值

Python函数可以接收参数(输入)并返回值(输出)。返回值是可选的,但如果函数需要返回某些结果,可以使用 return 语句。

6.2.1 参数

函数的参数是通过函数调用时传入的值,可以是位置参数、默认参数、可变参数或关键字参数。

示例

# 定义带有多个参数的函数
def add(a, b):
    return a + b

# 调用函数
result = add(3, 5)
print(result)  # 输出 8

 

6.2.2 返回值

return 语句用于将函数的结果返回给调用者。如果没有 return 语句,函数默认返回 None

示例

def multiply(a, b):
    return a * b

result = multiply(4, 5)
print(result)  # 输出 20

6.3 默认参数、可变参数、关键字参数

Python函数支持不同类型的参数,可以让函数更加灵活。

6.3.1 默认参数

默认参数是在函数定义时指定的参数值。如果调用时没有提供该参数的值,则使用默认值。

示例

def greet(name="Guest"):
    print(f"Hello, {name}!")

greet()       # 输出 Hello, Guest!
greet("Tom")  # 输出 Hello, Tom!

6.3.2 可变参数(*args 和 **kwargs

  • *args 用于传递任意数量的位置参数。它将接收到的位置参数作为一个元组。
  • **kwargs 用于传递任意数量的关键字参数。它将接收到的关键字参数作为一个字典。
  • 示例

    # 使用 *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="Alice", age=25, city="New York")
    # 输出:
    # name: Alice
    # age: 25
    # city: New York
    

    6.3.3 组合使用默认参数、*args 和 **kwargs

    可以将默认参数、*args 和 **kwargs 一起使用,通常 *args 和 **kwargs 应该位于所有普通参数和默认参数之后。

    示例

    def func(a, b=2, *args, c=3, **kwargs):
        print(a, b, args, c, kwargs)
    
    func(1, 5, 6, 7, c=8, d=9)  # 输出: 1 5 (6, 7) 8 {'d': 9}
    

    6.4 匿名函数(Lambda函数)

    Python提供了一个用于创建简洁函数的方式:Lambda函数。Lambda函数是一种匿名函数,通常用于编写小的函数,而不需要定义一个完整的函数。

    Lambda函数的基本语法如下:

    lambda arguments: expression
    

    示例

    # 定义一个求平方的lambda函数
    square = lambda x: x ** 2
    print(square(5))  # 输出 25
    
    # Lambda与map()一起使用
    numbers = [1, 2, 3, 4]
    squared_numbers = list(map(lambda x: x ** 2, numbers))
    print(squared_numbers)  # 输出 [1, 4, 9, 16]
    

    6.5 函数的作用域(局部与全局变量)

    函数的作用域决定了变量的可见性和生命周期。Python中主要有两种作用域:局部作用域全局作用域

    6.5.1 局部变量与全局变量

  • 局部变量:在函数内部定义的变量,函数执行结束后,局部变量会被销毁。
  • 全局变量:在函数外部定义的变量,整个程序的所有部分都可以访问。
  • 示例

    # 全局变量
    x = 10
    
    def my_function():
        # 局部变量
        y = 5
        print(x + y)  # 访问全局变量x和局部变量y
    
    my_function()  # 输出 15
    

    6.5.2 修改全局变量

    在函数内修改全局变量时,必须使用 global 关键字来显式声明该变量为全局变量,否则会创建一个新的局部变量。

    示例

    x = 10
    
    def modify_global():
        global x  # 声明 x 是全局变量
        x = 20
    
    modify_global()
    print(x)  # 输出 20
    

    6.5.3 nonlocal 关键字

    nonlocal 关键字用于在函数内修改嵌套作用域(外层函数)中的变量,而不是创建局部变量。

    示例

    def outer_function():
        x = 10
    
        def inner_function():
            nonlocal x  # 修改外层函数的x
            x = 20
    
        inner_function()
        print(x)  # 输出 20
    
    outer_function()
    

     

    小结

  • 函数定义:使用 def 关键字定义函数,可以包含参数和返回值。
  • 参数类型:包括普通参数、默认参数、可变参数(*args)和关键字参数(**kwargs)。
  • 匿名函数:使用 lambda 关键字可以创建简洁的匿名函数,常用于简单的操作。
  • 函数作用域:局部变量仅在函数内部可见,使用 global 和 nonlocal 可以修改外部作用域的变量。
  • 通过灵活地使用函数,你可以将重复的代码块封装成函数,提高代码的可复用性和可维护性。在写更复杂的程序时,理解作用域和参数的使用方法将帮助你更好地控制变量的生命周期和作用范围。

    作者:ppdd805

    物联沃分享整理
    物联沃-IOTWORD物联网 » 函数_python

    发表回复