python

系列
Python:实例讲解 Python 中的魔法函数(高级语法)

1
2
3
4
5
6
# __name__是Python 的一个内置变量
if __name__ == "__main__":
main()

# 只有当 当前文件是"被直接运行"的时候,下面的代码才会执行。
# 如果这个文件只是被当作模块导入到别的文件中,则不会执行这里的内容。

简单知识

python中,main()只是起到提示作用,无实质约束力,代码依旧从上向下读取

lambda少使用,容易造成错误

..双点表示父目录(上一级目录),.单点表示当前工作目录(current directory)

内置函数enumerate用于遍历可迭代对象(如列表、元组、迭代器)的同时,获取元素的索引和值

深度学习里常用于遍历 DataLoader:
for batch_idx, (inputs, targets) in enumerate(train_loader):
ps:batch_idx是当前批次编号,inputs,targets是当前批次的数据

Python图像库中最重要的类是Image类,要从文件加载图像,使用Image模块的open()功能:
from PIL import Image
img = Image.open(“hopper.ppm”)
img.show() //显示刚刚加载的图像

命名规则_xxx表示内部使用,不直接给外部调用

[]+[]是创建一个新的列表(list),把两个列表的内容拼接在一起
插在原数组后面要用.extend(修改数组本身[1,2,3,4])或.append(把数组作为元素插入,属于嵌套数组[1,2,[3,4]])。

lstrip()移除字符串开头指定字符,rstrip()移除字符串末尾指定字符,strip()同时移除开头和末尾指定字符。不指定参数默认移除空白字符
原理(例如lstrip):从字符串最左侧开始,逐字符检查是否出现在参数中,连续移除所有匹配的字符,直到遇到第一个不匹配的字符

isdigit()检查字符串是否只包含数字字符,isalpha()检查字符串是否只包含字母字符

reverse()直接修改原列表,不返回任何值(返回None)。字符串不可变,不能使用reverse()

join()将序列中的元素连接成一个字符串,常用’’.join()拼接字符串

upper()转换为大写,lower()转换为小写,title()每个单词首字母大写,swapcase()互换大小写,capitalize()字符串首字母大写,其余小写

内置函数map()用于为序列中每个元素应用一个函数

and or 而不是 && ||✌

python支持链式比较(语法糖),如1<=n<=10,实质是1<=n and n<=10

集合中True数值上等于1,但作为不同的值存储。集合是无序的,可以包含混合数据类型,集合操作自动去重

u|v(等价方法形式u.union(v))并集,u&v(u.intersection(v))交集,u-v(u.difference(v))差集,从u中移除v中的元素,u^v(u.symmetric_difference(v))对称差集,只属于一个集合的元素

内置函数eval()将字符串当作Python代码执行,由于其危险性很少使用

字典方法.get()用于安全地获取字典中的值。键存在则返回对应的值,键不存在则返回指定的默认值(而不是报错)。

字典可以={}创立,赋初值时字符串要加引号

epoch_loss=np.mean(losses) if losses else float(‘nan’)

在有损失值时计算平均损失,没有时返回NaN(Not a Number)以避免报错

装饰器(decorator)@staticmethod用于定义静态方法(static method)。表示以下方法属于类本身,而不是类的实例,不需要访问实例(self)或类(cls),就能被调用

内置函数isinstance()判断一个对象是否是指定类型(或其子类)的实例。isinstance(object,classinfo),object:要检查的对象,classinfo:可以是一个类型(例如int、list),也可以是一个类型元组(例如(int,float)),如果变量是这个类型则返回True,不是则返回False

Python列表支持布尔判断,原生容器判断真假不管元素内容,只管有没有元素
arr = []
if not arr:
print(“空”)
else:
print(“非空”)

hstack():水平堆叠,vstack():垂直堆叠,堆叠数组需要在一个序列(列表或元组)中传递。如hstack((arr1,arr2))或hstack([arr1,arr2])

Python中单引号’和双引号”的本质等价,在字符串中包含引号时使用对方引号更方便

df_loader.dropna()某行存在NaN则该行被删除
df_loader=df_loader.dropna(axis=1)显性指定axis则删除列

CSV是逗号分隔值文件(Comma-Separated Values),纯文本文件,用来存表格数据

matplotlib.pyplot

常态plt不支持中文
plt.rcParams[‘font.sans-serif’]=[‘SimHei’] //支持中文
plt.rcParams[‘axes.unicode_minus’]=False //解决负号显示问题

无子图
plt.figure(figsize=(W,H)) //创建一张宽W高H英寸的画布,无子图,figure是图表figsize是图尺寸,不写时默认创建一个figure

plt.figure(
figsize=(6.4,4.8),
dpi=100,
facecolor=’white’
) //默认参数

plt.xlabel(“”) //X轴名称
plt.ylabel(“”) //Y轴名称
plt.title(“”) //标题

有子图
fig,axes=plt.subplots(1,3,figsize=(W,H)) //创造一张宽W高H英寸的画布,有子图,子图区域为1行3列共1x3个子图。fig整张画布对象,axes子图对象
axes[0].set_xlabel(“”)
axes[0].set_ylabel(“”)
axes[0].set_title(“”)

plt.plot(x,y,marker=’o’,label=’label_name’) //默认折线图蓝色实线。marker指定数据点的形状(o是圆点,.是小点,s是方块square,x是叉号),label为该折线名字用于图例名称显示
plt.show() //显示图表,单图情况下使用多个show(),后面的图会覆盖前面的图

即使存在多个figure,全局状态机依旧会默认画在最后一个figure,需要显式切换来画在不同图上
plt.figure()

plt.imshow()

plt.legend() //显示图例
plt.grid(True) //显示网格
plt.tight_layout() //自动调整布局
plt.savafig() //保存已绘制的图片

plt.bar([‘Urban’,’Rural’],[urban_2015,rural_2015]) //柱状图
axes[2].pie(
[1000, 2321], //每个扇区的数值
labels=[‘name1’, ‘name2’], //扇区名字
autopct=’%1.1f%%’, //饼图各区域显示的数据。格式化字符串,显示百分比,%1.1f意思是以浮点数显示并保留1位小数。%属于特殊字符,末尾写%%才能输出一个%字符
startangle=90 //起始角度,让图从垂直方向开始更美观
) //饼图
plt.grid(axis=’y’,linestyle=’–’,alpha=0.6) //添加axis方向的网格线,样式为虚线(‘-‘实线,’–’虚线,’:’点线),透明度alpha(0完全透明–1完全不透明)

import os //创建文件夹、路径拼接;
import time //计算运行时间
import random //导入Python标准库的随机模块,用于random.sample、random.sample 等随机选择
import numpy as np //numpy库,conda install numpy
import cv2 //OpenCV库,conda install opencv
import matplotlib.pyplot as plt //画图,conda install matplotlib