python - DataFrame查询数据操作

学习目标

  • 掌握获取df一列或多列数据的方法

  • 知道loc和iloc的区别以及使用方法

  • 知道df的query函数的使用方法

  • 知道isin函数的作用和使用方法

获取DataFrame子集的基本方法

1.1 从前从后获取多行数据

案例中用到的数据集在文章顶部   LJdata.csv

前景回顾 head() & tail()

import pandas as pd
​
# 加载csv数据集
df = pd.read_csv('LJdata.csv')
# 默认取前5行数据, 返回新的DataFrame
print(df.head())
# 取前10行数据
print(df.head(n=10))
​
# 默认取后5行数据, 返回新的DataFrame
print(df.tail())
# 取后10行数据
print(df.tail(n=10))

1.2 获取一列或多列数据

1.2.1 获取一列数据

获取一列数据, 通过df[列名]df.列名, 返回series对象

==注意:==如果列名字中间有空格, 只能通过df['列名']方式获取

print(df['户型'])
print(df.户型)
print(type(df['户型']))  # <class 'pandas.core.series.Series'>
1.2.2 获取多列数据

获取多列数据, 通过 df[[列名1, 列名2, ...]], 返回dataframe对象

==注意:==是两层[], 可以理解为df[列名的列表]

new_df = df[['区域', '地址']]
print(new_df)
print(type(new_df))  # <class 'pandas.core.frame.DataFrame'>

1.3 布尔值向量获取行数据

  • 布尔值向量:完全由布尔值组成的一维数据,布尔值向量形式为

    • 布尔值构成的列表

    • 布尔值构成的series

    • 布尔值构成的numpy.ndarray

  • df[[布尔值向量]] 其中布尔值向量的布尔值个数必须和df的行数(df.shape[0])相等

1.3.1 布尔值列表获取对应为True的行数据
df_head = df.head()
print(df_head)
print(df_head[[False, True, False, False, True]])
​
# 输出结果如下区域          地址    户型  面积  价格  朝向    更新时间  看房人数
0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26
1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
4  团结湖租房    团结湖北口  2室1厅    63  6400    南  2017.07.26        30区域        地址    户型  面积  价格 朝向    更新时间  看房人数
1    望京租房    澳洲康都  2室1厅    79  7800   东  2017.07.23        33
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30
1.3.2 布尔值构成的Series获取对应为True的行数据
print(df_head['面积'] > 80)  # 返回布尔值构成的series对象
print(df_head[temp_df['面积'] > 80])
​
# 输出结果如下
0    False
1    False
2     True
3     True
4    False
Name: 面积, dtype: bool区域          地址    户型  面积  价格  朝向    更新时间  看房人数
2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30
1.3.3 布尔值构成的ndarray获取对应为True的行数据
import numpy as np
n1 = np.array([False, True, False, False, True])
print(n1)
print(df_head[n1])
​
# 输出结果如下
[False  True False False  True]区域        地址    户型  面积  价格 朝向    更新时间  看房人数
1    望京租房    澳洲康都  2室1厅    79  7800   东  2017.07.23        33
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30

1.4 索引下标切片获取行数据

通过 df[起始行下标:结束行下标:步长], 获取多行数据

遵循==左闭右开==原则(包含起始行, 不包含结束行), 步长默认为1

temp_df = df.head(10) # 取原df前10行数据作为df4,默认自增索引由0到9
print(temp_df[0:3]) # 取前3行
print(temp_df[:5:2]) # 取前5行,步长为2
print(temp_df[1::3]) # 取第2行到最后所有行,步长为3
print(temp_df[-3:])  # 获取最后三行
​
# 输出结果如下区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34区域        地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房      新源街  2室1厅    50  5800   南  2017.07.21        26
2  广安门租房    远见名苑  2室1厅    86  8000   东  2017.07.20        34
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30区域        地址    户型  面积  价格 朝向    更新时间  看房人数
1    望京租房    澳洲康都  2室1厅    79  7800   东  2017.07.23        33
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30
7    马甸租房      月季园  2室1厅    53  6000   南  2017.07.16        26

loc通过行列名获取子集

df.loc[] 通过行名(行索引值、行索引名)、列名获取子集

2.1 行索引值获取1行数据

通过 df.loc[行索引值] 获取一行数据

# 获取行索引值为2的一行数据, 返回series
print(temp_df.loc[2]) 
​
# 输出结果如下
区域        广安门租房
地址          远见名苑
户型            2室1厅
面积                86
价格              8000
朝向                东
更新时间    2017.07.20
看房人数            34
Name: 2, dtype: object

2.2 行索引值获取多行数据

通过 df.loc[[行索引值1, 行索引值2, ...]] 获取多行数据

# 获取行索引值为0和2的两行数据, 返回dataframe
print(temp_df.loc[[0, 2]])
​
# 输出结果如下区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34

2.3 行索引值切片获取多行数据

通过 df.loc[起始行索引值:结束行索引值:步长] 获取多行数据

遵循==左闭右闭==原则(包含起始行, 包含结束行), 步长默认为1

==注意:==df.loc[起始行索引值:结束行索引值:步长] 不等同于 df[起始行下标:结束行下标:步长]

print(temp_df.loc[:3])  # 表示获取行索引值0到3的行数据
print(temp_df[:3])  # 表示获取行下标值0到2的行数据
​
# 输出结果如下区域          地址    户型  面积  价格  朝向    更新时间  看房人数
0    燕莎租房        新源街  2室1厅    50  5800    南  2017.07.21        26
1    望京租房      澳洲康都  2室1厅    79  7800    东  2017.07.23        33
2  广安门租房      远见名苑  2室1厅    86  8000    东  2017.07.20        34
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34

2.4 布尔值向量获取行数据

通过 df.loc[[布尔值向量]] 获取对应为True的行数据, 等同于 df[[布尔值向量]]

df_head = df.head()
n1 = np.array([False, True, False, False, True])
print(df_head.loc[n1])
​
# 输出结果如下区域        地址    户型  面积  价格 朝向    更新时间  看房人数
1    望京租房    澳洲康都  2室1厅    79  7800   东  2017.07.23        33
4  团结湖租房  团结湖北口  2室1厅    63  6400   南  2017.07.26        30

2.5 布尔值向量取行再配合列名取子集

通过 df.loc[布尔值向量, [列名1, 列名2, ...]] 获取子集

# print(temp_df['区域'] == '望京租房')  # 返回布尔值的series
​
# loc 有两个参数,参数1是布尔条件,参数2是选择查询的列
print(temp_df.loc[temp_df['区域'] == '望京租房', ['区域', '价格']])
​
# 输出结果如下区域  价格
1  望京租房  7800

2.6 行索引值取行再配合列名取子集

通过 df.loc[[行索引值1, 行索引值2, ...], [列名1, 列名2, ...]]

print(temp_df.loc[[1], ['区域', '价格']])
​
# 输出结果如下区域  价格
1  望京租房  7800
​
​
print(df.loc[4,'地址'])  # 得到的是字符串
​
# 输出结果如下团结湖北口  

2.7 行索引值切片取行再配合列名取子集

通过 df.loc[行索引值起始值:行索引值结束值:步长, [列名1, 列名2, ...]] 获取子集

遵循==左闭右闭==原则(包含起始行, 包含结束行), 步长默认为1

print(temp_df.loc[1:5:2, ['区域', '价格']])
print(temp_df.loc[:, ['区域', '价格']])
​
# 输出结果如下区域  价格
1    望京租房  7800
3  天通苑租房  5300
5  回龙观租房  4000区域  价格
0    燕莎租房  5800
1    望京租房  7800
2  广安门租房  8000
3  天通苑租房  5300
4  团结湖租房  6400
5  回龙观租房  4000
6    北苑租房  7500
7    马甸租房  6000
8  小西天租房  8500
9    北苑租房  5300

3 iloc通过行列下标获取子集

df.iloc[] 通过行下标(行索引下标、行序号)、列下标获取子集

3.1 行下标获取1行数据

通过 df.iloc[行下标] 获取一行数据

# 获取行索引下标为2的一行数据, 返回series
dict_data= {'歌手':['周杰伦','张国荣','罗大佑'],'歌曲':['七里香','沉默是金','童年']
}
df_star = pd.DataFrame(data=dict_data,index=[2004,1991,1982],columns=['歌手','歌曲'])
print(df_star)
​
print(df_star.iloc[0])  # 行索引是: 2004 1991 1982   # 行下标是 : 0 1 2 
​
# 输出结果
歌手    周杰伦
歌曲    七里香
Name: 2004, dtype: object

3.2 行下标获取多行数据

通过 df.iloc[[行下标1, 行下标2, ...]] 获取多行数据

# 获取行索引下标为0和2的两行数据, 返回dataframe
print(df_star.iloc[[0, 2]])
​
# 输出结果如下歌手   歌曲
2004  周杰伦  七里香
1982  罗大佑   童年

3.3 行下标切片获取多行数据

通过 df.iloc[起始行下标:结束行下标:步长] 获取多行数据

遵循==左闭右开==原则(包含起始行, 不包含结束行), 步长默认为1

==注意:==df.iloc[起始行下标:结束行下标:步长] 等同于 df[起始行下标:结束行下标:步长]

print(temp_df.iloc[:3])  # 表示获取行下标为0到2的行数据
print(temp_df[:3])  # 表示获取行下标为0到2的行数据
​
# 输出结果如下区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34区域      地址    户型  面积  价格 朝向    更新时间  看房人数
0    燕莎租房    新源街  2室1厅    50  5800   南  2017.07.21        26
1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
2  广安门租房  远见名苑  2室1厅    86  8000   东  2017.07.20        34

3.4 行列下标切片取子集

通过 df.iloc[起始行下标:结束行下标:步长, 起始列下标:结束列下标:步长] 获取子集

遵循==左闭右开==原则(包含起始行/列, 不包含结束行/列), 步长默认为1

# 第1行到第5行,每2行选第1行;所有列,每2列取第1列
print(temp_df.iloc[0:5:2, ::2])
​
# 输出结果如下区域    户型  价格    更新时间
0    燕莎租房  2室1厅  5800  2017.07.21
2  广安门租房  2室1厅  8000  2017.07.20
4  团结湖租房  2室1厅  6400  2017.07.26

3.5 行下标切片和列下标取子集

通过 df.iloc[起始行下标:结束行下标:步长, [列下标1, 列下标2, ...]] 获取子集

遵循==左闭右开==原则(包含起始行, 不包含结束行), 步长默认为1

# 第1行到第5行,每2行选第1行;第1列和第3列
print(temp_df.iloc[0:5:2, [0, 2]])
​
# 输出结果如下区域    户型
0    燕莎租房  2室1厅
2  广安门租房  2室1厅
4  团结湖租房  2室1厅

3.6 行下标和列下标取子集

通过 df.iloc[[行下标1, 行下标2, ...], [列下标1, 列下标2, ...]]

# 第1行、第3行、第5行;第1列和第3列
print(temp_df.iloc[[0, 2, 4], [0, 2]])
​
# 输出结果如下区域    户型
0    燕莎租房  2室1厅
2  广安门租房  2室1厅
4  团结湖租房  2室1厅

3.7 行下标和列下标切片取子集

通过 df.iloc[[行下标1, 行下标2, ...], 起始列下标:结束列下标:步长] 获取子集

遵循==左闭右开==原则(包含起始列, 不包含结束列), 步长默认为1

# 第1行、第3行、第5行;所有列,每2列取第1列
print(temp_df.iloc[[0, 2, 4], ::2])
​
# 输出结果如下区域    户型  价格    更新时间
0    燕莎租房  2室1厅  5800  2017.07.21
2  广安门租房  2室1厅  8000  2017.07.20
4  团结湖租房  2室1厅  6400  2017.07.26

4 query函数获取子集

通过 df.query(判断表达式) 获取符合条件的df子集, 与 df[[布尔值向量]] 效果相同

==注意:==判断表达式为字符串格式

  • 示例

    print(temp_df.query("区域=='望京租房'"))  #  区域是列名  ,望京租房是值
    print(temp_df[temp_df['区域'] == '望京租房'])
    ​
    # 输出结果如下区域      地址    户型  面积  价格 朝向    更新时间  看房人数
    1  望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33

  • 查询租房区域为望京、天通苑、回龙观并且朝向为东、南的房源数据

    ​
    # .query().query()是链式编程, 第一个query查询之后,第二个query会在第一个的基础上再进行查询
    ​
    print(temp_df.query('区域 in ["望京租房", "天通苑租房", "回龙观租房"]').query('朝向 in ["东", "南"]'))
    ​
    print(temp_df.query('(区域 in ["望京租房", "天通苑租房", "回龙观租房"]) and (朝向 in ["东", "南"])'))
    ​
    # 作用同上
    print(temp_df.query('(区域 in ["望京租房", "天通苑租房", "回龙观租房"]) & (朝向 in ["东", "南"])'))
    ​
    ​
    # 输出结果如下区域      地址    户型  面积  价格 朝向    更新时间  看房人数
    1    望京租房  澳洲康都  2室1厅    79  7800   东  2017.07.23        33
    5  回龙观租房    龙华园  1室1厅    58  4000   南  2017.07.23        61

5 isin函数获取子集

通过 df.isin(values=[值1, 值2, ...]) 判断df中的数据值是否在values列表值中, 返回由布尔值构成的新df

原df中数据值在values列表中返回True, 否则返回False

temp_df = df.head(5)
# 拿到temp_df每行每列的值去和'天通苑租房'比较,如果比较成功,返回True,否则false
print(temp_df.isin(values=['天通苑租房']))
​
# 拿到temp_df每行每列的值去和'天通苑租房'或者'南'比较,如果比较成功,返回True,否则false
print(temp_df.isin(values=['天通苑租房', '南']))
​
print(temp_df[temp_df.isin(values=['天通苑租房', '南'])])
​
print(temp_df[((temp_df["区域"]=='望京租房') | (temp_df['区域']=='天通苑租房') | (temp_df['区域']=='回龙观租房')) & ((temp_df['朝向']=='东') | (temp_df['朝向']=='南'))])
​
​
​
# 输出结果如下区域   地址   户型   面积   价格   朝向  更新时间  看房人数
0  False  False  False  False  False  False     False     False
1  False  False  False  False  False  False     False     False
2  False  False  False  False  False  False     False     False
3   True  False  False  False  False  False     False     False
4  False  False  False  False  False  False     False     False区域   地址   户型   面积   价格   朝向  更新时间  看房人数
0  False  False  False  False  False   True     False     False
1  False  False  False  False  False  False     False     False
2  False  False  False  False  False  False     False     False
3   True  False  False  False  False  False     False     False
4  False  False  False  False  False   True     False     False区域 地址 户型  面积  价格 朝向 更新时间  看房人数
0         NaN  NaN  NaN   NaN   NaN   南      NaN       NaN
1         NaN  NaN  NaN   NaN   NaN  NaN      NaN       NaN
2         NaN  NaN  NaN   NaN   NaN  NaN      NaN       NaN
3  天通苑租房  NaN  NaN   NaN   NaN  NaN      NaN       NaN
4         NaN  NaN  NaN   NaN   NaN   南      NaN       NaN

Serires对象使用isin函数返回新的s对象,其他完全相同

print(temp_df['区域'].isin(values=['天通苑租房']))
print(temp_df['区域'].isin(values=['天通苑租房', '回龙观租房']))
print(temp_df[temp_df['区域'].isin(values=['天通苑租房', '回龙观租房'])])
​
​
# 输出结果如下
0    False
1    False
2    False
3     True
4    False
Name: 区域, dtype: bool
0    False
1    False
2    False
3     True
4    False
Name: 区域, dtype: bool区域          地址    户型  面积  价格  朝向    更新时间  看房人数
3  天通苑租房  天通苑北一区  2室1厅   103  5300  东南  2017.07.25        30

总结

请对下列API 有印象、能找到、能理解、能看懂

  • API清单

子集操作方法方法说明
df.head(n)获取前n行数据,默认5行
df.tail(n)获取最后n行数据,默认5行
df[列名] 或 df.列名获取一列数据
df[[列名1,列名2,...]]获取多列数据
df[[布尔值向量]]df[[True, False, ...]]取出对应为True的数据行
df[起始行下标:结束行下标:步长]行下标(索引下标)切片获取数据行
df.loc[行索引值]索引值(行名)获取1行数据
df.loc[[行索引值1, 行索引值2, ...]]索引值(行名)获取多行数据
df.loc[起始行索引值:结束行索引值:步长]索引值(行名)切片获取多行数据,注意与df[起始行下标:结束行下标:步长]不同
df.loc[[布尔值向量]]布尔值向量获取行数据,等同于df[[布尔值向量]]
df.loc[布尔值向量,[列名1, 列名2, ...]]布尔值向量取行再配合列名取子集
df.loc[[行索引值1, 行索引值2, ...], [列名1, 列名2, ...]]索引值取行再配合列名取子集
df.loc[行索引值起始值:行索引值结束值:步长, [列名1, 列名2, ...]]列名取子集
df.iloc[行下标]行下标取1行
df.iloc[[行下标1, 行下标2, ...]]行下标取多行
df.iloc[起始行下标:结束行下标:步长]行下标切片取多行
df.iloc[起始行下标:结束行下标:步长,起始列下标:结束列下标:步长]行列下标切片取子集
df.iloc[起始行下标:结束行下标:步长,[列下标1, 列下标2, ...]]行下标切片和列下标取子集
df.iloc[[行下标1, 行下标2, ...], [列下标1, 列下标2, ...]]行下标和列下标取子集
df.iloc[[行下标1, 行下标2, ...], 起始列下标:结束列下标:步长]行下标和列下标切片取子集
df.query('判断表达式字符串')df[[布尔值向量]]效果相同依据判断表达式返回符合条件的df子集
df.isin([值1, 值2, ...])判断是否存在某个值
  • loc和iloc的区别:

    • loc是根据行列名获取子集,行列名是肉眼看到的值

    • iloc是根据行列下标获取子集,行列下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/849636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现树形结构几种方式

1&#xff0c;三级分类树形结构查询 /*** DDD(Domain-Driven Design): 领域驱动设计** 三级分类树形结构&#xff1b;* 支持无限层级&#xff1b;* 当前项目只有三级*/ Data public class CategoryTreeTo {private Long categoryId; //1private String categoryName;private …

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(四)---- C语言与计算机架构(Programming xv6 in C)

系列文章目录 操作系统入门系列-MIT6.S081&#xff08;操作系统&#xff09;学习笔记&#xff08;一&#xff09;---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828&#xff08;操作系统工程&#xff09;学习笔记&#xff08;二&#xff09;----课程实验环境搭建&#x…

linux系统——route路由命令

route路由对linux内的ip路由表进行操作 计算机间的数据通信是通过网络来实现的&#xff0c;路由就是从源主机到目标主机的转发过程 路由分为静态路由与动态路由&#xff0c;linux中的均为静态路由&#xff0c;动态路由由交换机路由器自动分配规则而来

[word] word悬挂缩进怎么设置? #经验分享#职场发展#经验分享

word悬挂缩进怎么设置&#xff1f; 在编辑Word的时候上方会有个Word标尺&#xff0c;相信很多伙伴都没使用过。其实它隐藏着很多好用的功能&#xff0c;今天就给大家分享下利用这个word标尺的悬挂缩进怎么设置&#xff0c;一起来看看吧&#xff01; 1、悬挂缩进 选中全文&…

Linux Mint 默认禁用未经验证的 Flatpak 软件包

Linux Mint 默认禁用未经验证的 Flatpak 软件包 Linux Mint 新政策 Linux Mint 项目宣布了一项新政策&#xff0c;即默认禁用那些未经官方验证的 Flatpak 软件包&#xff0c;以增强用户的安全保障。 当用户选择启用未经验证的 Flatpak 软件包时&#xff0c;Linux Mint 的软…

JAVA开发的一套(智造制造领航者云MES系统成品源码)saas云MES制造执行系统源码,全套源码,支持二次开发

JAVA开发的一套&#xff08;智造制造领航者云MES系统成品源码&#xff09;saas云MES制造执行系统源码&#xff0c;全套源码&#xff0c;支持二次开发 1990年11月&#xff0c;美国先进制造研究中心AMR&#xff08;Advanced Manufacturing Research&#xff09;就提出了MES&#…

Linux守护进程揭秘-无声无息运行在后台

在Linux系统中&#xff0c;有一些特殊的进程悄无声息地运行在后台&#xff0c;如同坚实的基石支撑着整个系统的运转。它们就是众所周知的守护进程(Daemon)。本文将为你揭开守护进程的神秘面纱&#xff0c;探讨它们的本质特征、创建过程&#xff0c;以及如何重定向它们的输入输出…

国产主流软硬件厂商生态分析

国产领域主流厂商汇总 信创&#xff0c;即信息技术应用创新&#xff0c;由“信息技术应用创新工作委员会”于2016年3月4日发起&#xff0c;是专注于软硬件关键技术研发、应用与服务的非营利性组织。作为科技自强的关键力量&#xff0c;信创在我国信息化建设中占据核心地位&…

外部mysql导入

利用这个命令&#xff1a; mysql -u username -p database_name < file.sql 然后就这样。成功导入。

定个小目标之每天刷LeetCode热题(12)

这是一道简单题&#xff0c;使用位运算中的异或运算即可&#xff0c;异或运算有以下性质&#xff1a; 1、任何数异或 0 结果仍然是原来的数&#xff0c;即 a⊕0a 2、任何数和其自身做异或运算&#xff0c;结果是 0 所以我们只需要让数组里的所有元素进行异或运算得到的结果就…

探索风电机组:关键软件工具全解析

探索风电机组&#xff1a;关键软件工具全解析 随着可再生能源市场的迅猛发展&#xff0c;风电作为一种重要的可再生能源&#xff0c;其相关技术和工具也越来越受到重视。风电机组的设计、仿真、优化及运维等方面&#xff0c;都需要依靠一系列专业软件工具来实现。这些软件涵盖…

Netty中的ByteBuf使用介绍

ByteBuf有三类&#xff1a; 堆缓存区&#xff1a;JVM堆内存分配直接缓冲区&#xff1a;有计算机内存分配&#xff0c;JVM只是保留分配内存的地址信息&#xff0c;相对于堆内存方式较为昂贵&#xff1b;复合缓冲区&#xff1a;复合缓冲区CompositeByteBuf&#xff0c;它为多个B…

VS2019创建c++动态链接库dll与调用方法

VS2019创建c动态链接库dll与调用方法 1.点击文件-》新建-》项目&#xff0c;输入dll,选择具有导出项的(DLL)动态链接库 2.输入一个文件名&#xff1a;dll2 头文件.h 3.添加加减法函数&#xff1a; // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的…

题解web

1.[LitCTF 2023]Follow me and hack me 1&#xff09;进入题目环境&#xff0c;提示get传参&#xff0c;post传参 2&#xff09;看看源码&#xff0c;也没啥 3&#xff09;直接用hackbar&#xff0c;传入对应参数即可得到FLAG 3&#xff09;但是扫描出来它后端还有东西&#x…

Vue 学习笔记 总结

Vue.js 教程 | 菜鸟教程 (runoob.com) 放一下课上的内容 Vue练习 1、练习要求和实验2的用户注册一样&#xff0c;当用户输入后&#xff0c;能在下方显示用户输入的各项内容&#xff08;不需要实现【重置】按钮&#xff09; 2、实验报告中的实验小结部分来谈谈用JS、jQuery和…

618数码产品有什么推荐?四大2024“宝藏”数码产品推荐!

随着618购物节的热情逐渐升温&#xff0c;你是否在繁多且诱人的商品海洋中迷失方向&#xff0c;难以找到那最心仪的宝贝&#xff1f;团团在此特别为你精心挑选了一系列经过亲身体验的优质好物。这些推荐不仅时尚前沿&#xff0c;更贴合你的日常生活需求&#xff0c;确保实用与品…

霸气的短视频:成都科成博通文化传媒公司

霸气的短视频&#xff1a;瞬间的力量与魅力 在数字化浪潮中&#xff0c;短视频以其独特的魅力迅速崛起&#xff0c;成为社交媒体的新宠。而在众多短视频中&#xff0c;那些充满霸气、让人热血沸腾的作品&#xff0c;总能引起广泛的关注和讨论。成都科成博通文化传媒公司将从内…

CSS基础知识汇总

目录 CSS 基础知识1. CSS 的基本结构2. 选择器3. 常用 CSS 属性4. CSS 单位5. CSS 盒模型 总结 学习 CSS&#xff08;Cascading Style Sheets&#xff09;是前端开发的重要部分&#xff0c;它用于控制网页的样式和布局。以下是学习 CSS 过程中需要掌握的基本概念、符号和对应的…

Vue08-数据代理

一、Object.defineProperty() Object.defineProperty() 是 JavaScript 中的一个方法&#xff0c;用于直接在一个对象上定义一个新属性&#xff0c;或者修改一个对象的现有属性&#xff0c;并返回这个对象。 这个方法允许你精确地控制一个对象的属性&#xff0c;包括它的值、是…

数据库存储过程和锁机制

存储过程 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的&#xff0c;存储过程思想上很简单,就是数据库SQL语言层面的代码封装与有重用 …