欢迎访问宙启技术站
智能推送

Python函数参数的传递方式和常用参数类型介绍

发布时间:2023-07-01 06:19:59

在Python中,函数参数的传递方式有两种:传值和传引用。

传值是指将实际参数的值复制给形式参数。在函数内部修改形式参数的值,并不会影响到实际参数的值。这种传递方式主要适用于不可变类型的参数,如数字、字符串和元组等。例如:

def change_value(num):
    num += 10
    print(num)

x = 5
change_value(x)  # 输出 15
print(x)  # 输出 5

传引用是指将实际参数的引用传递给形式参数。在函数内部修改形式参数的值,会影响到实际参数的值。这种传递方式主要适用于可变类型的参数,如列表和字典等。例如:

def change_list(lst):
    lst.append(4)
    print(lst)

my_list = [1, 2, 3]
change_list(my_list)  # 输出 [1, 2, 3, 4]
print(my_list)  # 输出 [1, 2, 3, 4]

除了传递方式外,Python中还有一些常用的参数类型,如以下几种:

1. 位置参数:位置参数是指按照参数定义的顺序进行传递。调用函数时,实参必须按照形参的顺序进行传递。例如:

def add_numbers(a, b):
    return a + b

result = add_numbers(5, 3)  # 实参 5 和 3 分别传递给形参 a 和 b
print(result)  # 输出 8

2. 默认参数:默认参数是在函数定义时给形参指定默认值,调用函数时如果没有传递该参数,则使用默认值。默认参数必须放在位置参数后面。例如:

def power(x, n=2):
    return x**n

result1 = power(5)  # 没有传递第二个参数,默认为 2,计算 5 的平方
print(result1)  # 输出 25

result2 = power(5, 3)  # 传递第二个参数为 3,计算 5 的立方
print(result2)  # 输出 125

3. 可变参数:可变参数可以接受任意个数的参数,包括0个。在形参前加上*,表示该参数为可变参数。可变参数在函数体内被视为一个元组。例如:

def add_numbers(*args):
    total = 0
    for num in args:
        total += num
    return total

result1 = add_numbers(1, 2, 3)  # 传递三个参数
print(result1)  # 输出 6

result2 = add_numbers(1, 2, 3, 4, 5)  # 传递五个参数
print(result2)  # 输出 15

4. 关键字参数:关键字参数可以接受任意个数的参数,包括0个。在形参前加上**,表示该参数为关键字参数。关键字参数在函数体内被视为一个字典。例如:

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=20, city="New York")
# 输出:
# name: Alice
# age: 20
# city: New York

5. 强制关键字参数:强制关键字参数是在函数定义时,使用*分隔位置参数和强制关键字参数,强制关键字参数必须在调用函数时显式指定参数名。例如:

def greet(name, *, age):
    print(f"Hello, {name}! You are {age} years old.")

greet("Alice", age=20)  # 必须指定参数名
# 输出:Hello, Alice! You are 20 years old.

greet("Bob")  # 不指定参数名会报错
# 报错:TypeError: greet() missing 1 required keyword-only argument: 'age'

在Python中,函数参数的传递方式和类型的选择,取决于参数的特性和函数的需求。了解和掌握这些参数类型和传递方式,能够更好地编写和调用函数,提高代码的灵活性和可读性。