Python:学习笔记之变量
01.变量的引用
- 变量 和 数据 都是保存在内存中的。
- 在Python中,函数的参数传递以及返回值都是靠引用传递的。
1.1 引用的概念
在python中
- 变量 和 数据 是分开存储的
- 数据 保存在内存中的一个位置
- 变量 中保存着数据在内存中的地址
- 变量 中 记录数据的地址,就叫做引用
- 使用id()函数可以查看变量中保存数据所在的 地址内存
如图:
注意:如图可见,如果变量已经被定义,当给一个变量赋值的时候,本质上是修改了数据的引用。变量不再对之前的数据引用,改为对新赋值数据的引用。
1.2 变量引用的示例
在Python中,变量的名字类似于便签纸贴在数据上。
- 定义一个整数变量a,并赋值为1。
- 将变量a赋值为2。
- 定义一个整数变量b,并把a的值赋值给b。
1.3 函数中的参数和返回值的传递
由图中代码运行结果可知,在Python中,调用函数的时候,本质上传递的是实参保存数据的引用,而不是实参保存的数据。返回数值的时候,返回的也是数据的引用,而不是数据本身。
即函数的实参/返回值都是靠引用来传递的。
02. 可变和不可变类型
- 不可变类型,内存中的数据不允许被修改
- 数字类型 int、bool、float、complex、long(2,x)
- 字符串 str
- 元组 tuple - 可变类型,内存中的数据可以被修改
- 列表 list
- 字典 dict
注意:
- 可变类型的数据变化,只能通过 方法 来实现。
- 如果给一个可变类型的变量,引用会修改
- 变量 不再 对之前的数据引用
- 变量 改为 对新赋值的数据的引用
对列表的操作:
①使用方法
②重新赋值
对字典的操作
①使用方法
注意:字典的key只能使用不可变类型的数据
②重新赋值
03. 局部变量和全局变量
- 局部变量 是在 函数内部定义的变量,只能在函数内部使用
- 全局变量 是在 函数外部定义的变量(没有定义在某一个函数内),所有函数内部都可以使用这个变量
3.1 局部变量
- 局部变量 是在 函数内部 定义的变量,只能在函数内部使用
- 函数执行后,函数内部的局部变量,会被系统回收
- 不同的函数,可以定义相同的局部变量,但是各自使用各自的,不会产生影响
局部变量的作用
- 在函数内部使用,临时 保存 函数内部需要使用的数据
如图,局部变量只能在函数内部调用。
局部变量的生命周期
- 所谓生命周期就是变量从被创建到被系统回收的过程
- 局部变量在函数执行的时候才会被创建
- 局函数执行结束后局部变量被系统回收
- 局部变量在生命周期内,可以用来存储函数内部临时使用到的数据
利用Pycharm调试工具可以清晰的看到,num变量只有在使用的时候才会被创建,函数调用完成后,会被系统回收:
第一步: 准备调用函数
第二步: 进入函数
第三步:执行完num行代码后, 创建num
第四步: 函数执行完成后,变量num死亡
不同变量中同名变量互不影响
如图,在不同函数中,同名变量的使用互不影响。
3.2 全局变量
- 全局变量是在函数外部定义的变量,所有函数内部都可以使用这个变量
如图,全局变量在所有位置都可以使用。在函数内部调用全局变量的时候,会首先寻找局部变量比对,如果没有的话,再寻找全局变量。
在Pycharm中,可以利用单步执行,清晰的观察到在demo2()输出函数前,num被局部变量赋值为20输出。
注意:
- 在python中,函数内部可以通过全局变量的引用获取对应的数据
- 但是,不允许直接修改全局变量的引用——即使用赋值语句修改全局变量的值
如在下图中,demo2()中的num修改并未修改全局变量的值,只是相当于在demo2()中定义了局部变量num。
在函数中修改全局变量的值
- 如果想在函数中修改全局变量,需要使用global进行声明,告诉python解释器,某变量为全局变量。
如图,在demo2()函数中,首先使用global告诉pycharm编译器,num为全局变量,再进行修改后,即对全局变量的值进行的修改。而此时,不会在demo2()中创建局部变量了。
注意:
我们在使用全局变量的时候,要在函数调用前,定义好函数内部所需要的全局变量。
最好在开发时,把模块中所有的全局变量,定义在所有函数上方,可以保证所有函数都能正常访问每一个全局变量。
如下图,我们在函数调用前定义title_01、title_02,在函数内部可以正常使用,可是在函数调用后定义title_03,虽然在代码书写上没有错误,可是在执行后会报错。
如何给全局变量命名?
- 为了避免局部变量和全局变量出现混淆,在定义全局变量的时候,有些公司会有一些开发要求,比如:
- 全局变量名前应该增加g_或者gl_的前缀
- 具体情况具体分析
Python:学习笔记之变量相关推荐
- Python学习笔记之变量
1.变量: 首先,新建一个文件为hello.py,添加一个变量并打印出来,具体代码如下: #python变量学习 sex='男' print(sex)sex="女" print(s ...
- 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符
Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...
- Python学习笔记(十一)
Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...
- Python学习笔记一简介及安装配置
Python学习笔记一 参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e54 ...
- python学习笔记目录
人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...
- python 学习笔记 12 -- 写一个脚本获取城市天气信息
近期在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么可以显示后最重要的就是显示什么的问题了. 最easy想到的就是显示时间啊,CPU利用率啊.IP地址之类的.那么我认为呢,假设可以显示当 ...
- python基本语法语句-python学习笔记:基本语法
原标题:python学习笔记:基本语法 缩进:必须使用4个空格来表示每级缩进,支持Tab字符 if语句,经常与else, elif(相当于else if) 配合使用. for语句,迭代器,依次处理迭代 ...
- 廖Python学习笔记一
1. 廖Python学习笔记 大的分类 如函数 用二级标题,下面的用三级 如输入输出 1.1.1. 输入输出 1.1.1.1. 输出 用 print() 在括号里加上字符串,就可以向屏幕上输出指定的文 ...
- Python学习笔记(六)
1. IO编程 1.1 文件读写 1.2 StringIO和BytesIO 1.3 操作文件和目录 1.4 序列化 2. 进程和线程 2.1 多进程 2.2 多线程 2.3 ThreadLocal 2 ...
- OpenCV之Python学习笔记(1)(2): 图像的载入、显示和保存 图像元素的访问、通道分离与合并
OpenCV之Python学习笔记 一直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看到一本国外的新书< ...
最新文章
- GDI+ Bitmap与WPF BitmapImage的相互转换
- 归并排序-python
- 使用单个innodb表,实现锁,防止游戏被刷物品或者其它资源!
- Item category dropdown list的determine - filtering 逻辑
- html5绘制矩形动画,HTML5下绘制矩形教程
- php操作mysql数据库
- python 示例_Python使用示例设置add()方法
- 宝塔linux_Linux虚拟机上快速搭建宝塔 部署PHP运行环境
- jQuery----各版本
- 在酷热的就业天气寻找几丝凉意
- C# 异步工具类 及一点小小的重构经验
- 电磁场有限元基本原理(5)
- 关于线程耗尽导致请求超时系统假死的思考
- oracle复杂sql 分页,oracle sql 分页
- 中国互联网流行文化缔造者百度贴吧,如何拥抱新时代?
- 曾经的付费视频课持续放出,以及【直播预告】
- Samba 服务使用的端口和协议
- 警告!从ISO映像创建的U盘可能无法完全启动!Unknown引导扇区不支持NTFS文件系统
- python实现批量注册网站用户
- c语言编写邮箱注册登录的程序,c语言实现邮箱地址验证
热门文章
- 1.3 Zend_Acl (3)
- 3. laravel 包含头尾文件
- 智慧屏鸿蒙系统简介,首发鸿蒙系统,荣耀智慧屏是何方神圣?
- 问题:jquery中的change()事件,以及jquery中的prop()事件与attr()事件的区别
- Entity Framework 6+ 连接Mysql
- mysql命令行闪退解决办法。
- Atitit 发帖机系列(8) 词法分析器v5 版本新特性说明)
- 关于web开发的一点理解
- 如何正确复制CSDN文章到自己的博客
- pom.xml mvn package expected START_TAG or END_TAG not TEXT