python基础

5 分钟阅读时长

发布时间:

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']  # 通过元素值删除元素(可删除多个元素)

修改元素

lst[1] = 'value'

查找元素

# 获取每个元素的下标和元素值
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.join(a,b,c)

判断路径是否存在(这里必须提供绝对路径)

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/