1. 变量运算符与数据类型
注释
单行注释
# 这是单行注释
print("Hello world")
多行注释
"""
这是多行注释
"""
运算符
算数运算符
比较运算符
逻辑运算符
位运算符
其他运算符
运算符优先级(从上到下递减)
变量和赋值
- 在使用变量之前,需要对其先赋值。
- 变量名可以包括字母、数字、下划线、但变量名不能以数字开头。
- Python 变量名是大小写敏感的,foo != Foo。
- python中的变量在声明时不需要声明其类型,变量会根据赋值自动确定类型。
数据类型与转换
最常见的三种数据类型:
通过type()查看数据类型
print(type('wzy'), type(1))
通过bool()来判断变量是否为空,如果为空则返回false
x = ''
print(bool(x))
通过isinstance()判断是否是某种确定的数据类型
x = 1
print(isinstance(x, int))
类型转换:只需要在变量前加上要转换的类型即可
x = '150'
print(int(x))
print函数:print函数的参数其实如下
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
其中,sep表示同一个print语句中不同元素之间的间隔用什么符号,默认为空,例如:
shoplist = ['apple', 'mango', 'carrot', 'banana']
for item in shoplist:
print(item, 'another string', sep=' & ')
end表示该print语句最后输出的符号,默认为换行"\n",例如:
shoplist = ['apple', 'mango', 'carrot', 'banana']
for item in shoplist:
print(item, end='&')
2. 位运算
位运算作用于二进制数。位运算的意义在于,数字在二进制表示下可以通过位运算很巧妙地实现很多计算。
原码,反码,补码
符号 | 原码 | 反码 | 补码 |
---|---|---|---|
正数 | 不变 | 不变 | 不变 |
负数 | 不变 | 符号位不变,其余位取反 | 反码加一 |
按位运算
按位非运算~
:负数按位非运算后为其绝对值减一,反则反之
00 00 01 01 -> 5
~
---
11 11 10 10 -> -6
按位与运算:&
。通过 a & (-a)
快速获取a
的最后为 1 位置的整数。
00 00 01 01 -> 5
&
11 11 10 11 -> -5
---
00 00 00 01 -> 1
按位或运算:|
按位异或运算:^
。通过^
可以快速交换两个正数。
a ^= b
b ^= a
a ^= b
按位左移:>>
,按位右移:<<
。通过左右移可以快速计算2的倍数。
n << 1 -> 计算 n*2
n >> 1 -> 计算 n/2,负奇数的运算不可用
n << m -> 计算 n*(2^m),即乘以 2 的 m 次方
n >> m -> 计算 n/(2^m),即除以 2 的 m 次方
1 << n -> 2^n
通过位运算进行集合运算:
一个数的二进制表示可以看作是一个集合(0 表示不在集合中,1 表示在集合中)。
比如集合 {1, 3, 4, 8}
,可以表示成 01 00 01 10 10
而对应的位运算也就可以看作是对集合进行的操作。
元素与集合的操作:
a | (1<<i) -> 把 i 插入到集合中
a & ~(1<<i) -> 把 i 从集合中删除
a & (1<<i) -> 判断 i 是否属于该集合(零不属于,非零属于)
集合之间的操作:
a 补 -> ~a
a 交 b -> a & b
a 并 b -> a | b
a 差 b -> a & (~b)
3. 逻辑结构
条件语句
if
, if-else
, if-elif-else
:与C语言或其他语言中的条件结构基本类似,不过多介绍。
值得一提的是assert
,这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssertionError
的异常。例如:
my_list = ['lsgogroup']
assert len(my_list) > 0
通常用在单元测试时,可以用来在程序中置入检查点,只有条件为 True 才能让程序正常工作。
循环语句
1.while循环:当判断条件为真时执行代码块,直到判断条件为假。
while 布尔表达式:
代码块
# 通常用在while有可以跳出循环的break语句时,跳出循环后将不再执行else中的代码。
while 布尔表达式:
代码块
else:
代码块
2.for循环:for
循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列,如str、list、tuple
等,也可以遍历任何可迭代对象,如dict
。每次循环,迭代变量被设置为可迭代对象的当前元素,提供给代码块使用。
for 迭代变量 in 可迭代对象:
代码块
# 与while-else类似,跳出循环后将不再执行else中的代码
for 迭代变量 in 可迭代对象:
代码块
else:
代码块
终止循环:
break
:跳出当前所在的循环。
continue
:终止本轮循环并开始下一轮循环。
range循环
range是一个经常被用在for循环中的语句:
range([start,] stop[, step=1])
这个BIF(Built-in functions)有三个参数,其中用中括号括起来的两个表示这两个参数是可选的。
step=1
表示第三个参数的默认值是1。
range
这个BIF的作用是生成一个从start
参数的值开始到stop
参数的值结束的数字序列,该序列包含start
的值但不包含stop
的值。
推导式
根据for循环可以构建各种推导式
1.列表推导式:
x = [-4, -2, 0, 2, 4]
y = [a * 2 for a in x]
print(y)
# [-8, -4, 0, 4, 8]
2.元组推导式
a = (x for x in range(10))
print(a)
# <generator object <genexpr> at 0x0000025BE511CC48>
print(tuple(a))
# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
3.字典推导式
b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0}
print(b)
# {0: True, 3: False, 6: True, 9: False}
4.集合推导式
c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}
print(c)
# {1, 2, 3, 4, 5, 6}
4.异常处理
try-except
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
一个try
语句可能包含多个except
子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
try:
int("abc")
s = 1 + '1'
f = open('test.txt')
print(f.read())
f.close()
except OSError as error:
print('打开文件出错\n原因是:' + str(error))
except TypeError as error:
print('类型出错\n原因是:' + str(error))
except ValueError as error:
print('数值出错\n原因是:' + str(error))
else:
print(x)
# 数值出错
# 原因是:invalid literal for int() with base 10: 'abc'
一个 except
子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。
try:
s = 1 + '1'
int("abc")
f = open('test.txt')
print(f.read())
f.close()
except (OSError, TypeError, ValueError) as error:
print('出错了!\n原因是:' + str(error))
# 出错了!
# 原因是:unsupported operand type(s) for +: 'int' and 'str'
try-except-finally
:如果一个异常在try
子句里被抛出,而又没有任何的except
把它截住,那么这个异常会在finally
子句执行后被抛出。
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
finally:
无论如何都会被执行的代码
不管`try`子句里面有没有发生异常,`finally`子句都会执行。
try-excpet-else
:使用except
而不带任何异常类型,如果在try
子句执行时没有发生异常,Python将执行else
语句后的语句。不过这不是一个很好的方式,因为我们不能通过该程序识别出具体的异常信息。
try:
检测范围
except:
出现异常后的处理代码
else:
如果没有异常执行这块代码
raise
:Python 使用raise
语句抛出一个指定的异常。
注:资料参考自阿里python训练营