一文搞懂Python的函数传参机制

一文搞懂Python的函数传参机制

函数是Python中的重要组件,而函数参数则是Python函数的基本组成部分之一。本文将深入讲解Python的函数传参机制,其中包括以下内容:

  • 函数调用时参数的传递方式
  • 函数参数的默认值
  • 可变参数(args 和 *kwargs)
  • 参数传递时的深拷贝与浅拷贝

函数调用时参数的传递方式

Python中的参数传递有两种方式,分别是值传递和引用传递。值传递是指,传递给函数的是对象的一个副本,而引用传递是指,传递给函数的是对象的一个引用。其中,大多数情况下采用的是引用传递的方式。

下面通过一个示例来说明:

def change(x):
    x = 2
    print("函数内 x 的值为:", x)

y = 1
print("函数调用前 y 的值为:", y)
change(y)
print("函数调用后 y 的值为:", y)

此函数接收一个参数 x,并将其值修改为 2,并在函数内打印出值。在主程序中定义了变量 y,并分别在函数调用前后打印其值。运行结果为:

函数调用前 y 的值为: 1
函数内 x 的值为: 2
函数调用后 y 的值为: 1

从结果可以看出,函数内部修改了 x 的值,但是 y 的值并没有改变。这说明,当函数调用时,会将 y 的值的一个副本传递给函数,而函数内修改的是这个副本的值,而不是 y 的值本身。

函数参数的默认值

Python中可以为函数参数设置默认值,这样当用户没有为这个参数传入值时,函数就会使用默认值。在定义函数时,可以在参数后面使用“=默认值”的形式指定默认值。示例如下:

def print_info(name, age=20):
    print("姓名:", name)
    print("年龄:", age)

print_info("小明") # 如果没有传入年龄参数,则默认使用20

运行结果为:

姓名: 小明
年龄: 20

可变参数(args 和 *kwargs)

当我们不确定函数会有多少个参数时,可以使用可变参数。Python中有两种形式的可变参数:

  • *args:将多个无名参数打包成一个元组传入。
  • **kwargs:将多个关键字参数打包成一个字典传入。

示例如下:

def print_score(*args, **kwargs):
    for arg in args:
        print(arg)
    for key, value in kwargs.items():
        print(key, ":", value)

print_score(1,2,3,语文=90,数学=80) # 输出1,2,3和语文:90和数学:80

深拷贝与浅拷贝

在Python中,当我们传递一个对象类型的变量时,实际上是将该变量的引用传递给了函数。如果在函数内部修改了该变量的值,那么实际上也就修改了原来的变量值,这就是浅拷贝。相比之下,深拷贝是指将变量的值完全复制一份,与原来的变量没有关系。

示例如下:

def change_list(mylist):
    another_list = mylist
    another_list[0] = 99
    return another_list

lst = [1,2,3]
print(lst)
result = change_list(lst)
print(result)
print(lst)

这个示例定义了一个函数 change_list,它接受一个列表类型的参数 mylist。在函数内部将mylist赋值一份给 another_list,并修改了 another_list 的第一个元素为99。在主函数中,先输出了 lst 的值,再调用 change_list 函数,将结果赋值给 result,并输出 lst 和 result 的值。运行结果如下:

[1, 2, 3]
[99, 2, 3]
[99, 2, 3]

从输出结果可以看出,函数内部修改了 another_list 的值,而这就相当于修改了 lst 的值,因为它们都是对同一数据的引用。这就是Python中的浅拷贝。

如果想使用深拷贝,则可以使用 copy 模块中的 deepcopy 函数,如下所示:

import copy

def change_list_deepcopy(mylist):
    another_list = copy.deepcopy(mylist)
    another_list[0] = 99
    return another_list

lst2 = [1,2,3]
print(lst2)
result2 = change_list_deepcopy(lst2)
print(result2)
print(lst2)

该函数与之前示例中的函数类似,只不过在赋值操作中使用了 copy.deepcopy 函数进行深拷贝操作。运行结果如下:

[1, 2, 3]
[99, 2, 3]
[1, 2, 3]

从输出结果可以看出,函数内部修改了 another_list 的值,但是 lst 的值并没有被改变,这就是Python中的深拷贝。

至此,本文详细讲解了Python的函数传参机制,包括函数调用时参数的传递方式,函数参数的默认值,可变参数以及参数传递时的深拷贝与浅拷贝。希望能对Python学习者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文搞懂Python的函数传参机制 - Python技术站

(1)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • python的函数最详解

    以下是关于“Python的函数最详解”的完整攻略: 问题描述 函数是 Python 中的重要概念,可以将一段代码封装成一个可重用模块。本文将介绍 Python 函数的详细知识点。 解决方法 1.定义函数 在 Python 中,可以使用 def 关键字定义函数。函数定义包括函数名、参数列表和函数体。示例代码如下: def add(x, y): return x…

    python 2023年5月13日
    00
  • Python open读写文件实现脚本

    当你需要在Python中读取或写入文件时,你需要学会如何使用Python的内置open函数以及一些基本的读写操作。下面是使用Python open读写文件实现脚本的完整攻略: 打开文件 使用Python打开一个文件是通过open函数实现的。open函数的基本语法如下: f = open(filename, mode) 其中,filename是你想要打开的文件…

    python 2023年6月5日
    00
  • python实现简单的贪吃蛇游戏

    Python实现简单的贪吃蛇游戏 整体思路 贪吃蛇游戏可以分为三个模块:蛇的移动、食物的出现、蛇和食物的碰撞检测。 蛇的移动 蛇的移动使用Python的turtle模块实现。我们需要创建一个蛇类,用来存储蛇的坐标、方向、身体长度等信息。当蛇向上、下、左、右移动的时候,我们只需要将蛇头的坐标变为前一个身体坐标的值即可。蛇尾的坐标也需要随着蛇头的移动而更新,保证…

    python 2023年5月19日
    00
  • Python实现数字图像处理染色体计数示例

    Python实现数字图像处理染色体计数示例 本文将介绍如何使用Python实现数字图像处理染色体计数示例。 步骤一:获取图像 首先需要获取染色体图像。可以使用Python的pillow库来读取图像文件。示例代码如下: from PIL import Image # 读取图像文件 img = Image.open(‘chromosome.jpg’) 步骤二:图…

    python 2023年6月3日
    00
  • 分享4个Python中的非常好用的自动化脚本

    下面我会详细讲解“分享4个Python中的非常好用的自动化脚本”的完整攻略。 一、介绍 Python是一种高级编程语言,可以用于创建各种类型的自动化脚本。在本文中,我们将分享四个非常好用的Python自动化脚本,它们可以用于不同的任务和用途。以下是四个Python自动化脚本的介绍。 二、脚本1: 自动发送电子邮件 如果你需要自动向你的客户或者朋友发送电子邮件…

    python 2023年5月19日
    00
  • Python简单获取二维数组行列数的方法示例

    Python简单获取二维数组行列数的方法示例 在Python中,可以使用内置的函数来获取二位数组的行列数。常见的有 len() 函数和 shape 属性。 使用len()函数获取二维数组行列数的示例: # 定义一个二维数组 arr = [[1,2,3], [4,5,6], [7,8,9]] # 获取行数 rows = len(arr) print(‘该二维数…

    python 2023年6月5日
    00
  • Python实现嵌套列表的7中方法总结

    以下是“Python实现嵌套列表的7中方法总结”的完整攻略。 1. 嵌套列表的概述 在Python中,嵌套列表是一种常见的数据结构,用于存储多维数据。嵌套列表是指一个列表中包含了另一个或多个列表。嵌套列表可以用于存储二维或多维数据,例如矩阵、图像等。下面介绍Python实现嵌套列表的7种方法。 2. 7种方法 2.1 使用列表推式 列表推导式是Python中…

    python 2023年5月13日
    00
  • Python轻松破解加密压缩包教程详解

    下面是针对题目“Python轻松破解加密压缩包”的详细攻略。 1. 了解加密压缩包 在破解加密压缩包之前,我们需要了解该压缩包的加密方式。常见的加密方式有密码加密和AES加密。密码加密只需要输入正确的密码,就可以解压出文件;而AES加密需要解密用的密钥,才能解压缩文件。 2. 破解密码加密压缩包 2.1 利用Python zipfile库破解密码加密压缩包 …

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部