DAY 26 函数专题1:函数定义与参数

1. 函数的定义

函数是封装可重用代码的块,使用 def 关键字定义:

def function_name(parameters):
    """函数文档字符串(可选)"""
    # 函数体
    return result  # 可选
def add(a, b):
    return a + b
print(add(3, 5))  # 输出:8

2. 变量作用域:局部变量和全局变量

  • 局部变量:函数内部定义,只在函数内有效。

  • 全局变量:函数外部定义,需用 global 关键字在函数内修改。

    x = 10  # 全局变量
    
    def my_func():
        global x  # 声明使用全局变量
        y = 5    # 局部变量
        x = 20   # 修改全局变量
        print(y)  # 输出:5
    
    my_func()
    print(x)      # 输出:20(全局变量被修改)
    print(y)      # 报错:y未定义(局部变量外部不可访问)

    3. 函数的参数类型

    (1) 位置参数 (Positional Arguments)
  • 按位置顺序传递,不可省略。

    def greet(name, message):
        print(f"{name}, {message}")
    
    greet("Alice", "Hello!")  # 正确:name="Alice", message="Hello!"
    greet("Hello!", "Alice")  # 逻辑错误:顺序颠倒
    (2) 默认参数 (Default Arguments)
  • 定义时指定默认值,调用时可省略。

    def greet(name, message="Welcome!"):
        print(f"{name}, {message}")
    
    greet("Bob")           # 输出:Bob, Welcome!
    greet("Cathy", "Hi!")  # 输出:Cathy, Hi!
    (3) 不定参数 (Arbitrary Arguments)
  • *args:接收任意个位置参数,转为元组。

  • **kwargs:接收任意个关键字参数,转为字典。

  • def collect(*args, **kwargs):
        print("位置参数:", args)    # 输出元组
        print("关键字参数:", kwargs) # 输出字典
    
    collect(1, 2, name="Alice", age=25)
    # 输出:
    # 位置参数: (1, 2)
    # 关键字参数: {'name': 'Alice', 'age': 25}

    4. 传递参数的手段:关键词参数 (Keyword Arguments)

    调用时通过 参数名=值 显式指定,顺序可打乱:

  • def person_info(name, age, city):
        print(f"{name}, {age}岁, 来自{city}")
    
    person_info(age=30, city="北京", name="Bob")
    # 输出:Bob, 30岁, 来自北京

    5. 传递参数的顺序:同时出现三种参数类型时

    定义函数时的顺序规则:
    def example(a, b, c=10, *args, **kwargs):
        print(f"a={a}, b={b}, c={c}")
        print("args:", args)
        print("kwargs:", kwargs)
    
    # 正确调用
    example(1, 2, 3, 4, 5, name="Alice", age=20)
    # 输出:
    # a=1, b=2, c=3
    # args: (4, 5)
    # kwargs: {'name': 'Alice', 'age': 20}
    
    # 错误调用(位置参数在关键词后)
    example(1, b=2, 3, name="Bob")  # 报错:位置参数3在关键词参数b=2后

    DAY 26 函数专题1:函数定义与参数_第1张图片@浙大疏锦行

你可能感兴趣的:(python)