美文网首页
百变星君之Python变量

百变星君之Python变量

作者: 后场技术 | 来源:发表于2017-07-29 14:18 被阅读0次

变量是什么

变量是一个计算程序用做存储信息所引用的。他们还提供一种标签数据与一个描述性的名称,所以我们的程序可以被读者和我们自己更清楚地理解。它有助于认为变量保存信息的容器。他们的唯一目的是标签和数据存储在内存中,这些数据将被你的程序所使用。

在计算机程序中,变量不仅可以是数字,还可以是任意数据类型, 在python中我们可以把各种类型的数据赋值给同一个变量,比如:

#!/usr/bin/env python3
# _*_ coding:utf-8 _*_
# Author: nockgod@gmail.com
# Date: 2017-07-28 10:30

# k1 存储内容为字符串"Good Boy"

k1 = 'Good Boy'
print(type(k1))
print("k1 output value is: %s" % k1)

print("****分割线****" * 8)

# K1 存储内容变为整形 100
k1 = 100
print(type(k1))
print("k1 output value is: %s" % k1)

运行结果为:

result.png

Python能自由改变变量类型的特征被称为动态类型。并不是所有的语言都支持动态类型。在静态类型的语言中,变量有事先说明好的类型。特定类型的数据必须存入特定类型的变量。相比于静态类型,动态类型显得更加灵活便利。

变量定义规范

声明变量

var.png
# _*_ coding:utf-8 _*_

name = "nock"

如上代码中声明了一个变量,变量名称为name,变量name的值为'nock'.

定义变量的规则

  • 变量名只能是字母数字下划线的任意组合
  • 变量名的第一个字符不能为数字

以下关键字不能声明为变量(因为会跟Python内置关键字冲突):

['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']

在Python3中 exec 不再是关键字,但 nonlocal 是一个新的关键字,还有一些这里就不一一枚举了。

**注:Python中变量对大小写敏感,也就是说Name和name是两个变量名

变量定义方式

驼峰写法:

CpuNumber = 8
CpuLoad = 5

下划线写法:

memory_used = 3
memory_free = 5

明眼人都能看出来下划线的方式更清晰,官方也是推荐使用下划线,当然你用驼峰法也是ok的,阿里的Python API接口示例变量名也是下划线定义,所以你应该选择哪种呢?

几个不好变量定义方式举例:

  • 变量名过长
  • 变量名意思表达不清晰
  • 变量名为中文或者拼音

所以在实际的生产中不要害怕变量名有一定的长度,表意一定要清晰,切记不要使用中文和拼音,不要让人家去猜你变量的意思,适当的时候要注释,代码不是写给你一个人看的哦!

变量赋值详解

我们上面已经简单的说了声明变量,下面我们详细看看Python的变量赋值和其存在形式

#!/usr/bin/env python3
# _*_ coding:utf-8 _*_
# Author: nockgod@gmail.com
# Date: 2017-07-28 10:30

Name = 'nock'
Phone = ’13681042939‘

解释:当Python解释器解析到 Name = 'nock'的时候会在内存中开辟一个空间存放'nock'字符串,然后Name变量指向存储'nock'字符串的内存地址。

在内存中表示如下:

memvar1.png

如果做了如下改变呢:

#!/usr/bin/env python3
# _*_ coding:utf-8 _*_
# Author: nockgod@gmail.com
# Date: 2017-07-28 10:30

Name = 'nock'

# 将变量Phone指向了Name变量的内存地址
Phone = Name

在内存中表示如下:


memvar2.png

我们再来变一下呢:

#!/usr/bin/env python3
# _*_ coding:utf-8 _*_
# Author: nockgod@gmail.com
# Date: 2017-07-28 10:30

Name = 'nock'

# 将变量Phone指向了Name变量的内存地址
Phone = Name

# 将变量Name指向改为'lucky',但是变量Phone并没有改变
Name = 'lucky'

在内存中表示如下:

memvar3.png

总结
其实变量名字我们可以想象为一个大厦里面各个房间的门牌标,有个门上可能贴着两个门牌标签,但是当里面的内容变了,它才代表是另外一个另外一个空间了。如果你的内容没有变化,你还是在固定的空间中。

垃圾回收机制

在Python基础中有一个比较重要的概念那就是垃圾回收机制,通常大家比较忽略这个概念,当然变量内存空间的回收也包括在里面,下面我们通过代码来验证一下:

>>> a = 1
>>> b = a
>>> id(a), id(b)
(4345374736, 4345374736)

如上所示,首先我们声明了变量a,且赋值为1,然后又声明变量b,设置b等于a,通过之前变量复制详解我们知道其实b和a指向了同一个内存空间,所以我们通过id()这个内置函数可以清楚的看到两个变量的内存地址区域是相同的。

我们再来看看如下代码示例:

>>> name = 'nock'
>>> name = 'lucky'
>>> print(name)
lucky

通过上面这个示例,我们可以大概的来理解一下垃圾回收机制是如何工作的:

  1. 创建一个变量name,指向'nock'的内存地址;
  2. 如果'nock'这个值之前没有在内存中创建,那么现在创建它,并让这个内存地址的引用数+1,此时等于1;
  3. 然后我们对变量name进行重新赋值,让其执行'lucky'的内存地址;
  4. 那么此时'nock'值的引用数现在就变成0了,当Python一旦检测到某个内存地址的引用数为0时,就会把这个内存地址给删掉,从而释放内存空间。
  5. 最后变量name执行了'lucky’的内存地址空间,所以name就等于'lucky'了。

当然这里我们也可以主动清理变量释放内存,在Python中有一个内置函数del(),他可以删除你定义的变量,如下所示:

>>> name = 'nock'
>>> name = 'lucky'
>>> print(name)
lucky
>>> id(name)
4349044808
>>> del(name)
>>> id(name)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'name' is not defined

常量

说了这么久变量,我们来说说常量,常量又是什么鬼,常量通常指不变的量,如π 3.141592653..., 或在程序运行过程中不会改变的量。

举例说明,我们每个人的年龄随着时间的退役都会增加,那年龄就是一个变量;比如我们都认为的10.1号是国庆节,那这个日期就是一个常量。

在Python中有一个专门的语法代表常量,Python程序员都约定俗成把变量名全部大写代表常量

NATIONAL_DAY = '10-01'

好到这里我所了解的Python的变量的所有知识到这里就写完成了,希望读到这里的朋友,你有所收获。

WeiXin.png

相关文章

  • 百变星君之Python变量

    变量是什么 变量是一个计算程序用做存储信息所引用的。他们还提供一种标签数据与一个描述性的名称,所以我们的程序可以被...

  • 百变星君

    一颗多情的心,他有七十二变,那不是他的伪装,那是他的法术。他是石头变的至尊宝,他只要他的紫霞仙子。 海市蜃楼和恶魔...

  • “百变星君”

    为新冠病毒取名“百变星君”,这还真的很形象。 自第一波高峰以来,无数人感染,也看到过各种各样的说法,说自己中了学习...

  • 0032肖谜

    百变星君 胆小怕生 嘴巴尖尖

  • 【中國•畫】雍正,画中的百变星君

    【中國•畫】雍正,画中的百变星君 雍正,画中的百变星君!一个想体验各行各业的帝王,他想当农民、他想当渔夫、他想当猎...

  • 白日闪电(4):百变星君

    镜头随着吉祥的振颤而振颤。 切换镜头 西式建筑屋内 夜 一小段振颤之后。透过玻璃窗户,外面的路灯照着,显然...

  • 《百变星君》中的夸张手法

    这是周星驰年轻时的作品。纨绔少年纨绔的是那么夸张,他的转变又是那么的快速,有自己的逻辑,夸张带来新奇感。后...

  • 偶像周星驰

    他出演的电影看过一次就忘不掉,从儿时的《大内密探零零发》、《国产凌凌漆》、《百变星君》、《九品芝麻官之白面包青天》...

  • 人人都爱百变星君----双子座

    一会是粉红小公主,一会是暗黑大魔王。 分分钟挑战我们的视觉、听觉极限----双子座! 1 双子座巨爱说话,就是抱着...

  • 平平淡淡才是真,很多人难做到

    2019.6.3 出租屋好像断网了,幸好手机里缓存了很多部电影,今天看了《百变星君》和《步履不停》,说实话以前的片...

网友评论

      本文标题:百变星君之Python变量

      本文链接:https://www.haomeiwen.com/subject/nbxclxtx.html