一、代码规范
1. utils 文件夹存放重复使用的 .py 文件
二、基础
1. 字符串,列表或元组支持成员运算符 in, not in
2. 多行语句的连接
3. 多条语句放一行,用分号连接 ";"
4. print 输出默认换行
可指定输出末尾
# 输出不换行
print(x, end="")
# 输出不换行,且以空格结尾
print(x, end=" ")
5. 逻辑运算
三、数据类型
Number(数字)
bool 是 int 的子类,True 和 False 可以和数字相加
>>> True==1
True
>>> False==0
True
>>> True+1
2
>>> 2 / 4 # 除法,得到一个浮点数
0.5
>>> 2 // 4 # 除法,得到一个整数
0
>>> 2 ** 5 # 乘方
32
指定小数位数
print("{:.3f}".format(ans))
字符串转为int,并计算将其作为二进制输出的十进制值
ans = "1111"
print(int(ans, 2)) # 15
String(字符串)
- 使用三引号(''' 或 """)可以指定一个多行字符串
- 转义符 \
- 字符串可以用 + 运算符连接在一起,用 * 运算符重复
- Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始
- Python 中的字符串不能改变
- 向一个索引位置赋值,比如 word[0] = 'm' 会导致错误
print(str[2:5]) # 输出从第三个开始到第六个的字符(不包含)
print(str[2:]) # 输出从第三个开始后的所有字符
print(str[1:5:2]) # 输出从第二个开始到第五个且每隔一个的字符(步长为2)
bool
在 Python 中,所有非零的数字和非空的字符串、列表、元组等数据类型都被视为 True,只有 0、空字符串、空列表、空元组等被视为 False
List(列表)
列表的元素可以修改,列表的元素类型可以不同
列表是写在方括号 [] 之间、用逗号分隔开的元素列表
和 String 一样,+ 是连接,* 是重复
Tuple(元组)
元组写在小括号 () 里,元素之间用逗号隔开
元组的元素不能修改,元组的元素类型可以不同
元组可以包含可变对象,如 List
可 + 可 *
构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
tup1 = () # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号
string、list 和 tuple 都属于 sequence(序列)
Set(集合)
集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素
集合使用大括号 {} 表示,元素之间用逗号 , 分隔
创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典
#!/usr/bin/python3
sites = {'Google', 'Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu'}
print(sites) # 输出集合,重复的元素被自动去掉
# 成员测试
if 'Runoob' in sites :
print('Runoob 在集合中')
else :
print('Runoob 不在集合中')
# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')
print(a)
print(a - b) # a 和 b 的差集
print(a | b) # a 和 b 的并集
print(a & b) # a 和 b 的交集
print(a ^ b) # a 和 b 中不同时存在的元素
Dictionary(字典)
列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取
字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合
在字典中遍历时,关键字和对应的值可以使用 items() 方法同时解读出来:
>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
... print(k, v)
...
gallahad the pure
robin the brave
四、常用语句
输入输出相关语句
1. format格式化
简写:
f'{timer.stop():.5f} sec'
输出:
0.02684 sec
绘图
1. 散点图
d2l.plt.scatter(features[:, 1].detach().numpy(), labels.detach().numpy(), 1)
scatter:散点图
features[:, 1]:取矩阵features的第二列
detach():分离张量,新的张量与原始张量值相同,但不再关联
numpy():将该张量转换为NumPy数组
1:散点的直径大小
遍历
1. for in zip() 并行遍历
for x, y in zip(list_1, list_2):
print(x, y)
条件控制语句
if语句的关键字为:if – elif – else
循环语句
1)while
while counter <= n:
sum = sum + counter
counter += 1
# 无限循环
var = 1
while var == 1:
# ...
# while 循环使用 else 语句
while <expr>:
<statement(s)>
else:
<additional_statement(s)>
2)for
# for语句语法
for item in iterable:
# 循环主体
else:
# 循环结束后执行的代码
# 如果在循环过程中遇到了 break 语句,则会中断循环,此时不会执行 else 子句
# 遍历列表
sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
print(site)
# 遍历字符串
word = 'runoob'
for letter in word:
print(letter)
# range函数
# 1 到 5 的所有数字:
for number in range(1, 6):
print(number)
3)break
4)contiue
5)pass
pass是空语句,是为了保持程序结构的完整性
for letter in 'Runoob':
if letter == 'o':
pass
print ('当前字母 :', letter)
五、 常用工具
迭代器与生成器
1. 迭代器
2. 生成器
使用了 yield 语句的函数为生成器
当在生成器函数中使用 yield 语句时,函数的执行将会暂停,并将 yield 后面的表达式作为当前迭代的值返回。
然后,每次调用生成器的 next() 方法或使用 for 循环进行迭代时,函数会从上次暂停的地方继续执行,直到再次遇到 yield 语句。这样,生成器函数可以逐步产生值,而不需要一次性计算并返回所有结果。
def countdown(n):
while n > 0:
yield n
n -= 1
# 创建生成器对象
generator = countdown(5)
# 通过迭代生成器获取值
print(next(generator)) # 输出: 5
print(next(generator)) # 输出: 4
print(next(generator)) # 输出: 3
# 使用 for 循环迭代生成器
for value in generator:
print(value) # 输出: 2 1
lambda函数
map 函数:使得 iterable 里的每个元素执行一次 function
map(function, iterable)
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared) # 输出: [1, 4, 9, 16, 25]
reduce函数:reduce
函数先从列表(或序列)中取出2
个元素执行指定函数,并将输出结果与第3
个元素传入函数,输出结果再与第4
个元素传入函数,…,以此类推,直到列表每个元素都取完。
from functools import reduce
numbers = [1, 2, 3, 4, 5]
# 使用 reduce() 和 lambda 函数计算乘积
product = reduce(lambda x, y: x * y, numbers)
print(product) # 输出:120