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

article/2024/5/21 20:39:49

文章目录

  • 前言
  • 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 可变数据与不可变数据

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

http://www.ngui.cc/article/show-2039027.html

相关文章

Docker(二)Docker+ server部署极简前端页面

本篇文章介绍如何使用 Dockerserver 将一个极简前端页面进行部署 1.本地运行一个简单的前端页面&#xff0c;再把它部署到服务器上 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&quo…

ofd在线转换,ofd转pfd,ofd用什么软件打开

随着信息技术的不断发展&#xff0c;电子文档在日常办公和学习中扮演着越来越重要的角色。然而&#xff0c;不同格式的电子文档之间往往存在兼容性问题&#xff0c;这给用户在查阅、编辑和共享文件时带来了诸多不便。 一、什么是ofd文件格式&#xff1f; OFD&#xff0c;全称为…

CentOS服务器安装宝塔(图文详解)

宝塔的操作其实就是类似于把linux的指令使用方式&#xff0c;通过宝塔这个第三方工具进行可视化展示&#xff0c;但其实&#xff0c;他还是在操作linux&#xff0c;只是不需要你去记那么多的指令&#xff0c;宝塔把大多数的工具都集成到自己里面&#xff0c;这样你就可以在宝塔…

分类网络总结

欢迎大家订阅我的专栏一起学习共同进步&#xff0c;主要针对25届应届毕业生 祝大家早日拿到offer&#xff01; lets go http://t.csdnimg.cn/dfcH3 目录 4. 经典分类网络与发展 4.1 AlexNet 4.2 VGGNet 4.3 GoogLeNet Inception 4.4 ResNet 4.5 DenseNet 4.6 MobileN…

尺取法知识点讲解

一、固定长度的情况&#xff1a; 最小和(sum) 输入N个数的数列&#xff0c;所有相邻的M个数的和共有N-M1个&#xff0c;求其中的最小值。 输入格式 第1行&#xff0c;2个整数N&#xff0c;M&#xff0c;范围在[3…100000]&#xff0c;N>M。 第2行&#xff0c;有N个正…

文本批量高效编辑管理,支持将文本进行自定义行数进行拆分,实现文本的高效管理

在信息爆炸的时代&#xff0c;文本文件的管理和编辑成为了许多工作和学习中不可或缺的一部分。面对大量的文本内容&#xff0c;如何高效地进行编辑和管理成为了一个挑战。现在&#xff0c;我们为您带来了一款强大的批量文本编辑管理工具&#xff0c;支持自定义行数拆分&#xf…

【华为OD机试】结队编程(贡献法计数—JavaPythonC++JS实现)

本文收录于专栏:算法之翼 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解代码C/C++题解代码JS题解代码四.代码讲解(Ja…

C语言-rand+srand+time的使用

1.随机数字的生成 rand 随机数字的生成需要rand&#xff0c;这里需要知道的是rand需要头文件是stdlib&#xff0c;也就是#include<stdlib.h>。 这里的循环可以用for 所以我们可以在主函数里面写出 #include<stdio.h> #include<stdlib.h>//rand头文件int …

Vivado综合属性SRL_STYLE怎么用?

“SRL_STYLE”属性是Vivado中用于控制移位寄存器&#xff08;Shift Register Logic, SRL&#xff09;映射方式的关键属性。 本文将详细介绍SRL_STYLE的工作原理、可选值及其在实际设计中的应用代码示例。 一、什么是SRL_STYLE&#xff1f; SRL_STYLE属性用于指导Vivado综合工…

Rabbit加密算法:性能与安全的完美结合

title: Rabbit加密算法&#xff1a;性能与安全的完美结合 date: 2024/4/19 19:51:30 updated: 2024/4/19 19:51:30 tags: Rabbit加密对称加密流密码密钥调度安全分析实际应用加密算法 第一章&#xff1a;引言 1. 加密算法的基本概念和应用 加密算法是一种通过对数据进行转换…
最新文章