【python实操】python小程序之函数的方法和赋值的区别

news2024/11/28 12:50:09

引言

python小程序之函数的方法和赋值

文章目录

  • 引言
  • 一、函数的方法和赋值
    • 1.1 题目
    • 1.2 代码
    • 1.2.1 append方法
      • 1.2.2 赋值
    • 1.3 代码解释
      • 1.3.1 append方法
      • 1.3.2 赋值
  • 二、思考
    • 2.1 append方法和赋值的区别
      • 2.1.1 append方法
      • 2.1.2 赋值操作
      • 2.1.3 总结

一、函数的方法和赋值

1.1 题目

在函数内用append方法和赋值的区别

1.2 代码

1.2.1 append方法

def func(list1):
    list1.append(10)

my_list = [1, 2]
func(my_list)
print(my_list)

输出结果:
在这里插入图片描述

1.2.2 赋值

def func(list1):
    list1 = [2, 1]


my_list = [1, 2]
func(my_list)
print(my_list)

输出结果:
在这里插入图片描述

1.3 代码解释

1.3.1 append方法

这段代码定义了一个名为 func 的函数,该函数接收一个列表参数 list1,并在该列表的末尾添加一个整数 10。然后代码创建了一个名为 my_list 的列表,并调用了 func 函数,将 my_list 作为参数传递。最后,代码打印出 my_list 的内容

  1. def func(list1)::这行代码定义了一个名为 func 的函数,它有一个参数 list1
  2. list1.append(10):在 func 函数内部,这行代码调用了列表对象 list1append 方法,将整数 10 添加到列表的末尾
  3. my_list = [1, 2]:这行代码创建了一个新的列表 my_list,并初始化为包含两个元素 [1, 2]
  4. func(my_list):这行代码调用了 func 函数,并将 my_list 作为参数传递。由于列表是可变对象,func 函数中对 list1 的任何修改都会反映在原始的 my_list
  5. print(my_list):这行代码打印出 my_list 的当前内容。由于在 func 函数中向 my_list 添加了一个元素 10,因此打印的结果将是 [1, 2, 10],这表明 func 函数成功地修改了 my_list,向其添加了一个新的元素

1.3.2 赋值

这段代码定义了一个函数func,该函数接收一个列表作为参数,并在函数内部修改这个参数。然后,代码创建了一个列表my_list,并调用了func函数,最后打印出my_list的值

  1. def func(list1)::定义了一个名为func的函数,它有一个参数list1
  2. list1 = [2, 1]:在函数内部,将参数list1的值重新赋为一个新的列表[2, 1]。这是一个局部变量赋值操作,它不会影响函数外部的任何变量
  3. my_list = [1, 2]:在函数外部,初始化一个列表my_list,其值为[1, 2]
  4. func(my_list):调用函数func,并将my_list作为参数传递给它
  5. func函数内部,参数list1被重新赋值为[2, 1],但这不会改变函数外部的my_list变量。因为函数参数在Python中是通过引用传递的,但在这个函数内部,参数list1被重新赋值,这相当于在函数内部创建了一个新的局部变量,它与外部的my_list不再有关联
  6. print(my_list):打印出my_list的值。由于函数内部的赋值操作没有改变外部列表,所以输出仍然是[1, 2],表明my_list的值没有被func函数改变。这是因为函数内部对参数的赋值操作仅限于函数的局部作用域

二、思考

2.1 append方法和赋值的区别

.append() 方法可以改变外部变量所引用的可变对象(如列表),而赋值操作通常不会改变外部变量引用的对象

2.1.1 append方法

.append() 方法是列表对象的一个方法,用于在列表的末尾添加一个新的元素。当使用这个方法时,你实际上是在修改列表对象本身,而不是创建一个新的列表。因为列表是可变的,所以任何引用这个列表的变量都会看到这个变化
例如:

my_list = [1, 2, 3]
another_ref = my_list
another_ref.append(4)
print(my_list)  # 输出 [1, 2, 3, 4]

在这个例子中,my_listanother_ref 都引用同一个列表对象。当通过 another_ref 调用 .append() 方法时,实际上是在修改这个列表对象,所以 my_list 也会反映出这个变化

2.1.2 赋值操作

赋值操作,如 a = b,是将变量 a 设置为引用变量 b 所引用的对象。如果 b 引用的是不可变对象(如整数、字符串、元组等),则 a = new_value 不会影响 b,因为不可变对象的赋值实际上是创建一个新的对象
例如:

a = [1, 2, 3]
b = a
b = [4, 5, 6]
print(a)  # 输出 [1, 2, 3]

在这个例子中,b 最初引用了 a 所引用的列表。然而,当 b 被赋予一个新的列表 [4, 5, 6] 时,b 开始引用一个全新的列表对象,而 a 仍然引用原始的列表 [1, 2, 3]。赋值操作没有修改原始列表,而是改变了 b 的引用

2.1.3 总结

  • .append() 方法修改了原始对象(在这种情况下是列表),所以所有引用该对象的变量都会看到变化
  • 赋值操作会改变变量所引用的对象,但它不会修改原始对象。如果赋值的是不可变对象,那么原始对象保持不变;如果赋值的是可变对象,那么原始对象不会被修改,而是变量引用了新的对象
    这就是为什么 .append() 可以改变外部变量所引用的列表,而赋值操作通常不会改变外部变量所引用的对象的原因

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

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

相关文章

通过freepbx搭建小型电话系统的过程

领导说公司的客服电话需要实现语音导航和非工作时间自动接听播放语音提示的功能。任务自然落到了伟大的程序员的头上,本着为公司节约成本原则遂百度了一番,找到了asterisk 和freeswitch两个比较流行的电话系统。经过对比和考虑公司的情况选择了asterisk系…

STM32 通用定时器

一、概述 STM32内部集成了多个定时/计数器,根据型号不同,STM32系列芯片最多包含8个定时/计数器。其中,TIM6、TIM7为基本定时器,TIM2~TIM5为通用定时器,TIM1、TIM8为高级控制定时器。 1.定时器的类型 基本定时器通用定…

C/C++ 中的未定义行为(Undefined Behavior, UB)

0. 简介 在 C/C 编程中,理解未定义行为(UB)及其相关概念至关重要。本文将对未定义行为进行详细解析,并通过实例展示其影响与处理方法。 1. 概念辨析 在 C/C 中,未定义行为容易与以下两个概念混淆: 1.1 …

【Spring】Spring MVC的项目准备和连接建立

文章目录 1. 什么是 Spring Web MVC1.1 MVC 定义1.2 什么是 Spring MVC 2. 学习 Spring MVC2.1 项目准备2.2 建立连接 1. 什么是 Spring Web MVC Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从已开是就包含在 Spring 框架中。它的正式名称“Spring We…

【pytorch】张量求导

笔者看到了这篇文章,可以很好的解释张量的求导问题: 看到了上面这张图,可以说很好的表示了前向和反向的过程了。 补充几个细节 之前看李沐的d2l,一直不懂为什么矩阵计算时的一些奇奇怪怪的规定,比如为什么一个行向量…

github项目——gpt-pilot自动创建应用

今天扯一扯在github上看到的一个项目gpt-pilot,声称“首个AI程序员”。本来打算玩一下,结果需要配置大语言模型的API,并且只支持OpenAI和claude(Qwen呢)。有没有玩过的老哥说一下好不好用!!(对了…

【Postman】接口测试工具使用

干就完啦 Postman发送get请求案例1: Postman发送post请求案例2 Postman发送其他请求 学习目标:能够使用Postman发送get/post/put/delete请求并获取响应结果 Postman发送get请求 首先postman是一款接口调试工具,支持win,mac以及l…

Python | Leetcode Python题解之第456题132模式

题目: 题解: class Solution:def find132pattern(self, nums: List[int]) -> bool:candidate_i, candidate_j [-nums[0]], [-nums[0]]for v in nums[1:]:idx_i bisect.bisect_right(candidate_i, -v)idx_j bisect.bisect_left(candidate_j, -v)if…

Pandas -----------------------基础知识(六)

目录 数据类型 查看类型 类型转换 无法转换的值返回NaN 无法转换的值返回原值 datetime类型 datetime类型数据列作为df索引 Python中的timedelta类型 Pandas中的timedelta类型 pd.to_timedelta函数转换timedelta类型 timedelta类型数据作为df索引 分组groupby 分箱…

开发环境简单介绍

目录 开发环境keil的安装和使用 keil的介绍 keil的安装 keil的简单使用 STC-ISP的安装 STC-ISP简单介绍 开发环境测试 总结 开发环境keil的安装和使用 keil的介绍 Keil uVision5是一个集成开发环境(IDE),用于对嵌入式系统中的微控制器…

vue-scrollto实现页面组件锚点定位

文章目录 前言背景操作指南安装及配置步骤vue组件中使用 参考文章 前言 博主介绍:✌目前全网粉丝3W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、大数据…

Java | Leetcode Java题解之第454题四数相加II

题目&#xff1a; 题解&#xff1a; class Solution {public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {Map<Integer, Integer> countAB new HashMap<Integer, Integer>();for (int u : A) {for (int v : B) {countAB.put(u v, countAB.getOrDefa…

多模态—文字生成图片

DALL-E是一个用于文字生成图片的模型&#xff0c;这也是一个很好思路的模型。该模型的训练分为两个阶段&#xff1a; 第一阶段&#xff1a;图片经过编码器编码为图片向量&#xff0c;当然我们应该注意这个过程存在无损压缩&#xff08;图片假设200*200&#xff0c;如果用one-h…

VBA中类的解读及应用第十六讲:让文本框在激活时改变颜色(中)

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。 类&#xff0c;是非常抽象的&#xff0c;更具研究的价值。随着我们学习、应用VBA的深入&#xff0…

数据链路层(以太网简介)

一.以太网数据帧结构&#xff1a; 目的地址&#xff0c;源地址&#xff0c;类型这三个被称为帧头&#xff0c;数据则被称为载荷&#xff0c;CRC则被称为帧尾&#xff08;校验和&#xff09; 二.数据帧结构分析 1.目的地址和源地址 i.地址解释 这两个地址指的是mac地址&#x…

【AIGC】2022-NIPS-视频扩散模型

2022-NIPS-Video Diffusion Models 视频扩散模型摘要1. 引言2. 背景3. 视频扩散模型3.1. 重建引导采样以改进条件生成 4. 实验4.1. 无条件视频建模4.2. 视频预测4.3. 文本条件视频生成4.3.1 视频与图像建模的联合训练4.3.2 无分类器指导的效果4.3.3 更长序列的自回归视频扩展 5…

数通 2

一 网络层 数据传输中最大支持1518字节&#xff0c;所以超过这个一次传不过去&#xff0c;就要分开传&#xff0c;就像快递标记1/2, 2/2 。说明你有两包 下图例子解释了 identification 用于标识一台设备发送的数据 片偏移&#xff0c;就是 你 好 吗 三个分片谁先到达不一定&…

C语言 | Leetcode C语言题解之第457题环形数组是否存在循环

题目&#xff1a; 题解&#xff1a; int next(int* nums, int numsSize, int cur) {return ((cur nums[cur]) % numsSize numsSize) % numsSize; // 保证返回值在 [0,n) 中 }bool circularArrayLoop(int* nums, int numsSize) {for (int i 0; i < numsSize; i) {if (!n…

vue-live2d看板娘集成方案设计使用教程

文章目录 前言v1.1.x版本&#xff1a;vue集成看板娘&#xff08;暂不使用&#xff0c;在v1.2.x已替换&#xff09;集成看板娘实现看板娘拖拽效果方案资源备份存储 当前最新调研&#xff1a;2024.10.2开源方案1&#xff1a;OhMyLive2D&#xff08;推荐&#xff09;开源方案2&…

小米 MIX FOLD工程固件 更换字库修复分区 资源预览与刷写说明

小米 MIX FOLD机型代号 :cetus 该手机搭载骁龙888旗舰处理器 。对于一些因为字库问题损坏导致的故障,更换字库后要先刷写对应的工程底层修复固件。绑定cpu后在写入miui量产固件。 通过博文了解 1💝💝💝-----此机型工程固件的资源刷写注意事项 2💝💝💝-----此…