Python学习--函数传值问题

news2025/1/12 12:08:43

四、函数传值问题

先看一个例子:

# -*- coding: UTF-8 -*-
def chagne_number( b ):
    b = 1000

b = 1
chagne_number(b)
print( b )

最后输出的结果为:

1

先看看运行的结果?

想一下为什么打印的结果是 1 ,而不是 1000 ?

其实把问题归根结底就是,为什么通过函数 chagne_number 没有更改到 b 的值?

这个问题很多编程语言都会讲到,原理解释也是差不多的。

这里主要是函数参数的传递中,传递的是类型对象,之前也介绍了 Python 中基本的数据类型等。而这些类型对象可以分为可更改类型和不可更改的类型

在 Python 中,字符串,整形,浮点型,tuple 是不可更改的对象,而 list , dict 等是可以更改的对象。

例如:

不可更改的类型:变量赋值 a = 1,其实就是生成一个整形对象 1 ,然后变量 a 指向 1,当 a = 1000 其实就是再生成一个整形对象 1000,然后改变 a 的指向,不再指向整形对象 1 ,而是指向 1000,最后 1 会被丢弃

可更改的类型:变量赋值 a = [1,2,3,4,5,6] ,就是生成一个对象 list ,list 里面有 6 个元素,而变量 a 指向 list ,a[2] = 5则是将 list a 的第三个元素值更改,这里跟上面是不同的,并不是将 a 重新指向,而是直接修改 list 中的元素值。

指向问题

这也将影响到函数中参数的传递了:

不可更改的类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是 a 的值,没有影响 a 对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

可更改的类型:类似 c++ 的引用传递,如 列表,字典。如 fun(a),则是将 a 真正的传过去,修改后 fun 外部的 a 也会受影响

因此,在一开始的例子中,b = 1,创建了一个整形对象 1 ,变量 b 指向了这个对象,然后通过函数 chagne_number 时,按传值的方式复制了变量 b ,传递的只是 b 的值,并没有影响到 b 的本身。具体可以看下修改后的实例,通过打印的结果更好的理解。

# -*- coding: UTF-8 -*-
def chagne_number( b ):
    print('函数中一开始 b 的值:{}' .format( b ) )
    b = 1000
    print('函数中 b 赋值后的值:{}' .format( b ) )


b = 1
chagne_number( b )
print( '最后输出 b 的值:{}' .format( b )  )


打印的结果:

函数中一开始 b 的值:1
函数中 b 赋值后的值:1000
最后输出 b 的值:1

当然,如果参数中的是可更改的类型,那么调用了这个函数后,原来的值也会被更改,具体实例如下:

# -*- coding: UTF-8 -*-

def chagne_list( b ):
    print('函数中一开始 b 的值:{}' .format( b ) )
    b.append(1000)
    print('函数中 b 赋值后的值:{}' .format( b ) )


b = [1,2,3,4,5]
chagne_list( b )
print( '最后输出 b 的值:{}' .format( b )  )

输出的结果:

函数中一开始 b 的值:[1, 2, 3, 4, 5]
函数中 b 赋值后的值:[1, 2, 3, 4, 5, 1000]
最后输出 b 的值:[1, 2, 3, 4, 5, 1000]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1127933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

凉鞋的 Godot 笔记 204. 语句

204. 语句 在上一篇,我们接触了三种常见的类型,如下所示: 这样我们算是对变量进行了一个入门了。 其实我们除了变量,我们还接触了一个叫做语句的概念。 我们可以看下代码: extends Node# Called when the node enters the sce…

Kubernetes原生微服务开发实践

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 随着互联网业务的…

差值结构顺序的稳定性

3( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 4( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 5( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 做3个网络,让网络的输入都只有3个节点, 一个网络的训练集有3张图片,一个网络训练集有4张图片,一个网络的训练集有5张…

1.VS2022+QT

项目需要对倾斜摄影进行解析编辑,所以采用osg平台。 1.VS2022 百度下载安装一个包,然后选择C桌面开发。 2.Qt 在以下网站下载在线安装程序,并通过cmd运行安装程序。然后根据截图配置安装。 qt | 镜像站使用帮助 | 清华大学开源软件镜像站 |…

Comate SaaS版:开发者的梦想工具终于来了

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

适用于 Windows 的 7 个免费网络课程录制软件

随着虚拟工作和在线教学的兴起,屏幕录制工具是必不可少的,也是当今必备的应用程序。在录制在线会议、创建教程和学术课程或与在线团队协作项目时,它们会派上用场。 网络上有丰富的屏幕录制工具,支持各种平台并提供不同的功能。选…

Python和Java有什么区别

Python和Java是两种很流行的编程语言,但它们有以下几个主要区别: 语言类型:Python是一种解释型语言,Java是一种编译型语言。Python源代码被解释执行,Java源代码先被编译为字节码,然后在JVM上运行。语法简洁性:Python的语法更简洁简单,Java的语法相对更复杂。Python专注于代码的…

MySQL驱动包下载

使用java来连接,进入下述网址: MySQL :: Download Connector/J 如果不是java,则进入下述网址 MySQL :: MySQL Community Downloads

uni-app小程序,uview-ui组件样式无法穿透修改的解决办法

1.首先设置以下选项.该选项的作用是让微信小程序允许样式穿透. 在需要改动的文件内加上 options: { styleIsolation: shared } 2.然后再使用vue的样式穿透写法. ::v-deep .类样式{} 或者 /deep/ .类样式{}

算法与数据结构-贪心算法

文章目录 什么是贪心算法贪心算法实战分析1. 分糖果2. 钱币找零3. 区间覆盖4.霍夫曼编码 什么是贪心算法 关于贪心算法,我们先看一个例子。 假设我们有一个可以容纳 100kg 物品的背包,可以装各种物品。我们有以下 5 种豆子,每种豆子的总量和…

client-go 实现一个自动创建ingress资源的controller

需求: 创建的service annotaion中如果包含ingress/http: "true"的时候,会自动将该服务的ingress资源创建出来,当删除掉ingress/http: "true"的时候,自动删除ingress, 同时将service删除掉的时候也…

堆排序(HeapSort)详解

堆排序 一,思考二,算法步骤2.1向上调整建堆2.2关键思路2.3完整代码补充:向下调整建堆 三,总结 一,思考 我们上一篇文章讲到了堆的基本实现,那么堆排序我们就先借助堆的结构来实现。 void HeapSort(HP* hp…

2023年10月份最新香港优才计划申请攻略,附政策、申请流程、续签!

2023年10月份最新香港优才计划申请攻略,附政策、申请流程、续签! 2023年10月份香港优才计划利好政策持续推进,越来越多的人咨询香港优才计划申请事宜。现在为大家整理了一份全面的优才申请攻略,如果你计划在今年申请香港优才&…

MySQL基础练习题

数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名 --4.成绩…

2021年06月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python编程(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 下列程序运行的结果是? s hello print(sworld)A: sworld B: helloworld C: hello D: world 答案&#xff1a…

数据飞轮拆解车企数据驱动三板斧:数据分析、市场画像、A/B 实验

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,火山引擎数智平台(VeDI)2023 数据飞轮汽车行业研讨会在上海举办,活动聚焦汽车行业数字化转型痛点,从…

NEWCC:新时代的区块链生态新币私募造势平台

在当今区块链领域,这项技术已经为金融资产注入了全新的生机,同时也为初创企业提供了新的商业模式和融资机会。通过代币的金融属性,企业和项目方得以实现资本的初期积累,同时在区块链空间以更低成本和更高效率进行交易和服务创新。…

适合在虚拟化环境中部署 Kubernetes 的三个场景

在《虚拟化 vs. 裸金属:K8s 部署环境架构与特性对比》文章中,我们从架构和特性的角度,对比了在虚拟化和裸金属环境部署 Kubernetes 的优劣势,并在文末列举了两者更适合的应用场景。本文,我们将聚焦以虚拟化环境支持 K8…

英语——分享篇——每日200词——3401-3581

3401——colony——[kɒlənɪ]——n.殖民地,(某一类人的)聚居区——colony——co可乐(熟词coke)lon笼(拼音)y树杈(编码)——把可乐装在笼子里用树杈挑着去殖民地——The newly-occupied Italian colony of Libya rose in revolt in 1914.——意大利新占领的殖民地利…

低成本IC上岸攻略—IC设计网课白嫖篇

数字电路基础 清华大学 王红主讲:数字电子技术基础 西安电子科技大学 任爱锋主讲:数字电路与逻辑设计 模拟电路基础 上交大 郑益慧主讲:模拟电子技术基础 清华大学 华成英主讲:模拟电子技术基础 半导体物理: 西…