6 分钟阅读时长
发布时间:
Python 基础包含基础语法(数据结构),和常用的库(标准库(os、json、time等)、第三方库(numpy、pandas、torch等))
Python 基础
变量及函数命名经验
大/小驼峰命名
大/小驼峰命名指每个单词遵循驼峰大小写规律,开头单词首字母大/小写,后续单词的首字母大写,用来区分不同的单词。如:大驼峰命名:MaxValue,小驼峰命名:maxValue。
下划线命名
下划线命名是不同于驼峰命名的方法,每个单词之间由下划线连接,通常用于所以字母都是小写或都是大写的情况。如:下划线+小写字母命名:max_value,下划线+大写字母命名法:MAX_VALUE。
命名习惯
方案1:变量名和函数名都遵循驼峰命名。这样命名比较统一。变量名的前缀为名词,函数名的前缀为动词,这样可以让变量和函数区分开来。
方案2(Python推荐):变量名和函数名都遵循下划线命名 这样命名也比较统一。Python代码推荐此种方式命名变量和函数,因为Python代码会提示变量名和函数名使用小写字母。
方案3:变量名遵循驼峰命名,函数名遵循下划线命名 这样命名不统一,但较好区别变量和函数。
总结:区别变量和函数可以通过括号判断,后面没有括号的是变量,有括号的是函数,这样既方便又准确,因此没必要仅通过名字区分变量和函数,所以使用上述几种方案均可,都不会影响到变量和函数的区分。
文件和文件夹命名
文件和文件夹命名推荐使用下划线+小写字母命名法。
类名与成员
以C++为例,类名首字母大写+驼峰命名,变量和函数首字母小写+驼峰命名。若函数名的单词数量较多,也可以使用小字母+下划线命名法。
特殊变量
常量:下划线+大写字母命名法。
静态变量:加前缀s_(表示static)。
全局变量:加前缀g_(表示global)。
参考资料:https://blog.csdn.net/NSJim/article/details/125029064
语法
数据类型
整型 int
浮点型 float
复数 complex
布尔值 bool
元组 tuple
元组用 () 标识。内部元素用逗号隔开。
元组不能增加、删除、修改元素,相当于只读列表。
创建元组
tup = ('physics', 'chemistry', 1997, 2000)
增加元素
元组不能二次赋值,相当于只读列表。
删除元素
元组中的元素值不允许删除。
仅可以使用del语句来删除整个元组。
tup = ('physics', 'chemistry', 1997, 2000)
del tup
修改元素
元组中的元素值不允许修改。
但可以对元组进行连接组合(易错点)
tup1 = (1, 2, 3)
tup2 = (4, 5, 6)
tup3 = tup1 + tup2
print(tup3) # (1, 2, 3, 4, 5, 6)
查找元素
使用下标索引来访问元组中的值
tup = (1, 2, 3, 4, 5, 6, 7 )
for i in range(len(tup)):
print(tup[i])
列表 list
列表的数据项不需要具有相同的类型。
创建列表
#创建一维数组
lst = []
lst2 = [1, 2, 3, 4, 5, 6, 7]
# 创建二维数组 方式一:使用循环
rows = 5
cols = 4
array = []
for i in range(rows):
row = []
for j in range(cols):
row.append(0) # 或者使用其他值初始化
array.append(row)
print(array)
# 创建二维数组 方式二:使用列表推导式
rows = 5
cols = 4
array = [[0 for _ in range(cols)] for _ in range(rows)]
print(array)
增加元素
lst = []
lst.append('Google')
lst.insert(1, 'Facebook')
删除元素
del lst[1] # del语句可以删除整个列表或列表中的特定元素。如果要删除特定元素,需要使用其索引。
e = lst.pop(1) # 通过索引删除元素,返回元素值。
lst.remove('Google') # 通过元素值删除元素(只删除一个元素)
lst = [i for i in lst if i != 'Google'] # 通过元素值删除元素(可删除多个元素)
修改元素
查找元素
# 获取每个元素的下标和元素值
for index, num in enumerate(lst):
print(index, num)
切片
lst[1:] # 从第二个元素开始向后截取列表
lst[:4] # 从第五个元素开始向前截取列表(不包含第五个元素)
lst[1:4]
lst[1:4:2] #Python 列表截取可以接收第三个参数,参数作用是截取的步长,在索引 1 到索引 4 的位置并设置为步长为 2(不包含索引 4 的元素)
常用函数
len(lst) # 列表元素个数
max(lst) # 返回列表元素最大值
min(lst) # 返回列表元素最小值
lst.append(obj) # 在列表末尾添加新的对象obj
lst.count(obj) # 统计某个元素obj在列表中出现的次数
lst.extend(seq) # 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
lst.index(obj) # 从列表中找出某个值obj第一个匹配项的索引位置
lst.insert(index, obj) # 将对象obj插入列表
lst.pop([index=-1]) # 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
lst.remove(obj) # 移除列表中某个值的第一个匹配项
lst.reverse() # 反向列表中元素
lst.sort(cmp=None, key=None, reverse=False) #对原列表进行排序
# 获取每个元素的下标和元素值
for index, num in enumerate(lst):
print(index, num)
tup = tuple(lst) # 列表转换为元组
字典 dict
键是唯一的,值不需要唯一。
键必须不可变。 注意:数字,字符串或元组充当可以作为键,列表不行。
创建字典
dct = {}
dct = {'a': 1, 'b': 2}
增加元素
dct['c'] = 3
dct.update({'d':4})
删除元素
del dt['d'] # 删除键是'd'的条目
value = dct.pop('d', -999) # 移除并返回字典中指定键的值,如果键不存在则返回-999,不指定则返回默认值None
dt.clear() # 清空字典所有条目
del dt # 删除字典
try:
print(dt)
except Exception as e:
print(f'发生错误:{e}')
修改元素
与添加元素一模一样
dt['a'] = 'value'
dt.update({'a': 'value'})
查找元素
value = dt['key'] # 如果用字典里没有的键访问数据,会报错
dt.get('key', default=None) #根据key找对应value,找不到这返回default的值
常用函数
len(dt) # 计算字典元素个数,即键的总数。
dt.keys() # 输出所有键 输出为[key1, key2,……]
dt.values() # 输出所有值 输出为[value1, value2,……]
dt.items() # 以列表返回可遍历的(键, 值) 元组数组
dt.get(key, default=None) # 返回指定键的值,如果值不在字典中返回default值
dt.setdefault(key, default=None) # 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
dt.update(dt2) # 把字典dt2的键/值对更新到dict里
dt.pop(key[,default]) # 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。否则,返回default值。
dt.popitem() # 返回并删除字典中的最后一对键和值。
dt.clear() # 删除字典内所有元素
dt.copy() # 返回一个字典的浅复制
dt.fromkeys(seq[, val]) # 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
**集合 set **
集合的特点是没有重复元素。
创建集合
#1.用{}创建set集合
person ={"student","teacher","babe",123,321,123} #同样各种类型嵌套,可以赋值重复数据,但是存储会去重
print(person) #但是显示出来则是去重的 输出: {321, 'teacher', 'student', 'babe', 123}
#2.空set集合用set()函数表示
person1 = set() #表示空set,不能用person1={}
#3.用set()函数创建set集合
person2 = set(("hello","jerry",133,11,133,"jerru")) #只能传入一个参数,可以是list,tuple等 类型
print(len(person2)) # 输出: 5
print(person2) # 输出: {133, 'jerry', 11, 'jerru', 'hello'}
增加元素
add()不会拆分;update()会拆分
person ={"student","teacher","babe",123,321,123}
person.add("student") #如果元素已经存在,则不报错,也不会添加,不会将字符串拆分成多个元素,区别update
print(person) # 输出:{321, 'babe', 'teacher', 'student', 123}
person.add((1,23,"hello")) #可以添加元组,但不能是list
print(person) # 输出: {(1, 23, 'hello'), 321, 'babe', 'teacher', 'student', 123}
person.update((1,3)) #可以使用update添加一些元组列表,字典等。但不能是字符串,否则会拆分
print(person) # 输出:{321, 1, 3, 'teacher', (1, 23, 'hello'), 'babe', 'student', 123}
person.update("abc")
print(person) #会将字符串拆分成a,b,c三个元素 输出: {321, 1, 3, 'b', 'c', 'teacher', (1, 23, 'hello'), 'a', 'babe', 'student', 123}
删除元素
person.remove("student") #按元素去删除 # 如果不存在 ,会报错。
person.discard("student") #功能和remove一样,好处是没有的话,不会报错
person.pop() #在list里默认删除最后一个,在set里随机删除一个。
person.clear() # 直接清空set
修改元素
修改set中某个元素,因为是无序的,所以不能用角标。 一般修改都是使用remove,然后在add。
查找元素
# 查询是否存在,无法返回索引,使用in判断
if "teacher" in person:
print("true")
else:
print("不存在")
常用操作
set1 & set2 # 交集∩
set1 | set2 # 并集∪
set1 - set2 # 差集
set1 ^ set2 # 对称差 获取两个集合中不重叠的元素。
关键字
- break 语句 在语句块执行过程中终止循环,并且跳出整个循环
- continue 语句 在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。
库
标准库
os
获取file所在的目录绝对路径
file = 'root/abc/file.txt'
dir_path = os.path.dirname(file)
print(dir_path) # output: 'root/abc'
路径拼接:
判断路径是否存在(这里必须提供绝对路径):
os.path.exists(file_path)
sys
json
time
math
import math
math.abs(x) # 返回数字的绝对值,如abs(-10) 返回 10
math.ceil(x) # 返回数字的上入整数,如math.ceil(4.1) 返回 5
math.exp(x) # 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
math.floor(x) # 返回数字的下舍整数,如math.floor(4.9)返回 4
math.log(x) # 如math.log(math.e)返回1.0,math.log(100,10)返回2.0
math.log10(x) # 返回以10为基数的x的对数,如math.log10(100)返回 2.0
math.max(x1, x2,...) # 返回给定参数的最大值,参数可以为序列。
math.min(x1, x2,...) # 返回给定参数的最小值,参数可以为序列。
math.modf(x) # 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
math.pow(x, y) # x**y 运算后的值。
math.round(x [,n]) # 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
math.sqrt(x) # 返回数字x的平方根
math.choice(seq) # 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
math.randrange ([start,] stop [,step]) # 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
math.random() # 随机生成下一个实数,它在[0,1)范围内。
math.seed([x]) # 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
math.shuffle(list) # 将序列的所有元素随机排序
math.uniform(x, y) # 随机生成下一个实数,它在[x,y]范围内。
uuid
更多标准库的使用方法可参考:https://github.com/bat67/The-Python-Standard-Library-by-Example
第三方库
numpy
tensor与numpy的转换效率非常高,因此掌握numpy对于tenosr的学习有很大帮助。
pandas
Hugging Face提供了Dataset到pandas的转换函数,因此掌握pandas可以高效处理深度学习数据集。
什么是 pandas
pandas 是一个基于 Python 的数据分析与处理库,构建在 NumPy 之上,主要用于结构化数据(如表格数据)的处理与分析。
它提供了高效、灵活的数据结构,使数据清洗、分析、转换等操作变得简单直观。
数据结构
Series(一维数据)
import pandas as pd
s = pd.Series([10, 20, 30])
print(s)
DataFrame(二维数据)
import pandas as pd
# 从列表(数组)创建
data1 = [
["Alice", 25],
["Bob", 30]
]
# 从字典创建
data2 = {
"name": ["Alice", "Bob"],
"age": [25, 30]
}
df1 = pd.DataFrame(data1, columns=["name", "age"])
df2 = pd.DataFrame(data2)
print(df)
数据读取与保存
import pandas as pd
# 读取 CSV
df = pd.read_csv("data.csv")
df.to_csv("output.csv", index=False)
# 读取 Excel
df = pd.read_excel("data.xlsx")
df.to_excel("output.xlsx", index=False)
# 读取 JSON
df = pd.read_json("data.json")
# 将字典保存为csv文件
data = {
'model': 'VideoLLaMA2',
'dataset': 'EgoGazeVQA',
'gaze_prompt_type': 'embed',
'accuracy': 0.5017,
'causal_accuracy': 0.762,
'spatial_accuracy': 0.363,
'temporal_accuracy': 0.3797
}
# 注意:因为字典是一行数据,需要包装成列表 [data]
df = pd.DataFrame([data])
df.to_csv('results.csv', index=False, encoding='utf-8')
数据处理
# 增
df["salary"] = [5000, 6000]
# 删 inplace默认为False,即不会修改原始数据,而是返回一个新的对象。
df.drop("salary", axis=1, inplace=True) # 删除列
df.drop(0, axis=0, inplace=True) # 删除行
# 改
df.loc[0, "age"] = 26
# 查
df.head() # 前5行
df.tail() # 后5行
df.shape # 行列数
df.columns # 列名
df.index # 索引
df.info() # 数据类型和缺失值
df.describe() # 统计信息
# 列索引
df["name"] # 单列
df[["name", "age"]] # 多列
# 行索引
df.loc[0] # 按标签
df.iloc[0] # 按位置
# 条件索引
df[df["age"] > 25]
# 缺失值处理
df.isnull() # 判断缺失值
df.dropna() # 删除缺失值
df.fillna(0) # 填充缺失值
# 排序
df.sort_values("age", ascending=False)
# 分组
df.groupby("department")["salary"].mean()
# 数据合并
pd.concat([df1, df2])
pd.merge(df1, df2, on="id")
# 常用数据统计方法
.count()
.max()
.mode() # 众数
.var() # 方差
torch
Pytorch是一个用于机器学习和深度学习的开源框架,由Facebook于2016年发布,其主要实现了自动微分功能,并引入动态计算图使模型建立更加灵活。
Pytorch以Tensor作为数据的基本类型。Tensor的基本用法可参考:https://delluna.github.io/posts/2026/04/pytorch_fundamentals/