Python(21)--变量进阶

变量的进阶使用

  • 1变量引用
  • 2可变、不可变数据类型
  • 3局部变量和全局变量
  • 4.Tips

本系列博文来自学习《Python基础视频教程》笔记整理,视屏教程连接地址:http://yun.itheima.com/course/273.html
在博文:https://blog.csdn.net/sinat_40624829/article/details/89555165中简单的介绍了变量的使用之后,本博文主要总结变量的进阶使用。

1变量引用

变量和数据保存在内存,两者分开保存。

数据保存在内存中的一个位置,变量中保存着数据在内存中的地址。

变量中记录着数据的地址,这就叫做引用。

使用id()查看变量中保存的数据在内存中的地址。

在这里插入图片描述
在这里插入图片描述
实参通过引用调用,调用函数时,本质上保存的是:实参保存数据的引用(地址),而不是实参保存的数据。

函数的返回值传递引用(地址)

2可变、不可变数据类型

不可变数据类型:数字,字符串,元组
可变数据类型:列表、字典

a=1

一旦在某一个内存单元中指定了一个数字,这个单元中的数字就不能变了,但是a可以指向不同的地址,就好像a代表的数字在变一样。

a=“hello”

不可变

a=[1,2,3]

可变,可以通过方法A.append/A.pop来修改列表内容。

a=[3,2,1]

不是在修改原来的列表,而是新建了一个列表

对列表和字典操作:赋值语句会修改变量的引用

在这里插入图片描述)
在这里插入图片描述)
字典的Key不能是可变类型:s数字、元素、字符串可以作为键,列表字典不行,否则会报错。
在这里插入图片描述)
在这里插入图片描述)

报错信息:unhashable
哈希:看做一个函数,传入一个不可变数据类型,并且返回一个结果,提取数据的特征码,如果传递的内容是相同的,就能够返回相同的结果,如果传递的内容是不同的能够返回不同的结果。Hash函数只能接受一个不可变数据类型作为参数,不能接受可变类型参数。
在这里插入图片描述
在python设置字典键值时,为了后续增删查改的方便,解释器会对key进行hash操作,以决定如何在内存中保存字典数据。

3局部变量和全局变量

局部变量:函数内部定义的变量,只能在定义它的函数中使用
全局变量:函数定义的变量,能够在所有函数中都使用

温馨提示;在其他编程语言中,不推荐使用全局变量,–可变范围大,导致函数不好维护,
在Python中有特定的设置,来避免一些问题。函数中要使用变量的时候,就近查找原则,找到就用。

3.1局部变量:临时保存一个函数内部使用的数据。
1.生命周期:创建到消亡,生命周期内才能使用变量。
2.使用细节:不同的函数内部,定义了相同名字变量,相互之间使用互不干扰。

3.2全局变量:
1.使用细节: 在函数内部,可以通过变量的引用获取对应的数据,但是不允许直接修改全局变量的引用。也就是只能用,不能对其使用赋值操作。

num=10
def demo_one():# 希望修改全局变量的值# 在python函数中不允许修改全局变量的值# 如果使用赋值语句,会在函数内部定义一个局部变量num = 99print("demo_one =>%d" %num)
def demo_two():print("demo_two=>%d" % num)
demo_one()
demo_two()

输出:

demo_one =>99
demo_two=>10

2.在函数内部来修改全局变量的值:global声明全局变量

num=10
def demo_one():# 希望修改全局变量的值# 在python函数中不允许修改全局变量的值# 如果使用赋值语句,会在函数内部定义一个局部变量# 声明一下,就能够说后面的变量是全局变量,就不会创建一个局部变量global numnum = 99print("demo_one =>%d" %num)
def demo_two():print("demo_two=>%d" % num)
demo_one()
demo_two()

输出:

demo_one =>99
demo_two=>99

3.全局变量定义的位置:在开发时,把所有的全局变量定义所有函数的上方,就可以保证所有的函数都能正常访访问所有的全局变量。

4.全局变量命名:不同公司对于全局变量的标记有不同的规则;在变量名前面增加gl_或者g_(到新的公司工作,可以问一下,领导全局变量的命名规则,可以显得你有开发经验)

4.Tips

1.Pycharm调试的小技巧:左下角的调试模块跳转。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.Python代码结构:

shebang
import
全局变量
函数定义
执行代码

3.程序执行的顺序要清楚,老师每次说的时候大家都觉得很简单,但是在关键时刻才知道平时积累的重要性.

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

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

相关文章

HTTP 响应代码全集

HTTP 响应状态代码指示特定 http 请求是否已成功完成。响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599)。状态代码由 section 10 of RFC 2616定义 信息响应 …

机器学习知识总结系列-机器学习中的数学-矩阵(1-3-2)

矩阵 SVD 矩阵的乘法状态转移矩阵状态转移矩阵特征值和特征向量 对称阵 正交阵 正定阵数据白化矩阵求导 向量对向量求导 标量对向量求导 标量对矩阵求导一.矩阵1.1 SVD奇异值分解(Singular Value Decomposition),假设A是一个mn阶矩阵&#xf…

阿里Java编程规约(注释)提炼

【强制】类、类属性、类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式,不得使用 // xxx 方式。 说明:在 IDE 编辑窗口中,Javadoc 方式会提示相关注释,生成 Javadoc 可以正确输出相应注释;在 IDE 中…

Python面试题-交换两个数字的三种方法

Python实现两个数字交换解法1解法2解法3a6 b100 解法1 使用其他变量,最通用的方法 ca ab bc 解法2 不使用其他变量,利算法节省内存空间 aab ba-b aa-b 解法3 python 专有 a,b(b,a) #等号右边是一个元组 或者可以写为: a,bb,a print(a,b)

面试中海量数据处理总结

教你如何迅速秒杀掉:99%的海量数据处理面试题 前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获&…

redis——旧版复制

Redis 的复制功能分为同步(sync)和命令传播(command propagate)两个操作: 同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态。命令传播操作用于在主服务器的数据库状态被修改, 导致…

Linux(3)-网-ifconfig,ping,ssh

终端命令网-ping,ssh1. ifconfig -a2. ping3. ssh3.1安装3.2 连接3.3 配置登入别名防火墙端口号,todo1. ifconfig -a 查看IP地址, 还可以用于配置网口。 ifconfig -a 2. ping ping命令: 检测到IP地址的连接是否正常。命令开始后由本机发送数据包a&…

redis——相关问题汇总

什么是redis? Redis 本质上是一个 Key-Value 类型的内存数据库, 整个数据库加载在内存当中进行操作, 定期通过异步操作把数据库数据 flush 到硬盘上进行保存。 因为是纯内存操作, Redis 的性能非常出色, 每秒可以处理…

一文搞定面试中的二叉树问题

一文搞定面试中的二叉树问题 版权所有,转载请注明出处,谢谢! http://blog.csdn.net/walkinginthewind/article/details/7518888 树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点…

无数踩坑系列(1)--Brightness Controller

Brightness Controller1.尝试找回系统自带亮度调节条1.1 配置grub文件,无效1.2 使用命令调节屏幕亮度,无效2.安装应用程序Brightness Controller2.1许多博文都写出了如下方案,无效:2.2 github 手动安装https://github.com/LordAmi…

springboot2——MyBatis入门

原生缺陷: 数据库dao层操作缺陷: ①jdbc的增删改查代码的冗余过大,查询的时候需要遍历。 ②Sql语句和数据库相关参数和代码的耦合性过高。 解决:使用Mybatis 业务层缺陷: ①业务层和数据…

面试--Linux命令总结

显示目录和文件的命令 Ls:用于查看所有文件夹的命令。 Dir:用于显示指定文件夹和目录的命令 Tree: 以树状图列出目录内容 Du:显示目录或文件大小 修改目录,文件权限和属主及数组命令 Chmod:用于改变指定…

Linux(4)-资源-du,top,free,gnome

Linux终端命令1.磁盘资源1.1 df -hl1.2 du1.3 统计文件数量2.缓存资源2.1 top2.2 free -m3.Gnome3.1系统监视器-gnome-system-monitor3.2 截屏--screenshot查看文件系统资源的一些命令1.磁盘资源 1.1 df -hl 查看分区磁盘使情况 硬盘空间不够时,跑程序会报错&…

redis——Java整合

redis官网 微软写的windows下的redis 我们下载第一个 额案后基本一路默认就行了 安装后&#xff0c;服务自动启动&#xff0c;以后也不用自动启动。 出现这个表示我们连接上了。 redis命令参考链接 Spring整合Redis 引入依赖 - spring-boot-starter-data-redis <depend…

无限踩坑系列(4)-远程登入服务器

远程操作服务器1.远程上传/下载命令&#xff08;文件夹/文件&#xff09;2.文本编辑vim3.一直保持服务器登入状态4.虚拟终端screenssh远程登入服务器&#xff0c;没有图形界面&#xff0c;只能在终端中操作文件与文件夹。本文总结了远程登入服务器过程中用到的一些命令。1.远程…

程序员不成熟的若干个特征

做我们这个项目也是一样&#xff0c;很多人来做这个生意&#xff0c;开始没有什么成绩&#xff0c;就想着要放弃&#xff0c;有的人一个月放弃&#xff0c;有的人三个月放弃&#xff0c;有的人半年放弃&#xff0c;有的人一年放 弃&#xff0c;我不明白人们为什么轻易放弃这个趋…

一文理解KMP算法

一文理解KMP算法 作者&#xff1a;July 时间&#xff1a;最初写于2011年12月&#xff0c;2014年7月21日晚10点 全部删除重写成此文&#xff0c;随后的半个多月不断反复改进。后收录于新书《编程之法&#xff1a;面试和算法心得》第4.4节中。 1. 引言 本KMP原文最初写于2年多前的…

小猫的java基础知识点汇总(下)

1、线程和进程有什么区别&#xff1f; 进程是操作系统资源分配的基本单位&#xff0c;而线程是任务调度和执行的基本单位 线程是进程的子集&#xff0c;一个进程可以有很多线程&#xff0c;每条线程并行执行不同的任务。 不同的进程使用不同的内存空间&#xff0c;而所有的线…

无数踩坑系列(3)-配置pytorch

配置pytorch环境1. 命令一键式安装2.源码安装问题1问题2问题3问题43.克隆一个已有环境&#xff0c;带pytorch4.GPU驱动版本不对在实际开发中&#xff0c;想要在自己的机子上跑别人的代码&#xff1b;或者&#xff0c;在新的机子上跑自己的代码&#xff0c;总是面临着环境配置的…

小猫的java基础知识点汇总(上)

1、一个".java"源文件中是否可以包括多个类&#xff08;不是内部类&#xff09;&#xff1f;有什么限制&#xff1f; 可以有多个类&#xff0c;但只能有一个public的类&#xff0c;并且public的类名必须与文件名相一致。 2、short s1 1; s1 s11; 有没有错&#xff…