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

Python变量与常量

作者头像
py3study
发布2020-01-06 18:01:05
1.1K0
发布2020-01-06 18:01:05
举报
文章被收录于专栏:python3python3

1、什么是变量

a=1,其中 a 就是变量名称,1 就是它的值。在程序运行过程中,变量的值一般都会发生改变,内存中会专门开辟一段空间,用来存放变量的值,而变量名将指向这个值所在的内存空间。与变量相对的就是常量,在程序运行过程中,常量的值不会发生改变。

2、变量的命名规范

  • 变量名只能是 字母、数字或下划线的任意组合
  • 变量名的第一个字符不能是数字
  • 以下关键字不能声明为变量名 ['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']

变量的命名方式一般有2种: 1)变量中单词与单词之间使用下划线分隔

代码语言:javascript
复制
hello_kitty='abc'

2)变量中的每个单词的首字母大写

代码语言:javascript
复制
helloKitty='abc'

Tip:推荐使用第一种方式~

3、变量的定义与赋值

a=1,就是一个变量的赋值过程,等号“=”左边的值赋值给右边的变量a,这个过程已经包含了变量的申明和定义过程,每个变量需要先赋值再使用,变量在被赋值之后才会被创建。不同于其他语言,例如在C语言中,变量在被赋值前,必须先定义变量的类型,而Python不需要,可以不定义变量的类型直接赋值,Python解释器会根据语法和操作数决定对象的类型

Python变量与常量
Python变量与常量

动态类型语言和静态类型语言

  • 静态类型语言:数据类型在编译期间确定,编码时,必须明确指定变量的数据类型,然后再赋值。 主要语言:C、C++、Java、Object-C... 例如 java的赋值语句如下: String str = "abc"; char sex = 'M';
  • 动态类型语言:数据类型不在编译期间确定,变量的类型绑定延后到了运行阶段。变量使用之前不需要类型声明。 主要语言:Python、Perl、Ruby、Erlang、PHP... 例如 python的赋值语句: >>> str = 'abc' >>> var = 1

在python中,可以对同一个变量反复赋值,且每次赋值的数据类型都不一致(type()函数查看数据类型):

代码语言:javascript
复制
>>> abc = 1
>>> type(abc)
<class 'int'>               # abc 为 int 类型

>>> abc = 1.2
>>> type(abc)
<class 'float'>            # abc为 float 类型

>>> abc = 'hello'
>>> type(abc)
<class 'str'>              # abc为 字符串 类型

内存图解:

Python变量与常量
Python变量与常量

变量的赋值过程

程序中的一个赋值操作,例如:abc=1,在内存中大致可以分为两个步骤: 1)内存中开辟一段空间用于存放值 1 2)内存中创建一个变量abc,并指向 值 1

赋值完成后,若修改 abc 的值,python解释器并不是修改变量abc指向的内存空间中存放的值,而是重新开辟一段内存空间,将新的值存放进去,变量abc重新指向这段新开辟的内存空间:

代码语言:javascript
复制
>>> abc = 1
>>> id(abc)
1465150944

>>> abc='hello kitty'
>>> id(abc)
1730859168688

注:函数id()用于查看变量的内存地址~

Python小整数对象池

示例1:

代码语言:javascript
复制
>>> a = 10
>>> b = 10
>>> id(a)
1465151232
>>> id(b)
1465151232

示例2:

代码语言:javascript
复制
>>> a = 300
>>> b = 300
>>> id(a)
1730858159920
>>> id(b)
1730858412880

如上面所说,在Python中修改变量的值并不是在对应的内存空间中直接修改,而是需要malloc重新分配内存,用完之后再回收。为了提高效率,Python解释器将小整数[-5,257)存放在小整数对象池中,即small_ints数组中。small_ints缓存了[-5,257) 之间的所有整数,且在python解释器初始化后small_ints数组就一直存在。若变量的值在[-5,257)范围内,就直接从small_ints数组中获取,而不需要再分配内存空间。

小整数的范围为[-5,257),若要修改需要通过修改python的源代码实现

所以如 示例1 中所示:不同的变量,它们的值是同一个小整数时,这些变量引用的是同一个对象。若整数的值不在[-5,257) 范围内,python解释器会将其存放在PyIntBlock中,这里不做介绍~

其他赋值方式

多重赋值 同时为多个变量赋值,也称链式赋值。

代码语言:javascript
复制
a = b = c = 1            # a,b,c的值都为1

多元赋值 多个变量,多个值,逐一对应。

代码语言:javascript
复制
a, b, c = 1, 2, 3        # a = 1,b = 2,c = 3

对换赋值

代码语言:javascript
复制
x=1; y=2
x, y = y, x                 # x = 2, y = 1

分解赋值 元组分解后赋值给多个变量

代码语言:javascript
复制
a, b, c = (1,2,3)      # a = 1,b = 2,c = 3

s='hello'
a,b,c,d,e=s             # a = 'h',b = 'e',c = 'l',d = 'l',e = 'o'

a,_,_,_,e=s            # a = 'h',e = 'o',只取出开头结尾,单个下划线仅仅是一个有效的变量名称,来表示某个变量是临时的或无关紧要的(把不需要的值赋值给下划线)

# 也可以按下列方式书写:
a,*_,e=s
print(a,e)               # a = 'h',e = 'o'

增量赋值

代码语言:javascript
复制
x += 1

4、python引用计数 和 垃圾回收机制

引用计数

Python使用引用计数来追踪内存中的对象。当对象被创建并赋值给变量时,该对象的引用计数被设置为1。 当对象再次被引用时,引用计数加1。引用计数也会减少(例如del 变量名或对变量重新赋值等),当引用计数为0是,意味着这个对象已经没有被使用~

del语句 del语句会删除对象的一个引用,del语法:del obj[, obj2[, ...objN]] 执行 del x 后的两个动作: 1)从现在的名称空间中删除x 2)x所指向的对象的引用计数减1

垃圾回收机制

Python的GC模块通过引用计数来跟踪和回收垃圾。在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题。通过“分代回收”(generation collection)以空间换取时间来进一步提高垃圾回收的效率。

5、常量

常量指在程序运行过程中不会改变的量,c语言中有专门的常量定义语法:const int a = 60; 常量定义之后就不能更改,若更改就会报错,Python中没有类似const这样的修饰符,即没有专门用于定义常量的语法,一般约定俗成 变量名以全大写的形式来表示这是一个常量~

代码语言:javascript
复制
NAME=kitty

.................^_^

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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