Python的注释、变量学习笔记

blog 253

0x01 注释

0x01.1 注释的书写

在Python中使用 # 开头表示单行注释。该注释只对当前行有效。在Python中我们使用一对三个单引号或者一对三个双引号表示多行注释

下面看示例:

Python的注释、变量学习笔记

0x01.2 注释的作用

被注释掉的内容,不参与程序的运行。当我们写的代码比较复杂,为了更好的理解某个代码块的作用。我们需要在此代码块的上面添加注释。以便于后续的维护。还有就是当我们检查程序错误的时候。我们可以通过注释去排错

0x02 变量

0x02.1 什么是变量?

# 变量是一个可以变化的量。不是固定不变的。变量在应用场景比如说是游戏中的等级和金币数量,现实生活中的年龄。

0x02.2 为什么要有变量?

# 为了让计算机像人一样去记忆一些事件的状态。
# 程序的执行其实就是一系列的变化,变是程序执行的直接体现,所以我们需要一种机制能够反映或者保存程序执行的状态、以及变化。

0x02.3 怎么使用变量?

原则:先定义、后引用

Python的注释、变量学习笔记
name = 'x1ong'  #  先定义
age = 18        #  先定义

print(name)    #  后引用
print(age)     #  后引用
Python的注释、变量学习笔记
定义变量时,内存中发生了什么

此时Python程序会在内存中开了一个房间。将值’x1ong‘放到了该房间。而这个房间的门牌号就是name。我们后续可以通过name这个房间号(变量)去找到其对应的值即'x1ong'

因此我们需要通过引用变量name从而找到值x1ong

Python的注释、变量学习笔记

0x02.4 变量的内存管理

内存管理之垃圾回收机制:

垃圾:当一个变量被绑定的变量名的个数为0时,该值就无法被变量所调用。此时它就是一个垃圾。

引用计数增加:

x = 10   #  10的引用计数为1
y = x    #  10的引用计数为2 
z = x    #  10的引用计数为3 
Python的注释、变量学习笔记

此时在内存中,10这个值同时指向了三个变量。即xy以及z。那么此时引用计数就为3

引用计数减少:

我们可以使用del方法解除变量和值之间的绑定关系。

x = 10   #  10的引用计数为1 
y = x    #  10的引用计数为2 
z = x    #  10的引用计数为3 

del x    #  解除变量名x与10的绑定。此时10的引用计数为2 
# print(x)  #  此时再次调用会报 name 'x' is not defined 变量x未定义错误。
del y    #  解除变量名y与10的绑定关系。此时10的引用计数为1
del z    #  解除变量名z与10的绑定关系。此时10的引用计数为0

Python程序是自上到下执行的,如果遇到一个已经被赋值的变量,之后又在下面的代码中仍然继续被赋值,由于程序是自上到下执行的,它会覆盖掉前面变量值的内容。保留后者赋值的值。此时旧的值如果引用为0,则会被垃圾回收机制自动回收

demo = 'test'

demo = 'the is test text'
print(demo)    #   运行结果:  the is test text  

0x02.5 变量三大组成部分

#  1. 变量名 变量名是指向等号右边值的内存地址。用来访问等号右侧的值。
#  2. 赋值符号  将右边值的内存地址绑定给变量名
#  3. 变量值 表示记录事件的状态

0x02.6 变量名的命名规范

1. 变量名只能是字母、数字或下划线的任意组合
2. 变量名不能以数字开头。
3. 关键字不能声明为变量名,常用关键字如下:
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from','global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

PS: 在Python中不建议使用驼峰命名法去命名变量名。多个单词建议使用下划线进行分割。

例如:

my_name = 'x1ong'
my_age = 17 

变量在命名中,尽量本着见名知意的原则,去命名某个变量,不建议使用中文和拼音作为变量名。应当使用英语单词作为变量的名称。在保证见名知意的情况下尽量简短变量名。

例如:

name = 'x1ong' 
age = 17
addr = '河南'

下面介绍两种命名风格:

  1. 多个单词之间使用下划线进行分割(在Python中变量名建议使用该命名法)
my_name = 'x1ong'
my_age = 12
  1. 使用驼峰命名法(在Python中变量名不建议这么命名)
# 小驼峰命名法:第一个单词首字母小写。之后的单词开头第一个字母使用大写。
myName = 'x1ong'
myAge = 17

# 大驼峰命名法:每个单词的首字母大写。
MyName = 'x1ong'
MyAge = 17

0x02.7 变量值的三大特性

#  id    #   反映的是变量在内存中的唯一编号,内存地址不同id肯定不同

#  type   #  变量值的类型

#  value    #  变量的值
a = 'hello'
print(id(a))      #  4334676800  该id值是通过内存地址计算得出。在某种意义上我们可以理解为内存地址。
b  = 'hello'
print(type(b))   #   <type 'str'>  通过type方法可以查看某个变量值的数据类型。
c = 'x1ong'
print(c)         #  x1ong   

0x03 身份运算is与==

0x03 is与==学习

a = 'name:x1ong'
b = 'name:x1ong'

print(id(a),id(b))

以上代码块在vscode编辑器中的运行结果:

Python的注释、变量学习笔记

可以发现,他们二者的id值是一致的。

但是放到正儿八经的Python解释器中执行的结果如下:

Python的注释、变量学习笔记

可以发现,他们的id值是不一致的。

这就说明了,在Python中,每个变量被赋值的时候,都会重新开通一个内存空间。而vscode编辑器或者Pycharm编辑器在运行的时候,则做了对应的优化。将值一致的。都指向同一个内存空间。

以下为Python解释器中遇到相同值的处理方法:

Python的注释、变量学习笔记

即每个变量在赋值的时候,都会开通新的内存空间。即使他们的值都一致。

以下为VSCODE编辑器遇到相同值的处理方法:

Python的注释、变量学习笔记

VSCODE在遇到当一个变量被赋值了之前被其他变量赋值过的值。那么它会将这个变量,指向同一个内存空间。

is 身份运算符比较两个变量的id值是否一致。一致则结果为True。否则为Fasle

== 比较两个变量的值是否相等,相等则结果为True。否则False (该比较也比较两者的数据类型,数据类型不同则为False)

a = 'name:x1ong'
b = 'name:x1ong'
#  is  身份运算符比较两个变量的id值是否一致。一致则结果为True。否则为Fasle
#  ==   比较两个变量的值是否相等,相等则结果为True。否则False   (该比较也比较两者的数据类型,数据类型不同则为False)
print(a is b)       // False 
print(a == b)       // True

a = '13123123123123'
b = 13123123123123
print(a == b)  // 字符串和数字类型相比 结果为 False

以上代码块在Python解释器中运行则为a is b 的结果为False,其中的a == b 的结果为True

但是在VSCODE中运行则两个都为True。而我们主要以Python解释器的结果为准

其实他们之间涉及到了类似小整数池的概念

0x03.2 小整数池(了解)

Python在进行内存优化的时候,将一些值提前存入到了内存中,也就是当Python启动的时候,某些值都已经存在了。当我们将该值赋值给一个变量的时候,就已经不会在申请内存空间了。而是直接调用我们内存中的对应的值。

它这个存储的区间为 -5 到 256 之间的数字。

Python的注释、变量学习笔记

可以看到,以上代码在Python解释器中。他们的id值是一致的。为什么呢?这就是因为值10在小整数池中。因此当我们赋值的时候,他们是直接将变量指向内存中已经存在的地址。

但是这个区间是-5 到 256 (包含256和-5)。如果超出了该范围,则两者的id值就产生了变化。

Python的注释、变量学习笔记

不光只有部分整数会提前存放在内存中。一些常见的字符串。同样也会存储在内存中。(但是这个范围就不得而知了)

Python的注释、变量学习笔记

而VSCODE和Pycharm等编辑器为了开发者体验更好。他们的整数池远远超出了Python解释器整数池的范围。(具体的范围也是不得而知)

Python的注释、变量学习笔记

0x04 常量

注意:在Python中是没有常量这个概念的。但是在程序开发过程中会涉及到常量的概念。

在Python中我们使用全大写字母表示一个常量

例如:

DATABASE_NAME = 'test'
DATABASE_USERNAME = 'root'

但是这只是某种约定。写给开发者所看的。告诉开发者这个是常量。是不能修改修改的量。但是开发者也可以不遵守这个约定。

声明:本文章所整理学习的知识全部由Egon老师传授

Egon老师知乎首页:https://www.zhihu.com/people/xiaoyuanqujing

分享