彩虹然

rainbow-ran

Python3.7之变量与常量

一、变量

变量即把程序运算的中间结果临时存到内存里,以备后续调用。

1.定义规则

a)变量名只能是字母、数字或下划线的任意组合

b)变量名的第一个字符不能是数字

c)关键字不能声明为变量名

2.定义方式

驼峰体:NumberOfStudents

下划线:number_of_students(官方推荐)

3.变量名注意事项

变量名尽量不为中文、拼音等,不宜过长,不宜词不达意

4.变量的创建

当定义一个变量:name='彩虹然'时,程序开辟了一块内存空间,将'彩虹然'存储进去,再让变量名name指向'彩虹然'所在的内存地址。

id(obj)得到obj的地址(十进制)

name = '彩虹然'
print(id(name))
'''
2429319527952
'''

5.优化机制

python认为一些“看起来像python标识符的字符”和小整数字在开发中是常用的;

因此,出于节省内存的角度思考,对于这部分字符串和数字做出了优化;

python解释器会由于要定义的新变量内容与之前定义过的变量内容相同而不让这部分内容占用新的内存空间。

a)对于[-5,257)范围内的数字有优化机制:

>>> a = -5
>>> b = -5
>>> id(a)
1608351664
>>> id(b)
1608351664

对于[-5,257)范围外的数字没有优化机制:

>>> a = 257
>>> b = 257
>>> id(a)
2502556623984
>>> id(b)
2502558182288

b)短字符串有优化机制:

>>> a = "abc"
>>> b = "abc"
>>> id(a)
2502557973560
>>> id(b)
2502557973560

长字符串没有优化机制:

>>> a = "Hello World, I'm here."
>>> b = "Hello World, I'm here."
>>> id(a)
2502558942240
>>> id(b)
2502558942096

注意:这种现象也与编译器有关,在IDLE中测试的范围为[-5,256]的整数与短字符串,但在Pycharm中, 整数超过256字符串 即使带有空格也都认为地址一样。

s1 = 'My name is xxr.'
s2 = 'My name is xxr.'
print(id(s1), id(s2))
a = 257
b = 257
print(id(a), id(b))
'''
2687253112048 2687253112048
2687223780784 2687223780784'''

参考链接:https://blog.csdn.net/qq_38183592/article/details/89379224

6.身份运算

运算符 描述 实例
is 判断两个标识符是否引用自一个对象 x is y,类似id(x) == id(y)
is not 判断两个标识符是否引用自不同对象 x is not y,类似id(x) != id(y)

7.is与==辨析

Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。

== 比较操作符:用来比较两个对象是否相等,value做为判断因素;
is 同一性运算符:比较判断两个对象是否相同,id(唯一的身份标识)做为判断因素。

>>> a = 1
>>> b = 1
>>> a == b               # 此时a与b值相同,id也相同
True
>>> c = 'hello world!'
>>> d = 'hello world!'
>>> c == d               # 此时c与d值相同,id不同
True
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> a == b               # 此时a与b值相同,id不同
True
>>> a = 1
>>> b = 1
>>> id(a)                # 查看内存地址
140714323927888
>>> id(b)                # 查看内存地址
140714323927888
>>> a is b
True

>>> c = 'hello world!'
>>> d = 'hello world!'
>>> id(c)                # 查看内存地址
1382544135472
>>> id(d)                # 查看内存地址
1382543623920
>>> c is d
False

>>> a = [1,2,3]
>>> b = [1,2,3]
>>> id(a)                # 查看内存地址
1382542667144
>>> id(b)                # 查看内存地址
1382542172872
>>> a is b
False

补充:关于内存地址问题详见第5点优化机制,即对于整型和短字符串,取值相同的变量所占内存空间为同一块区域,所以比较操作符==与同一性运算符is判断均为True。

二、常量

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

posted @ 2020-01-16 15:49  彩虹然  阅读(1189)  评论(0编辑  收藏  举报