python 引用传递和值传递详解(实参,形参)

yizhihongxing

Python 引用传递和值传递详解(实参,形参)

在 Python 中,函数传递参数既可以是引用传递(传递的是对象的指针),也可以是值传递(传递的是对象的值)。理解这两种传递方式的区别,可以帮助我们更加灵活地使用 Python,编写出更加优秀的程序。

值传递

值传递是指在调用函数时,将实际参数的值复制一份传递给形式参数,在函数内修改形式参数的值并不会影响实际参数的值。在 Python 中,整型、浮点型、布尔型等都是不可变类型,传递时采用值传递的方式。

下面是一个简单的示例,帮助你理解 Python 中的值传递方式:

def func(a):
    a = 2
    print('函数内:a =', a)

x = 1
func(x)
print('函数外:x =', x)

上述代码中,我们定义了一个函数 func(a),并传递了 x 作为实际参数。在函数内部,我们将 a 的值修改为 2,并打印出了函数内部的值。在函数外部,我们再次打印 x 的值。你将得到如下输出:

函数内:a = 2
函数外:x = 1

由此可见,函数内部修改形式参数 a 的值,并不会影响实际参数 x 的值。这就是 Python 的值传递方式。

引用传递

引用传递是指在调用函数时,将实际参数的引用(也就是地址)传递给形式参数,在函数内部修改形式参数的值,也会影响实际参数的值。在 Python 中,列表、字典等可变类型采用引用传递的方式。

下面是一个示例,帮助你理解 Python 中的引用传递方式:

def func(a):
    a.append(2)
    print('函数内:a =', a)

x = [1]
func(x)
print('函数外:x =', x)

上述代码中,我们定义了一个函数 func(a),并传递了 x 作为实际参数。在函数内部,我们向 a 中添加了元素 2,并打印出了函数内部的值。在函数外部,我们再次打印 x 的值。你将得到如下输出:

函数内:a = [1, 2]
函数外:x = [1, 2]

由此可见,函数内部修改形式参数 a 中的值,同时也改变了实际参数 x 的值。

总结

在 Python 中,函数传递参数有两种方式,即值传递和引用传递。简单的说,不可变类型采用值传递,可变类型采用引用传递。

在 Python 中,引用传递(也就是传递对象的引用,而不是对象的值)是最常见的方式。对于不熟悉的 Python 程序员来说,理解这个概念是至关重要的。

以上就是 Python 引用传递和值传递的详细攻略。

示例

示例一

# 定义一个函数,传递一个字符串
def text(name):
    name = "hello " + name
    print("函数内 name 的值为:", name)

# 调用函数,传递一个字符串参数
my_name = "Tom"
text(my_name)
print("函数外 my_name 的值为:", my_name)

运行上述代码,将会输出:

函数内 name 的值为: hello Tom
函数外 my_name 的值为: Tom

由此可见,函数内部修改形式参数 name 的值,并不会影响实际参数 my_name 的值。

示例二

# 定义一个函数,传递一个列表
def add(item_list):
    item_list.append("apple")
    print("函数内 item_list 的值为:", item_list)

# 调用函数,传递一个列表参数
my_list = ["orange", "banana"]
add(my_list)
print("函数外 my_list 的值为:", my_list)

运行上述代码,将会输出:

函数内 item_list 的值为: ['orange', 'banana', 'apple']
函数外 my_list 的值为: ['orange', 'banana', 'apple']

由此可见,函数内部修改形式参数 item_list 中的值,同时也改变了实际参数 my_list 的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 引用传递和值传递详解(实参,形参) - Python技术站

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

相关文章

  • Python实现动态条形图绘制的示例代码

    下面我来给你讲解一下“Python实现动态条形图绘制的示例代码”的完整攻略。 一、背景介绍 Python是一种高级编程语言,一直以来都是数据科学和机器学习领域最受欢迎的语言之一,因为Python有着强大的数据处理和可视化能力。在数据分析的过程中,我们往往需要将数据可视化,特别是通过交互式可视化来更好地展示数据,动态条形图便是一种常见的交互式可视化。 二、实现…

    python 2023年6月3日
    00
  • python案例练习合集

    Python案例练习合集攻略 Python案例练习合集是一份提供给Python初学者练习的教程,该教程提供了丰富的实例练习,具体内容涵盖基础语法、函数、模块、文件操作等方面。以下是该攻略的详细介绍: 环境准备 在开始使用Python案例练习合集前,需要确保已经安装了Python环境。建议使用Python 3.x版本,可以从官网 https://www.pyt…

    python 2023年5月13日
    00
  • 使用Python的Twisted框架编写简单的网络客户端

    使用Python的Twisted框架编写网络客户端的完整攻略包括以下步骤: Twisted框架安装 要使用Twisted框架,需要先安装它。可以使用以下命令安装: pip install twisted 导入Twisted库 安装完Twisted框架后,需要在代码中导入Twisted库: from twisted.internet import reacto…

    python 2023年6月5日
    00
  • Go内置序列化库gob的使用

    Go内置了一个序列化库gob,它可以将Go语言的数据结构序列化为二进制格式,然后存储到文件或网络中,也可以把数据从二进制格式恢复为Go语言的数据结构。本文主要介绍gob库的使用方法。 序列化 序列化是指把结构体或者其他类型的数据转成二进制格式,方便存储、传输和解析。使用gob序列化和反序列化可以使得数据结构在传输和存储的过程中更加简单和高效。 编码 以下是一…

    python 2023年6月2日
    00
  • Vue eventBus事件总线封装后再用的方式

    Vue中经常会遇到子组件向父组件数据传递、兄弟组件之间数据共享等问题,这时候可以使用eventBus事件总线来解决。 事件总线就是一个事件中心,任何组件都可以向它注册事件或者触发事件,从而实现组件之间的通信。 ① 创建eventBus 在Vue中,可以通过两种方式创建eventBus: 1.通过Vue实例创建: // EventBus.js import V…

    python 2023年6月13日
    00
  • python中requests爬去网页内容出现乱码问题解决方法介绍

    Python中Requests爬取网页内容出现乱码问题解决方法介绍 在使用Python中的Requests库爬取网页内容时,有时会出现乱码问题。本文将介绍如何解决这个问题,并提供两个示例。 问题原因 乱码问题通常是由于网页编码与Python解码不一致导致的。网页编码通常是通过Content-Type头部指定的,而Python解码通常是通过response.e…

    python 2023年5月15日
    00
  • python对RabbitMQ的简单入门使用教程

    Python对RabbitMQ的简单入门使用教程 RabbitMQ是一个开源的消息队列系统,可以用于实现异步消息传递、任务分发等功能。Python提供了多种库,可以用于与RabbitMQ进行交互。本文将详细讲解如何使用Python对RabbitMQ进行简单入门使用,包括如何安装RabbitMQ、如何使用pika库、如何发送和接收消息等。 安装RabbitMQ…

    python 2023年5月15日
    00
  • 使用pyqt5 tablewidget 单元格设置正则表达式

    下面是详细的攻略: 使用PyQt5 TableWidget单元格设置正则表达式 在PyQt5中,我们可以使用TableWidget来创建表格。有时候,我们需要对表格中的数据进行验证,这时候可以使用正则表达式来实现。本文将介绍如何在TableWidget单元格中设置正则表达式。 步骤一:创建TableWidget 首先,我们需要创建一个TableWidget,…

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