Python学习之路--02变量与运算符
Posted mengfanxuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习之路--02变量与运算符相关的知识,希望对你有一定的参考价值。
目录
变量
变量即对某种类型数据实体的抽象,或者说给某个类型数据的实体起个名字。基本操作方式是var = xxx
。=
是赋值操作,注意,python里面不需要像Java一样的变量声明
>>> [1,2,3,4,5,6]*3+[1,2,3]+[1,2,3,4,5,6]
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6]
>>> A = [1,2,3,4,5,6]
>>> print(A)
[1, 2, 3, 4, 5, 6]
>>> B = [1,2,3]
>>> A * 3 + B + A
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6]
>>> skill = [‘新月打击‘,‘苍白之瀑‘]
变量可以方便我们的操作。变量起名要规范
命名规范
- python规定变量可以以字母、下划线开头,由字母、数字、下划线组成
>>> 0a = 2
SyntaxError: invalid syntax
>>> a2 = ‘f‘
>>> _2ab=‘1‘
- python识别大小写,A与a不同
>>> b
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
b
NameError: name ‘b‘ is not defined
>>> B
[1, 2, 3]
- python是弱类型语言,同一变量没有类型限制
>>> a = ‘1‘
>>> a = 1
>>> a = (1,2,3)
>>> a = {1,2,3}
- 系统保留关键字不能当做变量名
值类型与引用类型
int、str、tuple是值类型,是不可变的,每次赋值都会开辟新的空间进行存储。list、set、dict是引用类型,每个变量类似于一个“指针”,指向一个固定位置,修改一个会影响另一个。
>>> a = {1,2,3}
>>> b = a
>>> a = 3
>>> print(b)
{1, 2, 3}
>>> a = [1,2,3,4,5]
>>> b = a
>>> a[0] = ‘1‘
>>> print(a)
[‘1‘, 2, 3, 4, 5]
>>> print(b)
[‘1‘, 2, 3, 4, 5]
进一步说明值类型不可变。
>>> a = ‘hello‘
>>> id(a)
2166410629392
>>> a = a + ‘ python‘
>>> id(a)
2166410595440
>>> ‘python‘[0]
‘p‘
>>> ‘python‘[0]=‘m‘
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
‘python‘[0]=‘m‘
TypeError: ‘str‘ object does not support item assignment
函数id()
用于显示某个变量在内存中的地址
>>> b = [1,2,3]
>>> b.append(4)
>>> print(b)
[1, 2, 3, 4]
>>> c = (1,2,3)
>>> c.append(4)
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
c.append(4)
AttributeError: ‘tuple‘ object has no attribute ‘append‘
因为元组不可变,所以没有追加元素等操作。list等可变所以能添加、删除、修改。
>>> a = (1,2,3,[1,2,4])
>>> a[2]
3
>>> a[3]
[1, 2, 4]
>>> a[3][2]
4
>>> a = (1,2,3,[1,2,[‘a‘,‘b‘,‘c‘]])
>>> a[3][2][1]
‘b‘
>>> a[2] = ‘3‘
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
a[2] = ‘3‘
TypeError: ‘tuple‘ object does not support item assignment
>>> a[3][2] = ‘4‘
>>> print(a)
(1, 2, 3, [1, 2, ‘4‘])
这一组合例子中,因元组不可变而list可变,所以a[3]
存储的是一个不变的地址,地址里的内容可变
运算符
算数运算符
包括常见的+,-,*,/,%
等,幂运算python采用**
来实现。其中要注意+
,-
和*
在处理某些数据结构时的含义,如拼接,差集,复制等
>>> ‘hello‘+‘ world‘
‘hello world‘
>>> [1,2,3]*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> 3 - 1
2
>>> 3 / 2
1.5
>>> 3 // 2
1
>>> 5 % 2
1
>>> 2 ** 2
4
赋值运算符
顾名思义,通过一些简单的运算(甚至没有),将数据赋予某个变量,操作的核心一定是落在赋值上
>>> c = 1
>>> c = c + 1
>>> print(c)
2
>>> c += 1
>>> print(c)
3
>>> b = 2
>>> a = 3
>>> b += a
>>> print(b)
5
>>> b -= a
>>> print(b)
2
>>> b *= a
>>> print(b)
6
关系运算符
用于确定两个元素大小关系的运算符号。python并不是只有数字类型才能做大小比较
>>> 1 > 1
False
>>> 1 >= 1
True
>>> a = 1
>>> b = 2
>>> a != b
True
>>> ‘a‘ > ‘b‘
False
>>> ‘abc‘ < ‘abd‘
True
>>> [1,2,3] < [1,3,2]
True
>>> (1,2,3) > (4,5,6)
False
单个字符比较ASCII码,字符串比较大小是对每一个对位字符进行大小比较。关系运算的重点是运算完成后返回的Boolean值
逻辑运算符
特点:操作布尔值,返回布尔值。操作只有三种:与、或、非
>>> True and True
True
>>> True and False
False
>>> True or False
True
>>> False or False
False
>>> not False
True
对于非布尔类型的判定方法:
- 对于int、float等数值类型,非0表示True,0表示False
- 对于字符串,非空表示True,空表示False
- 对于“组”,list、set等来说。非空表示True,空表示False
>>> 1 and 1
1
>>> ‘a‘ and ‘b‘
‘b‘
>>> ‘a‘ or ‘b‘
‘a‘
>>> not ‘a‘
False
>>> not []
True
>>> not [1,2]
False
not
操作返回的是显性的True和False。但and
和or
不一定
>>> not []
True
>>> not [1,2]
False
>>> [1] or []
[1]
>>> 1 and 0
0
and
和or
结果显示遵循“扫描原则”,若当前位已能决定结果则返回当前位,否则继续
>>> 0 and 1
0
>>> 1 and 2
2
>>> 2 and 1
1
>>> 0 or 1
1
>>> 1 or 0
1
>>> 1 or 2
1
成员运算符
包括in
和not in
两个操作,用于判断成员是否属于某一个组
>>> a = 1
>>> a in [1,2,3,4,5]
True
>>> b = 6
>>> b in [1, 2,3,4]
False
>>> b not in (1,2,3,4,5)
True
>>> b not in {1,2,3,4,5}
True
对于字典(dict)类型,in
和not in
操作比对的是key键
>>> b = ‘a‘
>>> b in {‘c‘:1}
False
>>> b = 1
>>> b in {‘c‘:1}
False
>>> b = ‘c‘
>>> b in {‘c‘:1}
True
身份运算符
包括is
和not is
。用于判断符号左右两端是否“身份”相同
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a = 2
>>> a is b
False
>>> a = ‘hello‘
>>> b = ‘world‘
>>> a is b
False
初看上述这些判别会误以为他和关系运算符(==)相同。但看下例会发现不同
>>> a = 1
>>> b = 1.0
>>> a is b
False
>>> a == b
True
身份运算符所谓“身份”,其实核对的是内存地址是否相同,不关心值是否相同,简单粗暴的说就是比对id()
值是否相同
>>> a = 1
>>> b = 1
>>> id(a)
1429827040
>>> id(b)
1429827040
>>> a is b
True
>>> a == b
True
>>> b = 1.0
>>> id(b)
2354290105056
>>> a is b
False
>>> a == b
True
对于set、tuple等也同样可以使用身份运算符
>>> a = {1,2,3}
>>> b = {2,1,3}
>>> a is b
False
>>> a == b
True
>>> a = (1,2,3)
>>> b = (2,1,3)
>>> a is b
False
>>> a == b
False
因为集合的无序性所以关系比较是相同的,元组无此特性故而关系比较结果为False
。同时因为每一个的内存地址都是特异的,所以他们都是身份独立的,互不相同。
对象三大特征
python中一切皆对象
- 值 value,==
- 身份
id()
,is - 类型
type()
,isinstance
值和身份判断上文已讲,这里说明一下类型判断
>>> a =‘hello‘
>>> type(a) == int
False
>>> type(a) == str
True
>>> isinstance(a,str)
True
>>> isinstance(a,int)
False
>>> isinstance(a,(int,str,float))
True
>>> isinstance(a,(int,float))
False
类型判断就是为了判定类型,可以用type(x)==bb
方式,但更推荐isinstance(x,(aa,bb,...))
方法,二者都返回布尔值。但后者可以判断x的子类是否属于某一种类型,而type()
不行
位运算符
主要以按位与&
和按位或|
为代表,将数字当做二进制然后以每一位为独立单位进行运算(位运算)。
>>> a = 2
>>> b = 3
>>> a & b
2
>>> a = 2
>>> b = 3
>>> a | b
3
这里的与和或操作同中学数学,&
操作中当有一个为0时,结果为0。|
操作中当有一个为1时,结果为1
>>> a = 1
>>> ~a
-2
>>> a << 1
2
>>> a = 3
>>> a >> 1
1
~
(非)按位取反操作涉及到二进制补码,如上例所示。负数表示为符号位+补码
,获取其表示数需要摘出符号位(0为正,1为负),剩余部分取反加一。
>>
和<<
是对每一位进行移位运算,规则是向右移动时,高位补符号位,向左移动时,低位补0
以上是关于Python学习之路--02变量与运算符的主要内容,如果未能解决你的问题,请参考以下文章
IOS学习之路——Swift语言——基本类型运算符与逻辑控制语句