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 = 2SyntaxError: invalid syntax>>> a2 = ‘f‘>>> _2ab=‘1‘
python识别大小写,A与a不同
>>> bTraceback (most recent call last):  File "<pyshell#12>", line 1, in <module>    bNameError: 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 - 12>>> 3 / 21.5>>> 3 // 21>>> 5 % 21>>> 2 ** 24

赋值运算符

顾名思义,通过一些简单的运算(甚至没有),将数据赋予某个变量,操作的核心一定是落在赋值上

>>> 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 > 1False>>> 1 >= 1True>>> a = 1>>> b = 2>>> a != bTrue>>> ‘a‘ > ‘b‘False>>> ‘abc‘ < ‘abd‘True>>> [1,2,3] < [1,3,2]True>>> (1,2,3) > (4,5,6)False

单个字符比较ASCII码,字符串比较大小是对每一个对位字符进行大小比较。关系运算的重点是运算完成后返回的Boolean值

逻辑运算符

特点:操作布尔值,返回布尔值。操作只有三种:与、或、非

>>> True and TrueTrue>>> True and FalseFalse>>> True or FalseTrue>>> False or FalseFalse>>> not FalseTrue

对于非布尔类型的判定方法:

对于int、float等数值类型,非0表示True,0表示False对于字符串,非空表示True,空表示False对于“组”,list、set等来说。非空表示True,空表示False
>>> 1 and 11>>> ‘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 00

and和or结果显示遵循“扫描原则”,若当前位已能决定结果则返回当前位,否则继续

>>> 0 and 10>>> 1 and 22>>> 2 and 11>>> 0 or 11>>> 1 or 01>>> 1 or 21

成员运算符

包括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 bTrue>>> a = 2>>> a is bFalse>>> a = ‘hello‘>>> b = ‘world‘>>> a is bFalse

初看上述这些判别会误以为他和关系运算符(==)相同。但看下例会发现不同

>>> a = 1>>> b = 1.0>>> a is bFalse>>> a == bTrue

身份运算符所谓“身份”,其实核对的是内存地址是否相同,不关心值是否相同,简单粗暴的说就是比对id()值是否相同

>>> a = 1>>> b = 1>>> id(a)1429827040>>> id(b)1429827040>>> a is bTrue>>> a == bTrue>>> b = 1.0>>> id(b)2354290105056>>> a is bFalse>>> a == bTrue

对于set、tuple等也同样可以使用身份运算符

>>> a = {1,2,3}>>> b = {2,1,3}>>> a is bFalse>>> a == bTrue>>> a = (1,2,3)>>> b = (2,1,3)>>> a is bFalse>>> a == bFalse

因为集合的无序性所以关系比较是相同的,元组无此特性故而关系比较结果为False。同时因为每一个的内存地址都是特异的,所以他们都是身份独立的,互不相同。

对象三大特征

python中一切皆对象

值 value,==身份id(),is类型type(),isinstance

值和身份判断上文已讲,这里说明一下类型判断

>>> a =‘hello‘>>> type(a) == intFalse>>> type(a) == strTrue>>> 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 & b2>>> a = 2>>> b  = 3>>> a | b3

这里的与和或操作同中学数学,&操作中当有一个为0时,结果为0。|操作中当有一个为1时,结果为1

>>> a = 1>>> ~a-2>>> a << 12>>> a = 3>>> a >> 11

~(非)按位取反操作涉及到二进制补码,如上例所示。负数表示为符号位+补码,获取其表示数需要摘出符号位(0为正,1为负),剩余部分取反加一。

>>和<<是对每一位进行移位运算,规则是向右移动时,高位补符号位,向左移动时,低位补0

Python学习之路--02变量与运算符

评论关闭