【Python】基础知识(函数与数据容器)

笔者在C语言基础上学习python自用笔记

熟练使用python

type() 返回数据类型

name = "root"
hei = 1.8
wei = 77
type_hei = type(hei)
type_wei = type(wei)
print(type(name))
print(type_hei)
print(type_wei)

在python中变量是没有类型的,它存储的数据是有类型的。

数据类型转换:Python 笔记 — 数据类型转换

字符串

字符串三种定义方式:

  1. 单引号
  2. 双引号
  3. 三引号:三引号的写法和多行注释一样,如果把它赋给一个变量接收,那它就是字符串

引号的嵌套

#单引号内可以写双引号
name = '"root"'
print(name)
#双引号内可以写单引号
name = "'root'"
print(name)
#使用\来转义
name = "\"root\""
print(name)
name = '\'root\''
print(name)

字符串拼接

name = "root"
num = 1729
print("my name is "+ name + ",do you know me?"+ str(num) + " is an interesting number.")

字符串格式化

类似于C语言

hei = 1.8
wei = 77
print("my height is %s,my weight is %s" % (hei , wei) )
#这里是将浮点型和整型转为了字符型,当然你也可以这样写
print("my height is %f,my weight is %d" % (hei , wei) )

数字精度控制

使用m.n来控制数据的宽度和精度

  • m,控制宽度,设置的宽度小于数字自身,不生效
  • n,控制小数点精度,会进行小数的四舍五入

示例:

  • %5d:表示将整数的宽度控制在5位,如数字11,被设置为5d,就会变成:[空格] [空格] [空格] 11,用三个空格补足宽度
  • %5.2f:表示将宽度控制为5,将小数点精度设置为2;小数点和小数部分也算入宽度计算。如:对11.345设置了%7.2f后,结果是:[空格] [空格] 11.35,2个空格补足宽度,小数部分限制2位精度后,四舍五入为.35
  • %.2f:表示不限制宽度,只设置小数点精度为2,如11.345设置%.2f后,结果是11.35

格式化快速写法:f"内容{变量}"

name = "root"
hei = 1.8
wei = 77
print(f"my name is {name},my height is {hei},my weight is {wei}.")
#不做精度控制

输入

print("请告诉我你是谁?")
name = input()
print("我知道了,你是%s" % (name))
#可以直接这样写:
name = input("请告诉我你是谁?")
print("我知道了,你是%s" % (name))

input默认把输入的数据视为字符串类型

判断

age = 25
#age = 15
print(f"已经{age}岁了")
if age>=18 :print("成年了")print("该扛起重担了")
else:print("珍惜时光吧")
print("时间过得真快")

注意缩进,不同的缩进处于不同的级下;根据age的不同观察结果的不同

if_elif_else

score=70
if score>=80 :print("优秀")
elif score>=60 :print("及格")
else :print("不及格")

循环

while

i = 0
while i<5:print("machine")i+=1

for

格式:

for 临时变量 in 待处理数据集:循环满足条件时执行的代码

实例:

name = "root"
for x in name:print(x)

待处理数据集严格来说称之为序列类型(其内容可以一个个依次取出的一种类型)包括字符串、列表、元组等。

range

range(num):获取一个从0开始,到num结束的数字序列(不含num本身)
如range(5)取得的数据是:[0,1,2,3,4]

range(num1,num2):获取一个从num1开始,到num2结束的数字序列(不含num2本身)
如range(5,10)取得的数据是:[5,6,7,8,9]

range(num1,num2,step):获取一个从num1开始,到num2结束的数字序列(不含num2本身),数字之间的步长为step
如range(5,10,2)取得的数据是:[5,7,9]

for x in range(0,20,3):print(x)

函数

定义:

def 函数名(传入参数):函数体return 返回值

字面量None 类型:<class ‘NoneType’>

无返回值的函数,实际上就是返回了None这个字面量

None可用于if判断,相当于false

def check_age(age):if age >= 18:return "SUCCESS"else:return None
result = check_age(16)
if not result:print("不能进入!")

None可用于声明无初始内容的变量

name = None

函数的说明文档:在def语句的下面进行多行注释会自动生成

使用global关键字可以在函数内部声明变量为全局变量

num = 100
def testA():print(num)def testB():#global numnum = 200print(num)testA()
testB()
print(num)

如果一个函数要有多个返回值,该如何书写代码?

按照返回值的顺序,写对应顺序的多个变量接收即可

变量之间用逗号隔开

支持不同类型的数据return

def test_return():return 1,2
x,y = test_return()
print(x) #输出1
print(y) #输出2

函数参数种类

位置参数:调用函数时根据函数定义的参数位置来传递参数

def user_info(name,age,gender):print(f"您的名字是{name},年龄是{age},性别是{gender}")
user_info('root',25,'女')

注意:传递的参数和定义的参数的顺序及个数必须一致

关键字参数:调用函数时通过“键=值”的形式传递参数

作用:可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求

def user_info(name,age,gender):print(f"您的名字是{name},年龄是{age},性别是{gender}")
user_info(age=25,gender="女",name="root")
#可以和位置参数混用,位置参数必须在前,且匹配参数顺序
user_info("root",age=25,gender="女")

缺省参数:也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值

注意:所有位置参数必须出现在默认参数前,包括函数定义和调用

作用:当调用函数时没有传递参数,就会使用默认是缺省参数对应的值

def user_info(name,age,gender="男"):print(f"您的名字是{name},年龄是{age},性别是{gender}")
user_info("root",25)
user_info("root",25,"女")

不定长参数:也叫可变参数,用于不确定调用的时候会传递多少个参数(不传参也可以)的场景

作用:当调用函数时不确定参数个数,可以使用不定长参数

类型:1.位置传递 2.关键字传递

1.位置传递

def user_info(*info):print(info)
user_info("root")
user_info("root",25,"女")

输出结果:

('root',)
('root', 25, '女')

参数可以传任意个,传进的所有参数都会被info变量收集,它会根据传进参数的位置合并为一个元组

2.关键字传递

传递的参数为“键=值”的形式,会合并为一个字典

def user_info(**info):print(info)
user_info(name="root")
user_info(name="root",age=25,gender="女")

输出结果:

{'name': 'root'}
{'name': 'root', 'age': 25, 'gender': '女'}

函数作为参数传递

def test_func(compute):result = compute(1,2)print(type(compute))print(result)
def compute(x,y):return x+y
test_func(compute)

输出结果:

<class 'function'>
3

lambda匿名函数

  • def关键字,可以定义带有名称的函数

  • lambda关键字,可以定义匿名函数(无名称)

  • 有名称的函数,可以基于名称重复使用

  • 无名称的匿名函数,只可临时使用一次

定义语法:lambda 传入参数: 函数体(一行代码)

上述代码可以写成

def test_func(compute):result = compute(1,2)print(type(compute))print(result)
test_func(lambda x,y:x+y)

数据容器

列表(list)

列表的定义

name_list = ["C++","Python","Java"]
print(name_list)
print(type(name_list))
#列表存储的数据类型可以不一样
#嵌套列表:
my_list = [["root",1.8,77],["嵌套",[1729,3.14]]]
print(my_list)

列表的下标索引

name_list = ["C++","Python","Java"]
print(name_list[0])
print(name_list[1])
print(name_list[2])
print(name_list[-1])
print(name_list[-2])
print(name_list[-3])
my_list = [["root",1.8,77],["嵌套",[1729,3.14]]]
print(my_list[0][1])
print(my_list[1][0])
print(my_list[1][1][1])

输出结果:

C++
Python
Java
Java
Python
C++
1.8
嵌套
3.14

列表的方法

列表.index(元素)

查找指定元素在列表的下标,如果找不到,报错ValueError

name_list = ["C++","Python","Java"]
print(name_list.index("C++"))
#print(name_list.index("php"))

列表[下标]=值

重新赋值

name_list = ["C++","Python","Java"]
name_list[0]="php"
print(name_list)

列表.insert(下标,元素)

在指定的下标位置插入指定的元素

name_list = ["C++","Python","Java"]
name_list.insert(1,"php")
print(name_list)

列表.append(元素)

将指定元素追加到列表的尾部

name_list = ["C++","Python","Java"]
name_list.append("php")
print(name_list)

列表.extend(其他数据容器)

将其他数据容器的内容取出,依次追加到列表尾部

name_list = ["刘备","关羽","张飞"]
name_list.extend(["诸葛亮","赵云","马超"])
print(name_list)

删除元素

  • del 列表[下标]
  • 列表.pop(下标)
name_list = ["刘备","关羽","张飞","诸葛亮","赵云","马超"]
del name_list[5]
print(name_list)
element = name_list.pop(4)
print(element)
print(name_list)

列表.remove(元素)

删除某元素在列表中的第一个匹配项

name_list = ["刘备","关羽","张飞","诸葛亮","张飞","马超"]
name_list.remove("张飞")
print(name_list)

列表.clear()

清空列表

name_list = ["刘备","关羽","张飞"]
name_list.clear()
print(name_list)

列表.count(元素)

统计某元素在列表内的数量

name_list = ["刘备","关羽","张飞","诸葛亮","张飞","马超"]
print(name_list.count("张飞"))

len(容器)

统计容器内有多少元素

name_list = ["刘备","关羽","张飞","诸葛亮","张飞","马超"]
print(len(name_list))

列表的遍历

while

index = 0
name_list = ["刘备","关羽","张飞","诸葛亮","张飞","马超"]
while index < len(name_list) :print(name_list[index])index += 1

for

name_list = ["刘备","关羽","张飞","诸葛亮","张飞","马超"]
for element in name_list:print(element)

元组(tuple)

元组的定义

元组在定义之后不可更改数据,可以理解为只读的list

比如,我们想存储桃园三结义的人物,肯定就是下面这三个;我们不希望它能被更改,改成”刘备、孙权、曹操“就不好了。这时候就要用到元组(tuple)

name_tuple = ("刘备","关羽","张飞")
print(type(name_tuple))
print(f"桃园三结义的是{name_tuple}")
#定义空元组
t1 = ()
t2 = tuple()
#元组只有一个数据时,这个数据后面要添加逗号
t3 = ('only',)
#嵌套元组:
three_country = (("曹操","曹丕","曹冲"),("刘备","刘禅"),("孙坚","孙策","孙权"))
print(three_country)
print(three_country[1][1])

元组内存储列表时,列表的内容可以改变

t4 = (1729,3.14,["root","smile"])
t4[2][1] = "cry"
print(t4)

方法等参照列表

字符串(str)

  • 字符串支持下标索引
  • 字符串不能被修改

字符串.replace(字符串1,字符串2)

将字符串内的全部“字符串1”替换为“字符串2”

注意:并非修改字符串本身,而是得到了一个新的字符串

str1 = "happy sad scared mad"
print(str1.index("sad"))
str2 = str1.replace("ad","da")
print(str1)
print(str2)

输出结果:

6
happy sad scared mad
happy sda scared mda

字符串.split(分隔符字符串)

按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中

注意:字符串本身不变,而是得到了一个列表对象

str3 = "apple,banana,pear,peach,mango"
list_str3 = str3.split(",")
print(str3)
print(list_str3)

输出结果:

apple,banana,pear,peach,mango
['apple', 'banana', 'pear', 'peach', 'mango']

字符串的规整操作

  • 字符串.strip():去前后空格
  • 字符串.strip(字符串):去前后指定字符串
str4 = " I have never let my schooling interfere with my education. "
str4_c = str4.strip()
str5 = "12I have never let my schooling interfere with my education.21"
str5_c = str5.strip("12")
#并非完全按照"12",而是满足其子串"1""2"就会去除
print(str4)
print(str4_c)
print(str5)
print(str5_c)

输出结果:

 I have never let my schooling interfere with my education. 
I have never let my schooling interfere with my education.
12I have never let my schooling interfere with my education.21
I have never let my schooling interfere with my education.

序列

序列是指:内容连续、有序,可使用下标索引的一类数据容器

列表、元组、字符串,均可以视为序列

切片:从一个序列中,取出一个子序列

语法:序列[起始下标:结束下标:步长]

表示从序列中的指定位置开始,依次取出元素,到指定位置结束,得到一个新序列

起始下标表示从何处开始,可以留空,留空视作从头开始

结束下标表示何处结束(不包含此下标),可以留空,留空视作截取到结尾

步长表示依次取出元素的间隔

  • 步长1表示,一个个取元素(可以省略)
  • 步长2表示,每次跳过1个元素取
  • 步长N表示,每次跳过N-1个元素取
  • 步长为负数表示,反向取(注意,起始和结束下标也要反向标记)

切片的操作并不会影响序列本身,而是会得到一个新的序列

my_list = ["a",1,2,3,3.14]
qie_list = my_list[1:4]
my_tuple = (4,5,6,7,8)
qie_tuple = my_tuple[:]
my_str = "lexicographer"
qie_str = my_str[-1:-10:-3]
print(qie_list)
print(qie_tuple)
print(qie_str)

输出结果:

[1, 2, 3]
(4, 5, 6, 7, 8)
rpg

集合(set)

集合的定义

set1 = set() #定义空集合
set1 = {"C++","Java","Python","C++","Java"}
print(set1)
print(type(set1))

输出结果:

{'C++', 'Java', 'Python'}
<class 'set'>
  • 集合是无序的,所以不支持下标索引访问
  • 集合是允许修改的

集合的操作

set1 = {"C++","Java","Python","C++","Java"}
#添加新元素
set1.add("php")
set1.add("C++")
print(set1) #输出结果:{'Python', 'Java', 'C++', 'php'}
#移除元素
set1.remove("Java")
print(set1) #输出结果:{'C++', 'Python', 'php'}
#随机取出一个元素
element = set1.pop()
print(element)
print(set1)
print(len(set1))
#清空集合
set1.clear()
print(set1) #输出结果:set()

集合1.difference(集合2)

取出集合1和集合2的差集(集合1有而集合2没有的),得到一个新集合,集合1和2不变

set1 = {1,2,3,4}
set2 = {3,4,5,6}
set3 = set1.difference(set2)
print(set1)
print(set2)
print(set3)

输出结果:

{1, 2, 3, 4}
{3, 4, 5, 6}
{1, 2}

集合1.difference_update(集合2)

在集合1内,删除和集合2相同的元素;集合1被修改,集合2不变

set1 = {1,2,3,4}
set2 = {3,4,5,6}
set1.difference_update(set2)
print(set1)
print(set2)

输出结果:

{1, 2}
{3, 4, 5, 6}

集合1.union(集合2)

将集合1和集合2组成新集合;得到新集合,集合1和2不变

set1 = {1,2,3,4}
set2 = {3,4,5,6}
set3 = set1.union(set2)
print(set1)
print(set2)
print(set3)

输出结果:

{1, 2, 3, 4}
{3, 4, 5, 6}
{1, 2, 3, 4, 5, 6}

集合的遍历

因为集合不支持下标索引,所以不能用while循环

set1 = {1,2,3,4}
for element in set1:print(element)

字典(dict)

字典的定义

字典的定义同样使用{},不过存储的元素是一个个的“键值对”(key : value)

dict1 = {} #定义空字典
#也可以这样:dict1 = dict()
print(dict1)
dict1 = {"李雷":88,"韩梅梅":90,"李华":99}
print(dict1)
print(type(dict1))

输出结果:

{}
{'李雷': 88, '韩梅梅': 90, '李华': 99}
<class 'dict'>

字典的key是不可以重复的

dict1 = {"李雷":88,"韩梅梅":90,"李华":99,"韩梅梅":95}
print(dict1)

输出结果:

{'李雷': 88, '韩梅梅': 95, '李华': 99}

字典也不可以使用下标索引,但可以通过key值来取得对应的value

dict1 = {"李雷":88,"韩梅梅":90,"李华":99}
print(dict1["李华"]) #输出结果:99

字典的key和value可以是任意数据类型(key不可为字典)

字典的嵌套

嵌套字典

代码示例:

score = {"王力鸿": {"语文":77,"数学":66,"英语":33},"周杰轮": {"语文":88,"数学":86,"英语":55},"林俊节": {"语文":99,"数学":96,"英语":66}
}
print(score)
print(score["周杰轮"])
print(score["林俊节"]["数学"])

输出结果:

{'王力鸿': {'语文': 77, '数学': 66, '英语': 33}, '周杰轮': {'语文': 88, '数学': 86, '英语': 55}, '林俊节': {'语文': 99, '数学': 96, '英语': 66}}
{'语文': 88, '数学': 86, '英语': 55}
96

字典的操作

字典[key]=value

  • key存在,即修改了value
  • key不存在,即新增了元素
poem = {"李白":"诗仙","杜甫":"诗圣","李贺":"诗鬼","白居易":"诗魔"
}
poem["王维"] = "诗佛"
print(poem)
poem["李白"] = "天生我材必有用,千金散尽还复来"
print(poem)

输出结果:

{'李白': '诗仙', '杜甫': '诗圣', '李贺': '诗鬼', '白居易': '诗魔', '王维': '诗佛'}
{'李白': '天生我材必有用,千金散尽还复来', '杜甫': '诗圣', '李贺': '诗鬼', '白居易': '诗魔', '王维': '诗佛'}

字典.pop(key):获得指定key的value,同时字典被修改,指定key的数据被删除

字典.clear():清空字典

字典.keys():返回字典中的全部key

我们可以用获取到的key对字典进行遍历

也可以直接对字典进行遍历,每一次循环都是直接得到key

代码实例:

price = {"铅笔":"1块","橡皮":"5毛","笔袋":"9块9包邮","衬衫":"9镑15便士"
}
keys = price.keys()
print(keys)
for key in keys:print(f"{key}:{price[key]}")
'''直接遍历
for key in price:print(f"{key}:{price[key]}")
'''
price_shirt = price.pop("衬衫")
print(price_shirt)
print(price)
print(len(price))
price.clear()
print(price)

输出结果:

dict_keys(['铅笔', '橡皮', '笔袋', '衬衫'])
铅笔:1块
橡皮:5毛
笔袋:9块9包邮
衬衫:9镑15便士
9镑15便士
{'铅笔': '1块', '橡皮': '5毛', '笔袋': '9块9包邮'}
3
{}

总结

各类数据容器的特点

总结

基于各类数据容器的特点,它们的应用场景如下:

  • 列表:一批数据,可修改、可重复的存储场景
  • 元组:一批数据,不可修改、可重复的存储场景
  • 字符串:一串字符串的存储场景
  • 集合:一批数据,去重存储场景
  • 字典:一批数据,可用key检索value的存储场景

数据容器通用方法

  • len(容器):统计容器的元素个数
  • max(容器):统计容器的最大元素
  • min(容器):统计容器的最小元素
  • list(容器):将给定容器转换为列表
  • tuple(容器):将给定容器转换为元组
  • str(容器):将给定容器转换为字符串
  • set(容器):将给定容器转换为集合
  • sorted(容器):对容器进行排序(升序),结果返回列表对象
  • sorted(容器,reverse=True):对容器进行排序(降序),升序的reverse默认=False

数据容器类型互转:

  1. 对应括号的改变
  2. 字符串的每个字符会被单独拿出来作为元素
  3. 转集合会具有集合的特点:数据无序、不重复
  4. 字典转成字符串会保留value,转成其他类型不保留

当然,动动小手敲敲代码会更好地理解

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

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

相关文章

查找两个字符串的最长公共子串

暴力解法 #include <iostream> #include <vector> #include <cstring> using namespace std; string a, b, minn ""; // a和b是我们输入的 // minn存储的是我们最小的那个字符串string cut(int l, int r) {string tmp "";for (int i …

类与对象(二) 构造函数与析构函数

目录 1.类的6个默认成员函数 2.构造函数 2.析构函数 1.类的6个默认成员函数 我们前面讲到了一个空类&#xff0c;也就是类里面没有声明成员&#xff0c;但是空类里面真的什么都没有吗&#xff1f;不然&#xff0c;任何类在什么都不写时&#xff0c;编译器自动生成以下六个默…

Introducing Meta Llama 3: The most capable openly available LLM to date

要点 今天&#xff0c;我们推出 Meta Llama 3&#xff0c;这是我们最先进的开源大型语言模型的下一代。Llama 3型号将很快在AWS&#xff0c;Databricks&#xff0c;Google Cloud&#xff0c;Hugging Face&#xff0c;Kaggle&#xff0c;IBM WatsonX&#xff0c;Microsoft Azur…

VsCode一直连接不上 timed out

前言 前段时间用VsCode连接远程服务器&#xff0c;正常操作后总是连接不上&#xff0c;折磨了半个多小时&#xff0c;后面才知道原来是服务器设置的问题&#xff0c;故记录一下&#xff0c;防止后面的小伙伴也踩坑。 我使用的是阿里云服务器&#xff0c;如果是使用其他平台服务…

CCS项目持续集成

​ 因工作需要&#xff0c;用户提出希望可以做ccs项目的持续集成&#xff0c;及代码提交后能够自动编译并提交到svn。调研过jenkins之后发现重新手写更有性价比&#xff0c;所以肝了几晚终于搞出来了&#xff0c;现在分享出来。 ​ 先交代背景&#xff1a; 1. 代码分两部分&am…

IPRally巧用Google Kubernetes Engine和Ray改善AI

专利检索平台提供商 IPRally 正在快速发展&#xff0c;为全球企业、知识产权律师事务所以及多个国家专利和商标局提供服务。随着公司的发展&#xff0c;其技术需求也在不断增长。它继续训练模型以提高准确性&#xff0c;每周添加 200,000 条可供客户访问的可搜索记录&#xff0…

Linux之 USB驱动框架-USB总线(2)

一、linux 下&#xff0c;通过系统查看usb 总线 ls /sys/bus/usb/devices/也包含了很多信息&#xff1a; 其中usb1、usb2代表系统注册了2条usb总线&#xff0c;即有2个USB主机控制器&#xff0c;1和2用于区分不同总线&#xff0c;是USB的总线号。 每插入一个usb设备&#xff…

深度学习-数据操作

目录 张量通过shape属性访问张量的形状通过shape属性访问张量中元素的总数reshape改变张量的形状&#xff08;不改变元素数量和元素值&#xff09;使用全0、全1、其他常量或者从特定分布中随机采样的数字通过提供包含数值的Python列表为所需张量中的每个元素赋予确定值。张量的…

半导体存储器整理

半导体存储器用来存储大量的二值数据&#xff0c;它是计算机等大型数字系统中不可缺少的组成部分。按照集成度划分&#xff0c;半导体存储器属于大规模集成电路。 目前半导体存储器可以分为两大类&#xff1a; 只读存储器&#xff08;ROM&#xff0c;Read Only Memory&#xff…

如何判断客户需求能不能做出来产品?

在做G端产品的过程中,为了让产品可以符合客户实际需求,我们需要经历客户需求调研的这个环节。那么,需求收集后,我们要从什么维度判断客户的需求是否真的可以产品化呢? 我们做G端产品,新产品的方向几乎100%来自于政策。所以才会有“政策带来产品,产品催生政绩”。 可就算…

解锁ApplicationContext vs BeanFactory: 谁更具选择性?

目录 一、聚焦源码回顾 &#xff08;一&#xff09;源码分析和理解 &#xff08;二&#xff09;简短的回顾对比建议 二、ApplicationContext vs BeanFactory特性对比 &#xff08;一&#xff09;主要特性总结 &#xff08;二&#xff09;直接建议 三、案例简单说明 &am…

OpenTelemetry-1.介绍

目录 1.是什么 2.为什么使用 OpenTelemetry 3.数据类型 Tracing Metrics Logging Baggage 4.架构图 5.核心概念 6.相关开源项目 ​编辑 7.分布式追踪的起源 8.百花齐放的分布式追踪 Zipkin Skywalking Pinpoint Jaeger OpenCensus OpenTracing 9.Openteleme…

虚假新闻检测——Adapting Fake News Detection to the Era of Large Language Models

论文地址&#xff1a;https://arxiv.org/abs/2311.04917 1.概论 尽管大量的研究致力于虚假新闻检测&#xff0c;这些研究普遍存在两大局限性&#xff1a;其一&#xff0c;它们往往默认所有新闻文本均出自人类之手&#xff0c;忽略了机器深度改写乃至生成的真实新闻日益增长的现…

【北京迅为】《iTOP-3588开发板系统编程手册》-第20章 socket 应用编程

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

TI_DSP_F2808学习笔记1: GPIO

1. 初始化设置 1.1 控制寄存器 GPxMUX功能选择寄存器/多功能复用选择 GPxDIR 方向选择寄存器/输入输出选择 0 输入 1 输出GPxPUD 上拉功能选择寄存器/是否启用内部上拉 0 有上拉&#xff0c;1禁止上拉GPxQSeln输入限定选择寄存器 输入n次为0或1才有效&#xff0c;滤波 1.2 数…

PDF 书签制作与调整

本文是对以前发表的旧文拆分&#xff0c;因为原文主题太多&#xff0c;过长&#xff0c;特另起一篇分述。 第一部分 由可编辑 PDF 文档创建书签 方法 1. Adobe Acrobat Pro autobookmark AutoBookmark 是一个可用于 Adobe Acrobat 自动生成书签的插件。 官方下载地址&…

corona渲染器锐化模糊设置,corona高效出图方法

​在使用Corona渲染器进行效果图渲染时&#xff0c;锐化和模糊是两种常用的设置&#xff0c;它们主要用于调整图像的清晰度和柔化效果。锐化参数可以增强图像中的细节&#xff0c;使画面看起来更加清晰锋利&#xff1b;而模糊参数则可以用来柔化图像边缘&#xff0c;减少图像噪…

Etsy多账号关联怎么办?Etsy店铺防关联解决方法

Etsy虽然相对于其他跨境电商平台来说比较小众&#xff0c;但因为平台是以卖手工艺品为主的&#xff0c;所以成本较低&#xff0c;利润很高。许多跨境卖家都纷纷入驻&#xff0c;导致平台规则越发严格&#xff0c;操作不当就会封号&#xff0c;比如一个卖家操作多个账号会出现关…

10.接口自动化测试学习-Pytest框架(2)

1.mark标签 如果在每一个模块&#xff0c;每一个类&#xff0c;每一个方法和用例之前都加上mark标签&#xff0c;那么在pytest运行时就可以只运行带有该mark标签的模块、类、接口。 这样可以方便我们执行自动化时&#xff0c;自主选择执行全部用例、某个模块用例、某个流程用…

二分查找知识点及练习题

知识点讲解 一、没有相同元素查找 请在一个有序递增数组中&#xff08;不存在相同元素&#xff09;&#xff0c;采用二分查找&#xff0c;找出值x的位置&#xff0c;如果x在数组中不存在&#xff0c;请输出-1&#xff01; 输入格式 第一行&#xff0c;一个整数n&#xff0c;代…