python基础知识(二)
运算符
运算符和变量、常量、字面量一起构成表达式。举个简单例子 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存放的位置,这样才能快速查找到。
字典有几个特点:
- 可以通过key存入数据。
d['Tom'] = 88 - 多次对同一个key赋值,保留最后一个。
- 通过in可判断key是否存在。
- 通过get()可以获取value,key不存在返回None或指定的值。
- 字典中的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可以看做数学意义上的集合,其特点是无序的,不重复的。
- 通过add()方法添加元素到set中。
- 通过remove()方法可以删除元素。
- 两个或多个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的超集