百变星君之Python变量

变量是什么

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

在计算机程序中,变量不仅可以是数字,还可以是任意数据类型, 在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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容