python3学习--(3)变量和运算符

(1)变量:其实就是一个“名字”,定义一个变量:A = [1,2,3,4,5,6],print(A);其中“=”是赋值符号,可以把列表,字符串,数字等赋值给变量;

(2)A = [1,2,3,4,5],B = [1,2,3],print(A*3 + B + A);这个就是利用变量进行运算;

(3)定义一个变量要有意义,命名可读性要强,例如:skill = ['新月打击','苍白之瀑'],而不是定义成:A =  ['新月打击','苍白之瀑'];

(4)变量的命名规则:1.变量由字母、数字和下划线组成,但是首字符不能是数字(1a = 2就是错误的);

                                          2.不能是特殊字符等;

                                          3.系统关键字不能用在变量名中,保留关键字(and、if、import等);

                                          4.变量是区分大小写的;

(5)python是动态语言,变量的类型是不固定的,有些人在定义变量的时候,会在变量前声明变量的数据类型:如float a = 1.1;

(6)a = 1; b = a; a = 3; print(b),输出:b = 1;a = [1,2,3,4,5];b=a;a[0] = '1';print(a);print(b);输出:a= ['1',2,3,4,5];b = ['1',2,3,4,5];

(7)int,float,str,tuple是值类型,是不可改变的,list,set,dict是引用类型,是可以改变的;a=1,b=a,a=3,在内存中的表现为:a=1表示a指向1,b=a表示b也指向1,a=3表示a指向3,所以输出的结果就是b=1,a=3;而a = [1,2,3,4,5],b=a,a[0] = '1',在内存中的表现为:a=[1,2,3,4,5]表示a指向列表[1,2,3,4,5],b=a表示b也指向列表[1,2,3,4,5],a[0]='1'并没有让a指向新的列表,而是把原来的列表中的元素做了更改,所以b指向的列表也做了更改,都是同时指向了列表['1',2,3,4,5],所以输出a= ['1',2,3,4,5];b = ['1',2,3,4,5];

(8)引用类型的数值是可以改变的,只不过是将类型中的数值发生了更改,并没有指向新的引用类型,所以b指向的列表也发生了更改,a和b指向了同一个更改后的引用类型;

(9)函数id()可以查看内存地址:b='hello',b的内存地址是55399200,b=b+'python',这时的b的内存地址是55336696,内存地址发生了改变,两个字符串相加,内存地址发生了改变;

(10)字符串是不可改变类型的举例:'python'[0],会输出:'p';但是'python'[0] = 'o',就会报错;

(11)列表a=[1,2,3],id(a),输出:59570576,通常用十六进制来表示内存地址:hex(id(a)),输出:'0x38cf990',a[0]='1',id(a)就是59570576,内存地址并没有发生改变,所以说列表list是可改变的类型;

(12)定义一个tuple:a=(1,2,3),a[0]='1',输出的时候会报错,所以元组tuple是不可改变的类型;

(13)在列表中追加元素:b=[1,2,3],b.append(4),print(b),输出:[1,2,3,4],但是元组不支持追加元素,会报错;

(14)二维数组查询:,用三个维度查看元素:

(15)修改元组中的元素:因为元组是不可改变的,想要修改元组中的元素,可以通过列表实现:,这样就可以修改元组中的元素了;

(16)运算符:算数运算符:+,*,-,/,//(整除),%(取余),**(平方);

                            赋值运算符:=,+=,*=,/=,%=,**=,//=;

                            比较(关系)运算符:==,!=,>,<,>=,<=;

                            逻辑运算符:and(且),or(或),not(非);

                           成员运算符:in,not in;

                           身份运算符:is,is not;

                           位运算符:&,|,^,~,>>,<<;(按位与,按位或,按位异或,按位取反,右移动,左移动,这些都是把数字当作是二进制数进行运算)

(17)python的变量是不需要定义的,赋值运算符的举例:,但是在python中不支持自增/自减运算符(c++、c--)(在别的语言中有支持这种运算符)

(18)赋值运算符的举例:,b += a等同于b = b + a;b -= a就等同于b = b - a;

(19)关系(比较)运算符:使用比较运算符,输出的结果是布尔类型,True或者是False,

(20)举例:,b>=1的结果为True,b=b+True,int(True)为1,所以就变成了

b=b+1,输出的结果就是2;

(21)'a'>'b',结果是False,其实比较的是ASCII码,ord('a'),是97,ord('b'),是98,转换为97>98,结果就是False;

(22),无法知道abc的ASCII码,所以这种是单个比较的,a和a比较,比较不出来,因为是相等的,b和b作比较,也是相等的,最后比较c和d,发现c的ASCII码比d的ASCII码小,所以结果就是True;

(23)列表也可以做关系运算,[1,2,3]<[1,2,4],结果为True,是把列表中的元素挨个比较的,一个一个做比较,1和1相等,2和2相等,最后3<4,所以结果为True;

(24)元组也可以做关系运算,(1,2,3)<(1,3,2),结果为True,是把元组中的元素挨个比较的,一个一个做比较,1和1相等,2<3,是正确的,不用比较3和2,所以结果为True;

(25)逻辑运算符的操作类型和返回结果都是布尔类型的,,and是两边都为真,结果才是真;,false是只要有一边为真,结果就是真;and和or是操作两个变量,not是操作一个变量,

(26),这种现象其实是int和str进行比较,不会报错,原因也是int和str转换成布尔类型,上述代码第一行可转换成:True and True,所以能输出结果,不会报错;

(27)对于int和float来说,0表示False,非0表示True,例如:;对于str来说,空字符串被认为是False,其他均为True,例如:;对于列表list来说,空的列表被ren'认为是False,其他均为True,例如:;对于tuple,set,dict,遵循的原则和list是一样的;

(28),逻辑运算符前后操作的类型可以为非布尔类型,返回结果一样也可以用非布尔类型来表示;

(29),逻辑运算符and,or,不能看返回的是第一个还是第二个,而是看返回的是True还是False;

(30)对于逻辑运算符,计算机解析代码的逻辑就是只有知道第二个数值,才能知道返回的结果,所以会出现返回的结果是第二个数值:,如果计算机读到第一个数值的时候,就已经知道结果了,那么就不需要读取第二个数值,返回的结果就是第一个数值:

(31)成员运算符:用来判断一个元素是否在一组元素里,其返回值是布尔类型;基本用法:;不光是列表list,也包括字符串str,元组tuple,集合set,例如:

(32)字典dict的成员运算符:key:value,只判断key,而不是判断value,例如:,只判断key,所以只有第三种情况才会返回True;

(33)身份运算符:返回值是布尔类型,当两个变量的取值相等时,返回True:

(34)is和==的区别:,特殊的情况:关系运算符比较的是两个变量的值,==是比较两个变量的值是否相等,而is不是比较值相等,比较的是两个变量的身份是否相等,比较身份就是指比较内存地址是否相等:

(35),集合a和b,集合是无序的,不用考虑顺序,用==比较的是两个变量的取值,a和b都是相等的,所以结果是True,用is比较的是两个变量的内存地址:,所以结果是False;而元组c和d,元组是序列,顺序会影响取值,所以c和d的取值是不相等的,结果为False,用is比较的是内存地址,c和d的内存地址也不相同,所以结果也是False;

(36),判断变量的类型用isinstance,例如:,第二行dai'代码表示判断a是否满足元组中任意一个元素的类型,满足任意一种,返回就是True,都不满足,就会返回False;

(37)对象的三个特征:id,value,type;

(38)判断数据类型的方式:is,==,isinstance(推荐使用);

(39)位运算符:,把a转换成二进制数是10,b转换成二进制数是11,按位与就是:相同位的数字都为1,就为1,如果有一个0或都为0,就为0,所以a&b,得到的二进制数是10,也就是2;

(40)按位或:,按位与就是:相同位的数字只要有一个数字为1,结果就为1,所以a | b,得到的二进制数是11,也就是3;

猜你喜欢

转载自blog.csdn.net/weixin_38808167/article/details/89156799
今日推荐