python中的传参(传副本)、传引用和全局变量与局部变量

文章目录

  • 前言
  • 1、全局变量与局部变量
  • 2、python函数的传参
    • 2.1 实参与形参
    • 2.2 可变数据与不可变数据
    • 2.3 传值(假的传值)与传引用
      • 2.3.1 传值(本质上还是传引用---由于python不可变数据的特性就变成和C语言里面传值的效果一样了)
        • 示例一:对于不可变数据类型,如果你将一个变量作为参数传递给函数,在函数内部对该参数进行修改不会影响到函数外部的原始变量。
        • 示例2:不要与有返回值混淆
        • 示例3:如果我非要让示例1输出4呢,这就要用全局变量
          • 方法1:在函数里面声明是全局变量(用global)
          • 方法二:类里面用self属性在函数里面定义变量(相当于也是在函数里面声明了是全局变量)
      • 2.3.2 传引用
    • 2.4 传值与传引用本质统一(重要)
      • 2.4.1 函数内部进行赋值操作会发生什么
      • 2.4.2 修改操作就舒服多了,随便造(当然别赋值哈哈哈)
  • 总结


前言

在python编程中函数的传参需要特别注意,有时会忘记,在这里写篇文章记录一下。每次查资料发现很多都是没有说明白的,作者自己都是稀里糊涂的。因此直接自己在这里写一篇注意一下。

1、全局变量与局部变量

在Python中,全局变量和局部变量是两种不同范围的变量。

(1) 全局变量

  • 在函数外部定义的变量称为全局变量。
  • 全局变量可以在程序的任何地方被访问,包括函数内部。
  • 在函数内部可以使用全局变量,但要使用global关键字声明才能修改全局变量的值。

(2) 局部变量

  • 在函数内部定义的变量称为局部变量。
  • 局部变量的作用域仅限于函数内部,外部无法直接访问。
  • 局部变量在函数执行结束后会被销毁,不能在函数外部访问。

下面是一个示例代码来演示全局变量和局部变量的用法:

# 全局变量
global_var = 10def my_function():# 局部变量local_var = 20# 调用函数
my_function()# 在函数外部访问全局变量
print("Global variable:", global_var)
# 试图在函数外部访问局部变量会引发 NameError
# print("Local variable:", local_var)

在这个示例中,global_var 是全局变量,在函数内外都可以访问。而 local_var 是在函数内部定义的局部变量,只能在函数内部访问。

2、python函数的传参

2.1 实参与形参

在函数的定义和调用中,会涉及到两个概念:实参(arguments)和形参(parameters)。

(1) 形参(Parameters):在函数定义中,形参是指在函数定义时用来接收传递给函数的值的变量。形参位于函数定义的括号内部,作为函数的输入。形参的值在函数调用时由实参提供。例如,在下面的函数定义中,x 就是一个形参:

def my_function(x):# do something with x

(2)实参(Arguments):在函数调用时,实参是指传递给函数的具体值或变量。实参是函数调用时提供给形参的值。实参可以是常量、变量、表达式或者其他函数的返回值。例如,在下面的函数调用中,10 是一个实参:

my_function(10)

在函数调用时,实参的值会被传递给函数中对应的形参,函数体内部可以使用这些值进行计算或者其他操作。

2.2 可变数据与不可变数据

数据类型描述
可变数据 (列表、字典、集合)指变量所指向的内存地址处的值是可以改变的
不可变数据(整数、浮点数、布尔类型、字符串、元组)指变量所指向的内存地址处的值是不可以改变的

【注1】:关于自定义类是可变数据还是不可变数据,这完全取决于我们的创建方式

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

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

相关文章

如何配置.gitignore文件

文章目录 如何配置.gitignore文件1..gitignore语法2.创建.gitignore文件所遵循的原则参考 如何配置.gitignore文件 在使用Git的时候,我们总会遇到不想要提交的文件或者文件夹,这时我们便可以通过配置.gitignore文件来让Git忽略我们项目中相应的文件或者…

16-NVS Iterators (迭代器)

ESP32-S3 NVS迭代器 什么是NVS迭代器?🤔 ESP32-S3的NVS库提供了迭代器,允许你根据指定的分区名称、命名空间和数据类型轮询NVS中存储的键值对。使用方法类似于c里的迭代器(iterator)用于遍历容器,而NVS的…

机器学习理论公式推导及原理—决策树

机器学习公式推导及原理—决策树 根据西瓜书中的公式与内容来进行推导和实现 算法原理 从逻辑角度,一堆if else语句的组合从几何角度,根据某种准则划分特征空间。最终目的:将样本越分越“纯。 信息熵的概念 自信息:是指随机变量…

【汇编语言】初识汇编

【汇编语言】初识汇编 文章目录 【汇编语言】初识汇编前言由机器语言到汇编语言机器语言与机器指令汇编语言与汇编指令汇编语言程序示例 计算机组成指令和数据的表示计算机的存储单元计算机的总线 内存读写与地址空间CPU对存储器的读写内存地址空间 总结 前言 为什么要学习汇编…

29. 【Android教程】折叠列表 ExpandableListView

本节学习一个可折叠的 ListView,可以用在一些需要分类的场景下。通过 ExpandableListView 我们可以首先在 ListView 上展示大的分类,当点击某个类别的时候再将 ListView 做一个展开,展示该类下的所有子类供用户选择。它与 ListView 的不同主要…

【八股文】Spring 谈谈你对AOP的理解

AOP AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传统 OOP(Object-Oriented Programming,面向对象编程)的补充。 面向对象是纵向继承,面向切面是横向抽取。 OOP思想是一种垂直纵向的继承体…

【Excel】使用VBA宏简单自定义Excel软件界面

改行做经济师学习Excel,偶有心得,摘录于此,备忘。 言简意赅,仅供自用。 1 实现效果 在Excel的左上角可添加按钮,该按钮的功能可由我们自己通过编写代码定义,能实现特定功能,并且在所有打开的…

攻防世界---reverse_re3

1.下载附件,先查壳:无壳 2.在IDA中分析,shiftfnf5,看到一串长得很像flag的flag 3.根据提示我们需要找到输入,再进行md5转换才能得到flag flag{md5(your input)} 4.双击这个句话,点进去想查看信息&#xff0…

hive搭建完整教学

目录 简介准备工作安装步骤(一)、下载hive包并解压到指定目录下(二)、设置环境变量(三)、下载MySQL驱动包到hive的lib目录下(四)、将hadoop的guava包拷贝到hive(五&#…

SS3D翻译

SS3D AbstractIntroductionRelated WorkFully-Supervised 3D Object DetectionWeakly/Semi-Supervised 3D Object DetectionSparsely-Supervised 2D Object Detection MethodOverall FrameworkArchitecture of DetectorMissing-Annotated Instance Mining Module 缺失注释实例挖…

什么是好用的人才测评系统?

对于企业HR来说,在人才测评是必不可少的工具,什么是好用的人才测评? 1、测评效果靠谱;2、操作实施简便。 人才测评的目的是为找到最适合企业的人选,测评就是一个方法,一个工具,能达到预期目的才…

【笔试强训】Day3 --- 简写单词 + dd爱框框 + 除2!

文章目录 1. 简写单词2. dd爱框框3. 除2! 1. 简写单词 【链接】:简写单词 解题思路:简单模拟题,主要是处理⼀下输⼊的问题。(也可以利用string类中的find函数,但时间复杂度会偏高) #include …

FreeRTOS之静态创建任务

1.在前面的文章中介绍了FreeRTOS的动态创建方法,本文介绍一下FreeRTOS的静态任务创建方法xTaskCreateStatic()。相比较动态任务创建过程,静态创创建任务的过程稍显复杂。主要步骤为: (1)配置相关的宏定义:…

16.4 冒泡排序

题目简介 排序动画模拟网站 phttps://www.cs.usfca.edugalles/visualization/ComparisonSort.htm 简洁版 #include <stdio.h> int main() {int a[10]{9,3,6,5,8,2,4,1,7,0};int n sizeof(a)/sizeof(int);int temp 0;for(int j0;j<n-1;j){ //外层循环循环9轮即可f…

【Matlab】Sobol灵敏度分析

计算一阶灵敏度与总灵敏度 参考链接 代码如下&#xff1a; 因为随机抽样&#xff0c;每次计算结果都不同 主函数 % function main clc clear close all %% 参数设置 n_p 4; % 待分析参数数目 n_base 2000; % 参数样本数目 N n_base*(n_p*21); % 模型/函数运行总次数 % 设…

怎么在本地debug使用idea计算对象内存

在工作的过程中&#xff0c;我们遇到一个觉得比较大的对象的时候&#xff0c;经常需要判断一个对象大小&#xff0c;以此来决定是将数据放在内存还是缓存来提升性能&#xff0c;我看到现在很多文章介绍的要么是不完善&#xff0c;要么是不够准确&#xff0c;因此打算自己写一篇…

java学习路线图(全面)

以下是详细的Java学习路线图&#xff0c;涵盖了从基础到高级的必备技能和知识。 基础知识 Java基础&#xff1a;学习Java的基本语法、数据类型、控制流程语句、数组、异常处理等。面向对象编程&#xff1a;深入理解类和对象、继承、多态、封装、接口和抽象类的概念。 工具和环…

API接口开发分享:API接口接入拼多多平台采集商品详情实时数据、获取商品销量、价格、库存、名称等数据,免费接入key获取示例

要接入拼多多平台的API接口采集商品详情数据、商品销量、价格、库存、名称等数据&#xff0c;首先需要注册一个API账号。用来请求调用该api。 接下来&#xff0c;你可以使用Python等编程语言调用拼多多的API接口。以下是一个使用Python调用拼多多API接口的示例&#xff1a; i…

K8S 哲学 - yaml文件

selector&#xff1a; Pod 对象不应该有 selector 字段。selector 字段通常用于 Service、Deployment、ReplicaSet 等对象&#xff0c;用于选择匹配的 Pod。在 Pod 对象中&#xff0c;这个字段是无效的 apiVersion: apps/v1 kind: Deployment metadata: name: gyk labels: …

48-PCIE转串口和并口电路设计

视频链接 PCIE转串口和并口电路设计01_哔哩哔哩_bilibili PCIe转串口和并口电路设计 1、PCIe转串并口电路设计基本介绍 2、PCIe转串口和并口的方案(京东) 2.1、PCIe转串口 2.1.1、ASIX (亚信)MCS9922-PCIe转2路RS232扩展卡 2.1.2、ASIX (亚信)MCS9900-PCIe转4路RS232扩展卡…