python的注释、变量、常量基础
一.注释
1.什么是注释
- 注释就是对代码的解释说明,注释的内容不会被当作代码运行
2.为什么要注释
- 增强代码的可读性
3.怎么用注释?
- 代码注释单行和多行注释
- 单行注释用#号,可以跟在代码的正上方或正后方
- 多行注释可以用三对引号(单双都行)""" """
- pycharm注释快捷键
ctrl + ?
4.代码注释的原则:
- 不用全部加注释,只需要为自己觉得重要或不好理解的部分加注释即可
- 注释可以用中文或英文,但不要拼音
二.变量
1.什么是变量?
变量就是可以变化的量,量指的是事物的状态,比如人的年龄、性别,游戏角色的等级、金钱等等
2.为什么要有变量?
为了让计算机能够像人一样去记忆事物的某种状态,并且状态是可以发生变化的。
详细地说: 程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态,以及状态的变化。
3.怎么使用变量(先定义、后使用)
3.1 变量的定义与使用
变量的定义由三部分组成,如下图
日常生活中:
姓名:Jason
年龄:18
爱好:学习
程序中:
username = 'jason'
age = 18
hobby = 'music'
语法格式
username = 'jason'
变量名 赋值符号 变量值
解释器执行到变量定义的代码时会申请内存空间存放变量值,然后将变量值的内存地址绑定给变量名,以变量的定义age=18为例,如下图
底层原理(必会!!!)
遇到赋值符号先看符号右边的再看左边的
age = 18
1.在内存空间中申请一块内存空间存储18
2.将18所在的内存空间地址绑定给变量名age
3.之后如果要访问18就通过变量名age访问即可
通过变量名即可引用到对应的值,用print(age)即可验证
3.2 变量名的命名规范
变量名的命名应该见名知意
如果我们要存储的数据18代表的是一个人的年龄,那么变量名推荐命名为age
age = 18
如果我们要存储的数据18代表的是一个人的等级,那么变量名推荐命名为level
level = 18
1.变量名只能由数字、字母、下划线任意组合
user@name(不对)、_(可以)、pwd_123_aaa(可以)
2.变量名不能以数字开头,下划线建议不要开头因为有特殊含义
3.变量名不能与关键字冲突,比如print就不能是变量名
4.变量名的命名一定要做到见名知意,这个是核心。(重要)
3.3 变量名的命名风格
1.驼峰体
大驼峰 # 所有的单词首字母大写
UserNameFromDb
小驼峰 # 第一首字母小写其余首字母大写
userNameFromDB
JavaScript推荐使用驼峰体
-
下划线 # 单词与单词之间的下划线隔开
user_name_from_db
python推荐使用下划线
3.4 变量三要素
1.变量的值
2.变量的内存地址
3.变量的数据类型
name = 'jason'
print(name) # 值
print(id(name)) # 一串数字 相当于是内存地址编号
print(type(name)) # 数据类型 <class 'str'>
一个变量名只能指向一个内存地址
一个内存地址可以有多个变量名指向
三. 常量
3.1 什么是常量?
常量是值在程序运行过程种不会改变的量
3.2 为什么要有常量?
在程序运行过程种,有些值是固定的、不应该被改变的,比如圆周率3.1415926......
3.3 怎么使用常量
在python中没有真正意义上的常量 我们墨守成规的将全大写的变量看成是常量
HOST = '127.0.0.1' # 一般情况下在配置文件中使用较多
在其他编程语言中是存在真正意义上的常量 定义了就无法修改
const pi = 3.14 # 定义常量
pi = 4 # 不支持修改
四. 垃圾回收机制
4.1 什么是垃圾回收机制?
垃圾回收机制(简称GC)是Python解释器自带一种机制,专门用来回收不可用的变量值所占用的内存空间
4.2 为什么要用垃圾回收机制?
程序运行过程中会申请大量的内存空间,而对于一些无用的内存空间如果不及时清理的话会导致内存使用殆尽(内存溢出),导致程序崩溃,因此管理内存是一件重要且繁杂的事情,而python解释器自带的垃圾回收机制把程序员从繁杂的内存管理中解放出来。
4.3 垃圾回收机制原理分析
-
引用计数
内存中变量值身上有几个变量名绑定引用计数就是几,只要为0就是垃圾
-
标记清除
当内存即将沾满的时候 python会自动暂停程序的执行 从头到尾将内存中数据进行扫描
并打上标记 之后一次性清除掉标记的数据 -
分代回收
分代回收是一种以空间换时间的操作方式,Python将内存根据对象的存活时间划分为不同的集合,每个集合称为一个代,Python将内存分为了3“代”,分别为新生代(第0代)、青春代(第1代)、老年代(第2代),他们对应的是3个链表,它们的垃圾收集频率与对象的存活时间的增大而减小。新创建的对象都会分配在新生代,新生代链表的总数达到上限时,Python垃圾收集机制就会被触发,把那些可以被回收的对象回收掉,而那些不会回收的对象就会被移到青春代去,依此类推,老年代中的对象是存活时间最久的对象,甚至是存活于整个系统的生命周期内。同时,分代回收是建立在标记清除技术基础之上。分代回收同样作为Python的辅助垃圾收集技术处理那些容器对象。