前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >百变星君之Python变量

百变星君之Python变量

作者头像
后场技术
发布2020-09-03 11:57:32
4080
发布2020-09-03 11:57:32
举报
文章被收录于专栏:后场技术后场技术

变量是什么

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

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

代码语言:javascript
复制
#!/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)

运行结果为:

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

变量定义规范

声明变量

代码语言:javascript
复制
# _*_ 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是两个变量名

变量定义方式

驼峰写法:

代码语言:javascript
复制
CpuNumber = 8
CpuLoad = 5

下划线写法:

代码语言:javascript
复制
memory_used = 3
memory_free = 5

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

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

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

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

变量赋值详解

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

代码语言:javascript
复制
#!/usr/bin/env python3
# _*_ coding:utf-8 _*_
# Author: nockgod@gmail.com
# Date: 2017-07-28 10:30Name = 'nock'
Phone = ’13681042939‘

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

在内存中表示如下:

如果做了如下改变呢:

代码语言:javascript
复制
#!/usr/bin/env python3
# _*_ coding:utf-8 _*_
# Author: nockgod@gmail.com
# Date: 2017-07-28 10:30Name = 'nock'# 将变量Phone指向了Name变量的内存地址
Phone = Name

在内存中表示如下:

我们再来变一下呢:

代码语言:javascript
复制
#!/usr/bin/env python3
# _*_ coding:utf-8 _*_
# Author: nockgod@gmail.com
# Date: 2017-07-28 10:30Name = 'nock'# 将变量Phone指向了Name变量的内存地址
Phone = Name# 将变量Name指向改为'lucky',但是变量Phone并没有改变
Name = 'lucky'

在内存中表示如下:

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

垃圾回收机制

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

代码语言:javascript
复制
>>> a = 1
>>> b = a
>>> id(a), id(b)
(4345374736, 4345374736)

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

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

代码语言:javascript
复制
>>> 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(),他可以删除你定义的变量,如下所示:

代码语言:javascript
复制
>>> 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程序员都约定俗成把变量名全部大写代表常量

代码语言:javascript
复制
NATIONAL_DAY = '10-01'

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后场技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 变量是什么
  • 变量定义规范
    • 声明变量
      • 定义变量的规则
        • 变量定义方式
          • 变量赋值详解
          • 垃圾回收机制
          • 常量
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档