[转]Python彻底搞懂 变量、运算符、in、id()、 is 与 ==的区别

一、变量

变量,是用来存储数据,

如果我们需要让得到的数据在后面的程序中进行运算,就需要先存储在变量中,在需要使用时再引用事先存储的变量。

它是【可变化的量】,它的概念和代数中定义的变量基本一致。

如:y=2*x,x 就是变量,x 的值不同y的值也就不同。

不同点在计算机中 y 也是个变量,计算机计算出 2*x 的值赋值给了变量y。

x 与 y 为变量的名称,我们通过变量的名称在后续程序中引用变量。

每个变量都有名称(名称使用标识符规范命名),叫变量名。Python 变量名可以是大小写英文、数字和下划线(_)的组合,但不能用数字开头。如:a=1,a_01=2,_a=3 中 a、a_01、_a 都是变量。

注意:Python 中的变量不能以数字开头,但可以使用下划线(_)开头,变量名区分大小写,变量A与a是不同的。

Python 中的变量为动态类型,所以我们定义变量时无需指定变量类型,我们可以给变量任何数据类型的值。

如下:

a=1# 纯字母 a='abc'# 动态类型,变量无固定类型,可以重新赋值任意类型值 a_01='我是变量'# 字母数字下划线混合 _a=True# 以下划线开始 12A='a'# 报错,不能以数字开始定义变量

注意:

定义变量的‘=’与数学中的‘=’意义是不同的,

Python 中的等号左边是变量名字,右边是值,

'=' 表示将右边的值传递给左边,

所以 '=' 是右连接性,值的传递顺序是从右到左。

二、运算符

1、算术运算符

加(+)、减(-)、乘(*)、除(/)、取模(%)、幂(**)、取整(//)

加、减、乘、除和数学运算的一样,不多讲。

取模(%)是返回除法的余数(23%10余3,所以值为3)。

幂(x**y)表示 x 的 y 次幂( 2**3 的值为 8)。

取整(//) 为取商的整数部分,如10//3 值为3, 9.0//2.0 值为 4.0

取整又叫地板除:详细见:“地板除”还是“取整除”?地板除和天花板除floor division和ceil devision

示例:

# 使用Python 自带的 IDLE 逐条练习以下代码 a=23b=10c=0print('a + b=',a+b)# 输出  a + b= 33 print('a - b=',a-b)# 输出  a - b= 13 print('a * b=',a*b)# 输出  a * b= 230 print('a / b=',a/b)# 输出  a / b= 2.3 print('a % b=',a%b)# 输出  a % b= 3 c=a+b/b*a+b# 对变量重新赋值会改变变量的值 print(c)# 输出 56.0 # 修改变量 a 、b 、ca=2b=3c=a**bprint("a ** b =",c)# 输出  a ** b = 8 a=10b=5c=a//bprint("a // b =",c)# 输出  a // b = 2

2、比较运算符

也和数学中的比较运算概念一样。

等于(==)、不等于(!=)、大于(>)小于(<)、大于等于(>=)、小于等于(<=),比较运算符返回的结果为 True 或 False 。

示例:

#使用Python 自带的 IDLE 逐条练习以下代码

a = 23

b = 10

c = 0

print('a == b为', a == b) # 输出  a == b为 False

print('a != b为', a != b) # 输出  a != b为 True

print('a > b为', a > b) # 输出  a > b为 True

print('a < b为', a < b) # 输出  a < b为 False

print('a >= b为', a >= b) # 输出  a >= b为 True

print('a <= b为', a <= b) # 输出  a <= b为 False

3、逻辑运算符

用于连接比较运算符,先计算比较运算符,然后进行逻辑运算。

与(and)、或(or)、非(not),逻辑运算符返回的结果为True或False。

示例:

a=23b=10c=30print('a == b and b>c 为',a==bandb>c)# False print('a > b or c>=b 为',a>borc>=b)# True print('a < b and c>=b 为',a<borc>=b)# True print('a <= b and not a<b为',a>=banda>b)# True print('a > b 为',a>b)# True print('not a > b 为',nota>b)# False print('a <= b and not a<b为',a>=bandnota>b)# False

4、成员运算符

判断元素是否为序列中的成员,用于确认元素是否在序列中。

in

在指定的序列中找到值返回 True,

否则返回 False。

如:x 在 y 序列中 , 如果 x 在 y 序列中返回 True。

not in

在指定的序列中没有找到值返回 True,

否则返回 False,

与 in 是相反的。

示例:

a='a'b=2list=[1,2,3,4,5,'b','a']# 定义列表,列表使用数据结构类型 print(ainlist)# True print(anotinlist)# False print(binlist)# True print(bnotinlist)# False print(9inlist)# False print(9notinlist)# True print('c'inlist)# False print('c'notinlist)# True print('c'in'abc')# True  字符串也可以当成列表

5、身份运算符

用于比较两个对象的存储单元。

is

判断两个标识符是否引用自同一个对象,

x is y 如果引用的是同一个对象则返回 True,

否则返回 False。

is not

判断两个标识符是否引用自不同个对象,

与is相反。

注意:id() 函数可以帮助我们获取变量存储在内存中的地址。

a=20b=20print(id(a))print(id(b))print(aisb)# True b=12# 改变b的值 print(id(b))print(aisb)# False

输出结果:

1571488816

1571488816

True

1571488560

False

拓展:is 与 == 的区别

Python 一切皆对象,

每个对象都有唯一的身份标识(id),

而且每个对象都有自己的类型(type)和值(value)。

所以 id, type, value 是Python对象的三个基本要素

常用的赋值(=) 操作,其实是身份标识(id)的传递,片面的理解是内存地址的传递。(因为可变数据类型()和不可变数据类型(int float string))

is 比较的是id

== 比较的是type 和 value。

id相同时,

它的typevalue肯定相同,

但当type与value相同时,

id不一定相同。

示例: type 与 value相同,id 不同

a=b=[1,2]c=[1,2]print(a==c)# True print(aisb)# True print(aisc)# False #

说明:

第一行,a 与 b 赋值时被指向了同一个id

第二行,c 再次创建一个列表,它的id也是新创建。

原因可能是可变数据类型和不可变数据类型。可查看:

Python基础入门:列表、元组、字符串、字典、集合、序列-阿里云天池 --4字典部分

version<3.5 , Python为了提高速度使用了小整数[-5, 257)和新创建的字符串加入了通用对象池(类似缓存),即启动编译器时[-5, 257)已经再内存中。

version>=3.5, 将数值加入了通用对象池,当你创建字符串和数值时,他们都会加入通用对象池。

x=100y=100# [-5, 257)的整数已在内存中定义好,引用时直接将id传递给对应的变量 print(xisy)# True i=257j=257print(iisj)# version<3.5 False, version>=3.5  True # 说明: Python 3.5 及以后的版本对此进行了优化 #3.5 及以后版本数值与字符串都加入了对象池 s='abc'r='abc'print(sisr)# True # 拓展:可用于判定变量的类型 print(type(x)isint)# True print(type(s)isstr)# True

注意:运算符的优先级,算术运算符优先,然后身份运算符,再成员运算符,最后逻辑运算符。

总结:

2018年1月19日,第一次修改,个别错别字与语法问题,代码加上注释。

2019年2月25日,第二次修改,增加思维导图

2019年7月7日,第三次修改,修改身份运算符,增加is 与 == 的区别,修改思维导图

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