详解python 函数传值方法

  • Post category:Python

当在Python中传递函数参数时,实际上传递的是对象的引用。因此,在函数中对对象的修改可能会被传递给其它函数或调用程序。

在Python中,函数参数可以有位置参数、默认参数和可变参数,它们在函数传参时有着不同的作用,下面逐一进行详细讲解。

位置参数

位置参数指的是通过函数调用时按照参数位置进行传递的参数。这些参数在函数定义时需要以相同的顺序和数量进行声明和定义,否则会产生语法错误。

位置参数一般为不可变对象(如数字、字符串、元组等),在函数传递时会将对象的值传递给函数中对应的形参变量。但对于可变对象(如列表、字典等),在函数内部进行的操作可能会对传入的对象产生影响。

下面是一个位置参数的例子:

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

# 调用函数传递位置参数
sum = add_numbers(5, 10)
print(sum)  # 输出 15

以上代码中,函数 add_numbers 中定义了两个位置形参 ab,在函数中将它们相加并返回相加后的结果。调用函数时,通过位置顺序传递了两个实参 510,最终输出相加的结果 15。

默认参数

默认参数指的是在函数定义时为参数赋予的默认值。如果调用函数时没有为该参数传递任何值,则使用默认值。默认参数定义在最后一个位置参数之后,且必须在函数定义时就确定其默认值。

下面是一个默认参数的例子:

def print_message(name, message="Hello"):
    print(f"{name}, {message}")

# 调用函数传递默认参数
print_message("John")      # 输出 "John, Hello"
print_message("Bob", "Hi") # 输出 "Bob, Hi"

以上代码中,函数 print_message 定义了两个参数 namemessage,其中 message 是一个默认参数,默认值为 “Hello”。在函数中会将传入的参数打印到控制台上。调用函数时,如果只传递了一个参数 name,则会默认使用 “Hello” 作为 message 参数的值输出。

可变参数

可变参数指的是在函数定义时不确定传递多少个参数,而是使用 *args**kwargs 语法来声明参数。当函数调用时,参数数量和值可以在传递时动态的进行传递,函数会将这些值包装在一个元组或字典数据结构中,传递给函数。

下面是一个可变参数的例子:

# *args 示例
def add_numbers(*args):
    result = 0
    for arg in args:
        result += arg
    return result

# 调用函数传递可变参数
sum1 = add_numbers(5, 10, 15)
sum2 = add_numbers(2, 4, 6, 8, 10)
print(sum1) # 输出 30
print(sum2) # 输出 30

以上代码中,函数 add_numbers 使用 *args 语法来声明可变参数,通过遍历所有传递进来的参数进行相加,并最终将相加的结果返回。调用函数时可以传递任意数量的参数,函数的代码可以适应这种变化,计算和并返回。

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

# 调用函数传递可变参数
print_info(name="John", age=24, city="New York")

以上代码中,函数 print_info 使用 **kwargs 语法来声明可变参数,将所有的关键字参数传递给函数。在函数中使用 items() 方法遍历字典参数,并打印出每个键值对的信息。调用函数时,传递了 nameagecity 三个关键字参数。

通过以上的讲解,可以看出 Python 中函数传值方法的不同,当需要对可变对象进行递归操作的时候,需要注意可变对象的传递要采用深度拷贝即 copy 操作,以免相互之间的修改产生不可预期的结果。