运算符

运算符和变量、常量、字面量一起构成表达式。举个简单例子 1 + 1 = 2 。例子中,4 和 5被称为操作数,”+”称为运算符。python支持一下类型的运算符:

python算术运算符

以下假设变量a为10,变量b为21:

运算符 描述 实例
+ 加 - 两个对象相加 a + b 输出结果 31
- 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -11
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 210
/ 除 - x 除以 y b / a 输出结果 2.1
% 取模 - 返回除法的余数 b % a 输出结果 1
** 幂 - 返回x的y次幂 a**b 为10的21次方
// 取整除 - 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0

python比较运算符

以下假设变量a为10,变量b为20:

运算符 描述 实例
== 等于 - 比较对象是否相等 (a == b) 返回 False。
!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 True。
> 大于 - 返回x是否大于y (a > b) 返回 False。
< 小于 - 返回x是否小于y。 (a < b) 返回 True。
>= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
<= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 True。

所有比较运算符返回1表示真,返回0表示假。这分别与布尔值True和False等价。

python赋值运算符

以下假设变量a为10,变量b为20:

运算符 描述 实例
= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a
*= 乘法赋值运算符 c *= a 等效于 c = c * a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c **= a 等效于 c = c ** a
//= 取整除赋值运算符 c //= a 等效于 c = c // a

python位运算符

按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下: 下表中变量 a 为 60,b 为 13。

运算符 描述 实例
& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释: 0000 1100
| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 (a | b) 输出结果 61 ,二进制解释: 0011 1101
^ 按位异或运算符:当两对应的二进位相异时,结果为1 (a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1 (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
« 左移动运算符:运算数的各二进位全部左移若干位,由”«“右边的数指定移动的位数,高位丢弃,低位补0。 a « 2 输出结果 240 ,二进制解释: 1111 0000
» 右移动运算符:把”»“左边的运算数的各二进位全部右移若干位,”»“右边的数指定移动的位数 a » 2 输出结果 15 ,二进制解释: 0000 1111

python逻辑运算符,

以下假设变量 a 为 10, b为 20:

运算符 逻辑表达式 描述 实例
and x and y 布尔”与” - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。
or x or y 布尔”或” - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 (a or b) 返回 10。
not not x 布尔”非” - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False。

python成员运算符

python成员运算符主要用于字符串、列表和元组中。

运算符 描述 实例
in 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。

python身份运算符

运算符 描述 实例
is is 是判断两个标识符是不是引用自一个对象。 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False。
is not is not 是判断两个标识符是不是引用自不同对象。 x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。

python运算符优先级

理解python运算符优先级就知道在python表达式中如何进行计算的。一下是优先级从高到低,高的先进行计算。

以上内容引自python3运算符

列表 list

列表是python内置的一种数据类型列表,也是我们最常用的数据类型之一。list是一种有序集合,可以随时添加和删除其中的元素。

score = [88, 37, 99, 100, 74]

# 获取列表的中元素的个数
score_len = len(score)
print(score_len)

# 用索引访问list中每一个元素的位置,从0开始到score_len - 1
print(score[0])

# 直接获取最后一个元素
print(score[-1])

# 访问索引1以后的所有元素
print(score[1:])

# 往list中追加元素到末尾
score.append(89)

# 把元素插入到指定的位置,比如索引号为2的位置
score.insert(2, 78)

# 删除list末尾的元素
score.pop()

# 删除指定位置的元素
score.pop(1)

# 替换list中的某个元素
score[1] = 23

# list里面的元素的数据类型可以不相同
s = ['Tom', 111, True]

# list里面的元素也可以是另一个list
L = ['python', 'php', 'javascript', ['java', 'C++'], 'ruby']

# 访问L中的java
print(L[3][0])

字符串本身就是list,具备list的所有属性。

元组 tuple

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的。

如果要定义一个空的tuple,可以写成()

如果要定义只有一个元素的tuple,不能定义t = (1),因为这会与数学公式中的小括号冲突(),python规定,这种情况下按照小括号进行计算。所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义

再来理解一下tuple不可变的概念:

t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
print(t)

猜猜会输出什么,为什么?

字典 dist

字典是另一种数据类型,它是可变的,无序的,且可存储任意类型对象。使用键-值(key-value)存储,具有极快的查找速度。

d = {'Tom': 95, 'Bob': 75, 'Yisa': 85}

思考:为什么查找速度非常快呢

这种key-value存储方式,在放进去的时候,就会根据key算出value存放的位置,这样才能快速查找到。

字典有几个特点:

  1. 可以通过key存入数据。
    d['Tom'] = 88
    
  2. 多次对同一个key赋值,保留最后一个。
  3. 通过in可判断key是否存在。
  4. 通过get()可以获取value,key不存在返回None或指定的值。
  5. 字典中的key是不可变对象,这是因为dict根据key来计算value的存储位置的,而key一旦生成,其存储位置就不在改变。

可以使用{}或者dist()定义集合:

tel = {'jack': 4098, 'sape': 4139}
tel = dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
tel = dict(sape=4139, guido=4127, jack=4098)

集合 set

set是一组key的集合,但是不存储value。set可以看做数学意义上的集合,其特点是无序的,不重复的。

  1. 通过add()方法添加元素到set中。
  2. 通过remove()方法可以删除元素。
  3. 两个或多个set可以做数学上的交集、并集等。

可以使用{}或者set()定义集合:

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
basket = set(['apple', 'orange', 'apple', 'pear', 'orange', 'banana']);

试想一下。print(set('abcedfej''))会输出什么?为什么?

集合对象支持交、并、差集和对称差集,跟数学意义上的理解是一样的。

s1 = set('abcd')
s2 = set('abfg')

print(s1 & s2)
print(s1.intersection(s2))  # &和intersection等价

print(s1 | s2)
print(s1.union(s2))  # |和union等价

print(s1 - s2)
print(s1.difference(s2))  # -和difference等价

print(s1 ^ s2)
print(s1.symmetric_difference(s2))  # ^和symmetric_difference

s3 = set('ab')
print(s3.issubset(s1))   # s3是s1的子集

print(s1.issuperset(s3))   # s1是s3的超集