【python基础】函数-值传递

这篇具有很好参考价值的文章主要介绍了【python基础】函数-值传递。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为了更好的认识函数,我们还要研究值传递问题,再研究这个问题之前,我们已经知道了函数之间的值传递,是实参变量值传递给形参变量,然后让形参变量在函数内完成相应的功能。但是因为数据类型的不同,这里的值传递产生的对实参变量的效果是不同的

1.传递数据本质

参数传递之间传递的肯定是数据,而这种数据本质上是地址值。变量有四个要素:名、值、数据类型、地址值。每个变量在创建时都会在内存中开辟一定空间,该空间具有地址值,并在该地址里面存储数据,Python的变量存储的数据是地址值,该地址值所代表的是真实数据的地址值,而不是变量的地址值。

1.1不可变数据类型

我们之前介绍过数字、字符串、元组它是不可变的,就是说只要在内存中创建了该数据,那么它是不变的,创建了数字1,那么数字1是存在的,我们把变量进行运算操作,假设进行加法运算,让其加1,变为了2,那么这里是创建了一个数字2,数字2也是不可变的,原先的数字1还是存在的,只不过我们的变量中储存的数据是数字2的地址值了。
【python基础】函数-值传递
图中的0x-xx是地址假想值。
id函数在作用于变量时,其返回的是变量指向数据内容的地址值,编写程序如下所示:
【python基础】函数-值传递
参数之间数据的传递,就是将实参变量的值赋值给形参变量,这里我们说的实参变量的值就是实参数据的地址值,编写程序如下所示:
【python基础】函数-值传递
我们通过输出结果发现,num1、num2、num3所存储的地址值都是相同的,都为140716513424168,这说明他们都指向同一个数据,也就是数字1,但是经过运算后,num3所存储的地址值变化了,是因为产生了新数据,新数据的地址赋值给了num3,num3指向了数字2的地址
那么,经过sum函数后,因为num1、num2的地址是没有发生改变的,所以我们输出num1和num2它的结果还是1。
这里我们是用数字举例的,换成字符串、元组等都是同样的道理

1.2可变数据类型

不可变数据类型在内存中的表现:当不可变数据类型(数字、字符串、元组)的变量需要更新新值时,其创建一个新值,将旧值的地址更换为新值的地址,此时指向发生改变。
可变数据类型,我们目前了解的就是列表、字典,我们可以发现它们都不是一个简单的数据,而是一组相对复杂的数据集合,数据集合里面包含的数据类型是任意的,就相当于一个仓库,可变数据类型变量的数据值是仓库的地址,而我们所说的可变数据类型变量里面的数据更新新值时,不是仓库地址的改变,而是仓库内数据元素的改变。
所以,可变数据类型在内存中的表现:当可变数据类型(列表、字典)变量需要更新数据元素新值时,其创建一个数据元素新值,将新值的地址放进可变数据类型所指向的仓库里面,而不是改变可变数据类型变量存储的仓库的地址值,其逻辑如下图所示。
【python基础】函数-值传递
图中的0x-xx是地址假想值。
我们可以做下验证,编写程序如下所示:
【python基础】函数-值传递
通过输出结果我们发现,
1.在经过del_first函数之前,输出列表数据元素为[1,2,3,4]。在经过del_first函数之后,输出列表数据元素为[2,3,4]这说明改变了实参变量list所指向的地址中的内容,形象化理解,就是改变了仓库里面的内容。
2.在经过del_first函数之前,list变量所存储的地址值为2113656214912。经过del_first函数之后,list变量所存储的地址值仍为2113656214912。所以说明list变量经过函数操作后,没有改变其存储的地址值,形象化理解,就是没有改变仓库的地址
3.在经过del_first函数之前,列表数据元素0所存储的地址为140712759325480,列表数据元素1所存储的地址为140712759325512。在经过del_first函数之后,列表数据0所存储的地址为原先列表数据元素1存储的地址140712759325512,也就是经过删除第一个数据元素的操作后,所有数据元素都依次往前排列。形象化理解,就是把仓库中第一个位置的物品拿出来,然后把其他的物品依次往前挪一个位置。
这里我们是用列表举例的,换成字典等其他可变数据类型都是同样的道理

1.3总结

不可变数据类型的实参变量,经过函数操作之后,不会改变其原有内容
可变数据类型的实参变量,经过函数操作之后,会改变其原有内容文章来源地址https://www.toymoban.com/news/detail-489886.html

到了这里,关于【python基础】函数-值传递的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python中四大高阶函数,你认识几个

    第一个参数接收一个函数名,第二个参数接收一个可迭代对象,利用map,lambda表达式将所有偶数元素加100 sorted() 函数对所有可迭代的对象进行排序操作。 sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。list 的 sort 方法返回的是对

    2024年02月05日
    浏览(43)
  • 【Python】函数进阶 ① ( 函数返回多个返回值 | 函数参数传递类型简介 | 位置参数 | 关键字参数 )

    在函数中 , 如果要 返回 多个返回值 , 可以 在 return 语句中 , 设置多个返回值 , 这些返回值之间使用 逗号 隔开 , 这些返回值的类型是 元组 tuple 类型的 ; 在下面的代码中 , 返回了 3 个返回值 , 其 本质上是返回了一个包含 3 个元素的 元组 数据容器 , 可以使用多重赋值将返回的

    2024年02月11日
    浏览(56)
  • python main 函数-启动-传递参数 python 打包 exe C# 进程传参

    在Python编程中,我们经常需要从命令行或其他外部环境中获取参数。Python提供了一种简单而灵活的方式来处理这些参数,即通过main函数传参 1.python main 函数-启动-传递参数 test.py 2. 如果直接传参给 脚本 输出:  输入 aa bb cc cc pyinstaller是一个流行的Python打包工具,它可以将P

    2024年02月09日
    浏览(41)
  • PYTHON(一)——认识python、基础知识

    目录 目录 一、为什么要学习python? 二、输出(用Python语言问候世界!) 输出的进阶: 三、认识错误 (BUG) 四、输入 五、变量  名字里是什么: 变量名的命名规则 : 六、什么是赋值运算符 简单的赋值运算符 加法赋值运算符: 减法赋值运算符: 取余赋值运算符 增量运算

    2024年02月09日
    浏览(52)
  • Python基础语法第一章、认识Python

    很多老一辈的人, 管下面这个叫做计算机. 然鹅, 它只是 \\\"计算器\\\", 和计算机是有很大区别的.  现在我们所说的计算机, 不光能进行算术运算, 还能进行逻辑判断, 数据存储, 网络通信等等功能, 以至于可以自动的完成非常复杂的工作.以下这些都可以称为 \\\"计算机\\\" . 总的来说, 一台

    2024年02月11日
    浏览(37)
  • C++ 学习 ::【基础篇:16】:C++ 类的基本成员函数:拷贝构造函数(认识、特征、注意点及典型使用场景)及其基本写法与调用

    本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段: 基础篇、STL 篇、高阶数据结构与算法篇 ,相关重点内容如下: 基础篇 : 类与对象 (涉及C++的三大特性等); STL 篇 : 学习使用 C++ 提供的 STL 相关库 ; 高阶数据结构与算

    2024年02月08日
    浏览(47)
  • 微信小程序onLoad加载定义好的函数

    运行时老报错 后来修改为正确的代码 再尝试运行,一切OK!

    2024年04月12日
    浏览(33)
  • 30天入门Python(基础篇)——第2天:Python安装(保姆级)与IDE的认识与选择+详细安装教程(万字建议收藏)

    🔥🔥本文已收录于《30天学习Python从入门到精通》 🉑🉑本专栏专门 针对于零基础和需要重新复习巩固的同学 所准备的一套基础班教学, 从0基础到精通Python ,轻松掌握Python,欢迎各位同学订阅,专栏订阅地址:点我直达 🤞🤞此外如果您已工作,如需利用Python解决办公中

    2024年02月07日
    浏览(60)
  • 【Python基础】Python函数(匿名函数)

    Q:如果一个函数要有 多个返回值 ,该如何书写代码? 按照返回值的顺序,写对应顺序的多个变量接收即可 变量之间用逗号隔开 支持不同类型的数据return (1)位置参数 位置参数:调用函数时根据函数定义的 参数位置来传递参数 Tip:传递的参数 和 定义的参数 顺序及个数必须

    2024年02月08日
    浏览(46)
  • 【C++】STL 算法 ③ ( 函数对象中存储状态 | 函数对象作为参数传递时值传递问题 | for_each 算法的 函数对象 参数是值传递 )

    在 C++ 语言中 , 函数对象 / 仿函数 可以像函数一样被调用 , 并且 其 还具有类的特征 , 可以 通过 继承 和 重载 来 修改 重载函数调用操作符函数 的行为 ; 函数对象 / 仿函数 通常是通过 定义一个类 , 然后为这个类 重载 函数调用操作符 () 来实现的 ; 函数对象的一个重要特性是

    2024年02月02日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包