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的运算符

算数运算符

包括常见的+,-,*,/,%等,幂运算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。但andor不一定

>>> not []
True
>>> not [1,2]
False
>>> [1] or []
[1]
>>> 1 and 0
0

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

>>> 0 and 1
0
>>> 1 and 2
2
>>> 2 and 1
1
>>> 0 or 1
1
>>> 1 or 0
1
>>> 1 or 2
1

成员运算符

包括innot 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)类型,innot in操作比对的是key键

>>> b = 'a'
>>> b in {'c':1}
False
>>> b = 1
>>> b in {'c':1}
False
>>> b  = 'c'
>>> b in {'c':1}
True

身份运算符

包括isnot 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

猜你喜欢

转载自www.cnblogs.com/mengfanxuan/p/variable_operator.html
今日推荐