(1)算术运算符
加(+),减(-),乘(*),除(/),整除(//),取余(%),幂(**)
(2) 比较运算符
大于(>),大于等于(>=),小于(<),小于等于(<=),
等于(==),不等于(!=)
(3) 逻辑运算符
与(and),或(or),非(not)
(4)位运算符
操作符 | 名称 | 事例 |
---|---|---|
~ | 按位取反 | ~4 |
& | 按位与 | 4&5 |
· | 按位或 | 4`5 |
^ | 按位异或 | 4^5 |
<< | 左移 | 4<<2 |
>> | 右移 | 4>>2 |
事例代码:
print(~4)
print(4 & 5)
print(4 | 5)
print(4 ^ 5)
print(4 << 2)
print(4 >> 2)
结果:
-5
4
5
1
16
1
[Finished in 0.2s]
(5) 三元运算符
使用 if else 实现三目运算符(条件运算符)的格式如下:
exp1 if contion else exp2
condition 是判断条件,exp1 和 exp2 是两个表达式。如果 condition 成立(结果为真),就执行 exp1,并把 exp1 的结果作为整个表达式的结果;如果 condition 不成立(结果为假),就执行 exp2,并把 exp2 的结果作为整个表达式的结果。
例如:比较两个数大小,并输出小的数:
x, y = 4, 5
print(x if x < y else y)
结果:
4
[Finished in 0.1s]
(6) 其他运算符
存在(in),不存在(not in),是(is),不是(not is)
注意:is, is not 对比的是两个变量的内存地址;==,和!= 对比的是两个变量的值。当比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。
a = "hello"
b = "hello"
print(a is b, a == b)
print(a is not b, a != b)
a = ["hello"]
b = ["hello"]
print(a is b, a == b)
print(a is not b, a != b)
运行结果:
True True
False False
False True
True False
[Finished in 0.2s]
python采用基于值的内存管理方式。赋值语句的执行过程是:首先把等号右侧表达式的值计算出来,然后在内存中寻找一个位置报纸存放进去,最后创建变量并指向这个内存地址。python中的变量并不直接存储值,而是存储了值的内存地址或者引用,这也是在python中变量类型可以随时改变的原因。
type():可以查看数据类型
bin():把数字转换成二进制
bit_length():该方法计算二进制数的长度
有时候我们想保留浮点型的小数点后 n 位。可以用 decimal 包里的 Decimal 对象和 getcontext() 方法来实现。
【例子】getcontext() 显示了 Decimal 对象的默认精度值是 28 位 (prec=28)。
import decimal
from decimal import Decimal
a = Decimal(1) / Decimal(3)
print(a)
结果:
0.3333333333333333333333333333
[Finished in 0.2s]
【例子】使 1/3 保留 4 位,用 getcontext().prec 来调整精度。
import decimal
from decimal import Decimal
decimal.getcontext().prec = 4
b = Decimal(1) / Decimal(3)
print(b)
结果:
0.3333
[Finished in 0.1s]
除了直接给变量赋值 True 和 False,还可以用 bool(X) 来创建变量,其中 X 可以是基本类型:整型、浮点型、布尔型容器类型:字符串、元组、列表、字典和集合
【例子】bool 作用在基本类型变量:X 只要不是整型 0、浮点型 0.0,bool(X) 就是 True,其余就是 False。bool 作用在容器类型变量:X 只要不是空的变量,bool(X) 就是 True,其余就是 False。
print(type(0), bool(0), bool(1))
print(type(10.31), bool(0.00), bool(10.31))
print(type(True), bool(False), bool(True))
print(type(''), bool(''), bool('python'))
print(type(()), bool(()), bool((10,)))
print(type([]), bool([]), bool([1, 2]))
print(type({
}), bool({
}), bool({
'a': 1, 'b': 2}))
print(type(set()), bool(set()), bool({
1, 2}))
结果:
<class 'int'> False True
<class 'float'> False True
<class 'bool'> False True
<class 'str'> False True
<class 'tuple'> False True
<class 'list'> False True
<class 'dict'> False True
<class 'set'> False True
bool 作用在容器类型变量:X 只要不是空的变量,bool(X) 就是 True,其余就是 False。
**对于数值变量,0, 0.0 都可认为是空的。
**对于容器变量,里面没元素就是空的。
当没有参数时,每次输出后都会换行。每次输出结束都用end设置的参数&结尾,并没有默认换行。
shoplist = ['apple', 'mango', 'carrot', 'banana']
print("This is printed without 'end'and 'sep'.")
for item in shoplist:
print(item)
print("This is printed with 'end='&''.")
for item in shoplist:
print(item, end='&')
print('hello world')
结果:
This is printed without 'end'and 'sep'.
apple
mango
carrot
banana
This is printed with 'end='&''.
apple&mango&carrot&banana&hello world
item值与’another string’两个值之间用sep设置的参数&分割。由于end参数没有设置,因此默认是输出解释后换行,即end参数的默认值为\n。
shoplist = ['apple', 'mango', 'carrot', 'banana']
print("This is printed with 'sep='&''.")
for item in shoplist:
print(item, 'another string', sep='&')
结果:
This is printed with 'sep='&''.
apple&another string
mango&another string
carrot&another string
banana&another string
二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示。
原码:就是其二进制表示(注意,有一位符号位)。
反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)。
补码:正数的补码就是原码,负数的补码是反码+1。
通过 “<<”和“>>”快速计算2的倍数问题。
print(3<<1) #n << 1 -> 计算 n*2
print(4>>1) #n >> 1 -> 计算 n/2,负奇数的运算不可用
print(3<<2) #n << m -> 计算 n*(2^m)
print(8>>2) #n >> m -> 计算 n/(2^m)
print(1<<3) #1 << n -> 2^n
结果:
6
2
12
2
8
if expression1:
expr1_true_suite
elif expression2:
expr2_true_suite
.
.
elif expressionN:
exprN_true_suite
else:
expr_false_suiteel
if 语句即为 else if,用来检查多个表达式是否为真,并在为真时执行特定代码块中的代码。
【例子】
temp = 65
source = int(temp)
if 100 >= source >= 90:
print('A')
elif 90 > source >= 80:
print('B')
elif 80 > source >= 60:
print('C')
elif 60 > source >= 0:
print('D')
else:
print('输入错误!')
结果:
C
[Finished in 0.1s]
assert这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssertionError的异常。
my_list = ['lsgogroup']
my_list.pop(0)#op() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
assert len(my_list) > 0
点击运行,系统会报错。
while 布尔表达式:
代码块
else:
代码块
当while循环正常执行完的情况下,执行else输出,如果while循环中执行了跳出循环的语句,比如 break,将不执行else代码块的内容。
【例子】
count = 0
while count < 5:
print("%d is less than 5" % count)
count = count + 1
else:
print("%d is not less than 5" % count)
#用break中间跳出循环
count = 0
while count < 5:
print("%d is less than 5" % count)
count = 6
break
else:
print("%d is not less than 5" % count)
结果:
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
0 is less than 5
[Finished in 0.1s]
for循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列,如str、list、tuple等,也可以遍历任何可迭代对象,如dict。
for 迭代变量 in 可迭代对象:
代码块
每次循环,迭代变量被设置为可迭代对象的当前元素,提供给代码块使用。
for 迭代变量 in 可迭代对象:
代码块
else:
代码块
当for循环正常执行完的情况下,执行else输出,如果for循环中执行了跳出循环的语句,比如 break,将不执行else代码块的内容,与while - else语句一样。
for num in range(10, 20): # 迭代 10 到 20 之间的数字
for i in range(2, num): # 根据因子迭代
if num % i == 0: # 确定第一个因子
j = num / i # 计算第二个因子
print('%d 等于 %d * %d' % (num, i, j))
break # 跳出当前循环
else: # 循环的 else 部分
print(num, '是一个质数')
结果:
10 等于 2 * 5
11 是一个质数
12 等于 2 * 6
13 是一个质数
14 等于 2 * 7
15 等于 3 * 5
16 等于 2 * 8
17 是一个质数
18 等于 2 * 9
19 是一个质数
[Finished in 0.1s]
enumerate(sequence, [start=0])
sequence:一个序列、迭代器或其他支持迭代对象。
start:下标起始位置。
返回 enumerate(枚举) 对象
【例子】
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
lst = list(enumerate(seasons))
print(lst)
lst = list(enumerate(seasons, start=1)) # 下标从 1 开始
print(lst)
结果:
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
[Finished in 0.1s]
break语句可以跳出当前所在层的循环。
continue终止本轮循环并开始下一轮循环。
pass 语句的意思是“不做任何事”,如果你在需要有语句的地方不写任何语句,那么解释器会提示出错,而 pass 语句就是用来解决这些问题的。
列表推导式:
[ expr for value in collection [if condition] ]
expr:列表生成元素表达式,可以是有返回值的函数。
for value in collection:迭代collection将value传入expr表达式中。
if condition:根据条件过滤哪些值可以。
x = [i for i in range(100) if (i % 2) != 0 and (i % 3) == 0]
print(x)
结果:
[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]
元组推导式:
( expr for value in collection [if condition] )
a = (x for x in range(10))
print(a)
print(tuple(a))
结果:
<generator object <genexpr> at 0x0000014CEC2E28B8>
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)e}
字典推导式:
{ expr for value in collection [if condition] }
b = {
i: i % 2 == 0 for i in range(10) if i % 3 == 0}
print(b)
结果:
{
0: True, 3: False, 6: True, 9: False}
集合推导式:
{ expr for value in collection [if condition] }
c = {
i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}
print(c)
结果:
{
1, 2, 3, 4, 5, 6}
异常体系内部有层次关系,Python异常体系中的部分关系如下所示:
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
首先,执行try子句(在关键字try和关键字except之间的语句)如果没有异常发生,忽略except子句,try子句执行后结束。如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和except之后的名称相符,那么对应的except子句将被执行。最后执行try - except语句之后的代码。如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
try:
f = open('test.txt')
print(f.read())
f.close()
except OSError:
print('打开文件出错')
结果:
打开文件出错
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
finally:
无论如何都会被执行的代码
【例子】
def divide(x, y):
try:
result = x / y
print("result is", result)
except ZeroDivisionError:
print("division by zero!")
finally:
print("executing finally clause")
divide(2, 1)
结果:
result is 2.0
executing finally clause
division by zero!
executing finally clause
try:
检测范围
except:
出现异常后的处理代码
else:
如果没有异常执行这块代码
【例子】
try:
fh = open("testfile.txt", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
print("Error: 没有找到文件或读取文件失败")
else:
print("内容写入文件成功")
fh.close()
结果:
内容写入文件成功
Python 使用raise语句抛出一个指定的异常。
【例子】
try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
结果:
An exception flew by!