Python快速入门,看这一篇就够了

news2024/11/28 19:02:10

大家好,我是老三,我最近在看一些人工智能相关的东西,大部分相关的框架,都是用Pyhon写的。

老三会用Python,但谈不上多熟练,最近准备拿Python作为自己的第二语言,那么这期我们来一起快速梳理一下Python基础。

起步

Python简介

Python是一门解释性编程语言,既年长又年轻的语言,它诞生于1989年,近些年,人工智能的复兴,给它注入了新的活力。

Python之父

“Python”的中文翻译“蟒蛇”,因为Python之父Guido van Rossum,就是这位头发浓密的大叔,喜欢蟒蛇。

Python的主流版本又分为2.X和3.X,2.X已经停止维护,目前Python已经发布到了3.11.2版本。

环境准备

我们来看一下在Windows环境下Python的安装。

  • 从官网下载Python,版本我们选择3.9.6:https://www.python.org/ftp/python/3.9.6/python-3.9.6-amd64.exe

Python下载

  • 下载完成之后就可以安装了,安装过程选择Add Pytyon 3.9 to PATH,这样就可以在任意路径使用Python了,同时也可以自定义一下Python的安装路径,我一般都是安装在D盘。

    Python安装

  • Win+R打开命令行界面,输入Python,会显示Python的版本号,至此Pytyon安装就已经完成,并且打开了Python Shell。

Python版本

  • 我们还默认安装了一个重要的工具——pip,它是Python的包管理工具,类似Java的Maven、Node的npm,在命令行界面输入pip -V,可以看到pid的版本:

    pip

编辑器准备

Python提供了交互式运行工具Python Shell,直接输入一行代码:

 print('Hello World.')

万物之始:Hello World.

打印输出

当然,日常开发肯定不会使用这种交互式的方式,而是使用文件的方式,那么Python文件的编辑器一般使用什么呢?

Python因为是解释性语言,可选的编辑器有很多:Pycharm、Jupyter、Sbulime Text、VSCode……

功能最强大的肯定是Pycharm,但是因为占内存,最重要的是得花钱,所以我一般用VSCode。

  • VSCode的安装就不多说,直接下载安装就可以了

  • 为了更好地利用VSCode开发Python,推荐安装一些插件:

    1. Python:VS Code官方自带插件

      Python extension for Visual Studio Code

    2. LiveCode for python:可以实时显示每一个变量值

      LiveCode for python

    3. Sourcery:可以自动审查和改进代码

      Sourcery

    4. IntelliCode:官方提供的AI辅助开发插件,提供比较充分的代码提示

      IntelliCode

    5. Python Indent:更好地进行Python代码的缩进

      Python Indent

    6. Python Test Explorer:可视化代码测试

      Python Test Explorer

    7. Python Snippets:自动补全代码片段

    Python Snippets

还有其它的一些好用的插件,大家可以自行探索—— 如果有的选,建议Pycharm。

我们来简单体验一下VSCode编写Python代码:

  • 创建文件夹python-demo

创建文件夹

  • 使用VSCode打开文件夹,新建文件hello.py

hello.py

  • 编写代码
print('Hello World.')
  • 可以直接在右上角点击运行

运行

至此,Python开发环境就已经准备好了,那么我们开始学习Python基础语法。

入门

基本命令

Python是一门非常简单的语言,我们前面的print就是非常简单的打印操作。

Python是一门解释性语言,有点类似shell,对缩进要求比较严格,以Tab键或者4个空格进行缩进。

例如,这一段代码就有语法错误:

语法错误

需要改成:

正确缩进

Python的注释,使用#

注释

在VSCode里可以使用快捷键Ctrl+/快速注释:

快速注释

数据类型

Python是一种面向对象的编程语言,所有的数据类型都是类,每个数据值都是类的“实例”,并且不需要显式声明变量的类型。

在Python中有6种主要的内置数据类型:数字(Number)、字符串(string)、列表(list)、元组(tuple)、集合(set)和字典(dict)。

数字(Number)

Python中常用的数字类型有两种:整数(int)浮点(float)

我们在Python Shell里进行一些数字的操作:

  • 定义和输出
>>> num=1
>>> print(num)
1
  • +,-,*,/,%,//,
>>> 2+2
4
>>> 60+3*2
66
>>> 36/2
18.0
>>> 33%10
3   
>>> (66-30)*2/4
18.0
>>> 19//3
6

其中/会永远返回浮点数float,Python只支持双精度的浮点数float,返回int需要用//

  • intfloat转换
>>> int_num=int(8.8)
>>> print(int_num)
8

Python 支持其他类型的数字,例如Decimal and Fraction。 Python 还内置了对复数(complex)的支持,当然,用的也不多。

字符串(string)

字符串是最常用的数据类型,它可以放在单引号''里,也可以放在双引号“”里。

>>> 'Good man'
'Good man'
>>> "Good man"
'Good man'
  • 字符串连接可以直接使用+
>>> "Python is"+"good"
'Python isgood'
  • 如果字符串本身包含单引号''或者双引号“”,可以使用转义符\
>>> "I say:\"Python is good\"."
'I say:"Python is good".'
  • 字符串可以和数字相互转化,字符串转数字可以用int()float(),数字转字符串可以用str()
>>> int("666")
666
>>> float("66.6")
66.6
>>> str(888)
'888'
  • 字符串支持下标访问,包括正向索引(正数),和反向索引(负数)
>>> str="The world is so greate."
>>> str[5]
'o'
>>> str[-2]
'e'
  • 字符串使用find()查找,replace()替换,split()切割
>>> str="There is a hard people."
>>> str.find('hard')
11
>>> str.replace(' ','|')   
'There|is|a|hard|people.'
>>> str.split('|')
['There is a hard people.']

列表(list)

线性表这种数据结构我们都比较熟悉,Python中的实现是list,类似于Java中的ArrayList,list中可以放入任意类型的变量:

>>> list1=["Python","Good","Study"]
>>> list2=[1,2,3,4,5]
>>> list3=["Python",4,"is",12.3,"Good"]
  • 元素可以直接通过下标访问:
>>> list1[2] 
'Study'
  • 通过append()方法添加元素
>>> list1.append("World")
>>> print(list1)
['Python', 'Good', 'Study', 'World']
  • 通过insert(i,x)方法在指定位置 插入元素
>>> list1.insert(1,"Should")
>>> print(list1)
['Python', 'Should', 'Good', 'Study']
  • 替换元素,可以直接list[i]=x
>>> list=[60,80,30,70] 
>>> list[2]=90
>>> print(list)
[60, 80, 90, 70]
  • 删除元素,使用remove(x)方法
>>> list.remove(60)
>>> print(list)
[80, 90, 70]

元组(tuple)

列表(list)是一种可变的序列类型,元组(tuple)是一种不可变的序列类型,由多个用逗号隔开的值组成:

>>> t=1314,"love",3,666
>>> t[0]
1314
>>> t
(1314, 'love', 3, 666)

集合(set)

集合(set)是一种可迭代的、无序的、不能包含重复元素的容器类型的数据,类似于Java中的Set。

>>> set={50,50,60,90,70,60}
>>> print(set)
{50, 60, 90, 70}
  • 集合的添加用add(),删除用remove()
>>> set.add(100)
>>> set.remove(50)
>>> print(set)
{100, 70, 90, 60}

字典(dict)

字典(dict)是一种key,value类型的数据结构,类似于Java中的Map。

>>> tel = {'jack': 4098, 'sape': 4139}
>>> print(tel)
{'jack': 4098, 'sape': 4139}
  • 可以直接根据key找到value
>>> tel['jack']
4098
  • 添加和更新元素都可以直接通过key
>>> tel['Tommy']=9876
>>> tel['sape']=5925 
>>> print(tel)
{'jack': 4098, 'sape': 5925, 'Tommy': 9876}
  • 使用pop()删除元素
>>> tel.pop('Tommy')
9876
>>> print(tel)
{'jack': 4098, 'sape': 5925}

好了,基本的数据结构我们都盘点完了,还有一些api,这里没有给出,建议大家可以直接查看api doc。

doc

流程控制

每个语言里都有条件语句、循环语句等等流程控制语句,我们来看看Python中的条件语句和循环语句。

条件语句

if语句

# 从控制台获取输入
score=int(input("请输入你的分数:"))

if score>=90:
    print("优秀")  
if score>=80 and score<90:
    print("良好") 
if score>=60 and score<80:
    print("及格")      
if score<60:
    print("不及格")  

运行结果:

运行结果

在Python里,有三种逻辑运算符:

  • not:逻辑非
  • and:逻辑与
  • or:逻辑或

其中and和or都是短路运算。

if-else

# 从控制台获取输入
score=int(input("请输入你的分数:"))

if score>=60:
    print('及格')
else:
    print("不及格")  

if-elif-else

# 从控制台获取输入
score=int(input("请输入你的分数:"))

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

循环语句

Python支持两种循环语句:while和for。

while

i=0
sum=0

# 0到100的总和
while i<100:
  sum+=i
  i+=1
   
print(sum) 

for

Python中的for比较特殊,只能迭代列表、字符串等任意序列,不能迭代算数递增值,或者定义结束条件。

names=['张三','李四','王五','赵六']

for name in names:
  print(name)

运行结果:

for

如果想对数字序列进行迭代呢?那就得用到range()函数:

for i in range(6):
  print(i)

如果想要跳出循环,或者跳过本次循环呢?

break/continue

  • break:break用于跳出 forwhile 循环

    for i in range(10):
        if i>3:
            #跳出循环
            break
        print(i)
    
  • continue:continue用于结束本次循环

    for i in range(10):
        if i%2==0:
            #跳出本次循环
            continue
        print(i)
    

容器类型循环

一些集合类型的循环,比如列表、字典,还是非常常用的。

列表循环
  • for循环列表

    nums=[1,3,5,7,9]
    
    for i in nums:
        print(i)
    
  • while循环,根据下标循环list,和string遍历基本一样

    nums=[1,3,5,7,9]
    
    len=len(nums)
    i=0
    
    while i<len:
        print(nums[i])
        i=i+1;
    
    • enumerate() 函数可以同时取出位置索引和对应的值:

      persons=['张三','李四','王五']
      
      for i,v in enumerate(persons):
          print(i,v)
      
字典遍历

字典是<key,value>类型的结构,遍历和序列结构有一些不一样

  • items()遍历:可以同时取出键和对应的值

    person_dict={'张三':26,'李四':22,'王五':33}
    
    # 遍历字典中的元素
    for k,v in person_dict.items():
        print(k,v)
    
  • 遍历keys:可以用keys()函数,当然不用也可以

    person_dict={'张三':26,'李四':22,'王五':33}
    
    # 遍历keys
    for k in person_dict.keys():
       print(k,person_dict[k]) 
    
    # 不用keys()也可以   
    for k in person_dict:
       print(k,person_dict[k]) 
    
  • 遍历values:用values()函数可以直接遍历values

    person_dict={'张三':26,'李四':22,'王五':33}
    
    # 遍历values
    for v in person_dict.values():
       print(v)
    

函数

我们在写代码的过程中,有很多重复的逻辑,这时候就应该考虑复用这些逻辑,那么就应该定义一些函数(Functions)

比如下面一段代码,创建一个函数,计算长方形的面积:

# 定义函数,计算长方形面积
def get_area(height,width):
    area=height*width
    return area

# 调用函数:实参顺序和形参一致
area=get_area(12,8)
print(area)

# 调用函数:直接指定形参,顺序无限制
area=get_area(width=9,height=15)
print(area)

在这个简单的函数里:

  • def: Python中用def关键字定义函数
  • get_area:函数名
  • height,width:函数的形参
  • area=height*width:函数体
  • return area:函数的返回值

在调用的时候,如果不直接指定形参,那么实参的顺序要和形参一致。

模块

上面我们学习了Python的函数,通过函数我们可以实现很多代码的复用,但是问题来了,所有的函数我们也不能都写在一个文件里,那到后面这个文件就膨胀地不像话了,必须拆分文件。

那么文件拆分后,里面的函数怎么调用呢?这就得用到Python的模块了。

  • 写一个calculate.py,很简单,里面定义一个简单的函数add,这时候calculate.py就可以理解为一个模块

    # 加法
    def add(a,b):
        return a+b;
    
  • 再写一个main.py,导入模块,调用函数

    main.py

    # 导入模块
    import calculate
    
    # 使用模块名调用函数
    print(calculate.add(5,6))
    

    如果模块名太长了,也可以给模块设置别名:

    # 导入模块
    import calculate as cal
    
    # 使用模块名调用函数
    print(cal.add(5,6))
    

    假如模块里定义的函数太多了,而我们只需要用某一个函数,或者某几个函数,怎么办?可以只导入模块中的函数:

    # 导入模块中的函数
    from calculate import add
    
    #使用模块名调用函数
    print(add(5,6))
    

Python中也内置了很多模块,常用的有mathdatetimeos等等。

例如,利用datetime获取当前年月:

#导入日期模块
import datetime

# 获取当前年、月
def get_year_and_month():
    now = datetime.datetime.now()
    year=now.year
    month=now.month
    return year,month

year,month=get_year_and_month();
print(f'{year}:{month}')

更多的标准库,可以直接查看官方的api文档。

面向对象

Python是一门面向对象的语言,面向对象是为了更好地复用代码,接下里,我们看看面向对象的三大特征:封装继承多态在Python里是怎么实现的。

类和对象

所谓类就是某个类型,比如人类,所谓对象,就是类的实例,比如张三。

class Person:
    
def say_hello(n):
    print('你好')

zhansan=Person()
zhansan.say_hello() 

这段代码里定义了一个类Person,类里定义了一个方法say_hello,实例化了一个对象zhangsan,调用了方法。

类里可以有这些成员:

类的成员

class Person:
    # 类变量
    planet='地球'
    
    # 构造方法,初始化成员变量
    def __init__(self,name,sex,age):
        # 成员变量:姓名,性别,年龄
        self.name=name
        self.sex=sex
        self.age=age
    
    # 实例方法,使用成员变量     
    def say_hello(self):
       print(f'{self.name}:你好')
       
    #类方法
    @classmethod
    def breath(cls):
        print('人需要呼吸')  

# 使用构造方法实例化对象并赋值        
zhansan=Person(name='张三',sex='男',age=22)
# 调用实例方法
zhansan.say_hello()   
# 调用类方法
Person.breath() 

在类中:

  • 成员变量也被称为数据成员,类变量属于类,实例变量属于实例。
  • 构造方法用于初始化类的成员变量。
  • 成员方法是在类中定义的函数,包含类方法和实例方法。

我们接下来,看看面向对象的三大特征在Python里是怎么实现的。

封装/继承/多态

封装

封装就是隐藏对象的内部细节,外部只管调用就行了。

Python中的变量默认是公开的,可以在外部的类中访问它们,如果想让它们变为私有变量,在变量前加上双双下画线(__)就行了,变量的获取和设置可以通过get()、set()方法。

class Programer:
    
    # 构造方法,初始化成员变量
    def __init__(self,name):
        # 创建初始化实例变量:姓名
        self.name=name
        # 创建和初始化私有实例变量:_level
        self._level=''
    
    # 实例方法  
    def write_bug(self):
        print(self._level+self.name+'正在写bug中。。')
        
    # get方法
    def get_level(self):
        return self._level
    
    # get方法
    def set_level(self,level):
        self._level=level
      
# 实例化
programer =Programer('张三') 
# 设置私有变量
programer.set_level('高级工程师') 
# 调用成员方法  
programer.write_bug() 
# 使用get方法获取私有变量  
print(programer.get_level()) 

继承

我们现在让Programer继承Person,继承语法很简单,在类后()里指定继承的类就行了,可以一个,也可以多个。

from Person import Person


# 继承Person
class Programer(Person):
    
    # 构造方法,初始化成员变量
    def __init__(self,name):
        # 创建初始化实例变量:姓名
        self.name=name
        # 创建和初始化私有实例变量:_level
        self._level=''
    
    # 实例方法  
    def write_bug(self):
        print(self._level+self.name+'正在写bug中。。')
        
    # get方法
    def get_level(self):
        return self._level
    
    # get方法
    def set_level(self,level):
        self._level=level
      
# 实例化
programer =Programer('张三') 
# 设置私有变量
programer.set_level('高级工程师') 
# 调用成员方法  
programer.write_bug() 
# 使用get方法获取私有变量  
print(programer.get_level())    

# 调用父类方法
programer. say_hello() 

多态

Python同样支持多态,对于继承,实现多态的方式,就是重写父类的方法:

from Person import Person


# 继承Person
class Programer(Person):
    
    # 构造方法,初始化成员变量
    def __init__(self,name):
        # 创建初始化实例变量:姓名
        self.name=name
        # 创建和初始化私有实例变量:_level
        self._level=''
    
    # 实例方法  
    def write_bug(self):
        print(self._level+self.name+'正在写bug中。。')
        
    # get方法
    def get_level(self):
        return self._level
    
    # get方法
    def set_level(self,level):
        self._level=level
        
    # 重写父类方法
    def say_hello(self):
        print(f"一介开发{self.name}向您问好!")   

      
# 实例化
programer =Programer('张三') 
# 设置私有变量
programer.set_level('高级工程师') 
# 调用成员方法  
programer.write_bug() 
# 使用get方法获取私有变量  
print(programer.get_level())    

# 调用重写了的父类方法
programer. say_hello()  

异常处理

对于开发工程师而言,日常最苦恼的事情大概就是写bug和找bug了。

有些时候,我们不希望因为某些错误,导致整个程序停止,那么我们就可以利用try/except语句来捕获异常。

比如下面的代码,用5/0

num=5/0

结果就发生了异常:

ZeroDivisionError: division by zero

我们可以捕获这个异常:

try:
    num=5/0
except Exception as e:
    print(e)    

在这段代码里,我们捕获了异常,并把它打印了出来,我们也可以用pass空语句,不对异常做任何处理:

try:
    num=5/0
except Exception as e:
    pass 

我们还可以使用finally子句,定义所有情况下都必须执行的操作:

try:
    num=5/0
except Exception as e:
    print(e)
finally:
    print('end')  

小结

这一篇几千字的小文章到此就结束了,在这篇文章里,我们快速过了一遍Python环境的搭建,以及各种基础语法,包括数据类型、流程控制语句、函数、模块、面向对象、异常处理。

大家可以看到,Python是一门相对比较好上手的语言,我有个同事这么说——“Python有什么好学的,看看不就会了”。虽然他有吹的成分,但也可以看到,如果有一些编程语言基础,Python上手还是比较简单的。

我们可以先掌握Python基础,把它用起来,用的过程中,再通过文档、搜索引擎、ChatGPT等等,不断加深对细节的掌握。



参考:

[1]. 《Python网络爬虫从入门到实践》

[2].https://docs.python.org/3/

[3].https://www.jkxuexi.com/resources/191.html

[4].《看漫画学Python》

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

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

相关文章

程序员该如何学习技术

程序员该如何学习技术 前言 学习是第一生产力&#xff0c;我从来都是这么认为的&#xff0c;人只有只有不断地学习才能意识到自己的缺点和不足&#xff0c;身为程序员&#xff0c;我更认为人们应当抱着终身学习的想法实践下去&#xff0c;这是我所一直践行且相信的。 高处不胜寒…

体验 GPT-4 后,回顾 OpenAI 发展历程及感悟

从 ChatGPT Plus 发布第一天就开始重度使用&#xff0c;刚刚和新发布的 GPT-4 进行了 20 多轮对话&#xff0c;来简单介绍下这几个模型背后的技术&#xff0c;并且分享下感受。 GPT 在发展历程中&#xff0c;一共经历了 4 个阶段&#xff0c;分别是 1、2、3、4。这几个阶段分别…

【VM服务管家】VM4.x算法模块开发_4.3 联合Halcon开发

目录 4.3.1 联合开发&#xff1a;集成HALCON第三方算子到VM工具箱的方法 4.3.1 联合开发&#xff1a;集成HALCON第三方算子到VM工具箱的方法 描述 环境&#xff1a;VM4.0及以上 VS2013 问题&#xff1a;有的用户在使用VisionMaster软件在开发视觉项目时&#xff0c;可能同时也…

来了来了,我使用 ChatGPT 开发了一个 AI 应用

ChatGpt 实在太火爆了&#xff0c;很多人在问我怎么使用 chatgpt 开发一个 AI 应用程序。这不就来了吗~ 开始 你所需要准备的一个OpenAI 的密钥和一点点代码来发送提示并返回结果&#xff0c;例如下面这段代码&#xff1a; import { OpenAIApi, Configuration } from openai…

基于RAM树莓派实现智能家居:语音识别控制,Socket网络控制,火灾报警检测,实时监控

目录 一 项目说明 ① 设计框架 ② 功能说明 ③ 硬件说明 ④ 软件说明 二 项目代码 <1> mainPro.c 主函数 <2> InputCommand.h 控制设备头文件 <3> contrlDevices.h 外接设备头文件 <4> bathroomLight.c 泳池灯 <5> livin…

GraphQL(三)DataLoader 详解

DataLoader是一个通用实用程序&#xff0c;用作应用程序数据获取层的一部分&#xff0c;通过批处理和缓存为各种远程数据源&#xff08;如数据库或 Web 服务&#xff09;提供简化且一致的 API 批处理 const user await userLoader.load(1); const invitedBy await userLoade…

【C++】7. auto和nullptr(c++11)

文章目录 一、auto二、nullptr 一、auto 在C98中&#xff0c;auto是一个存储类说明符&#xff0c;表示变量具有自动存储期&#xff0c;即在函数或块的作用域内创建和销毁。 在C11中&#xff0c;auto是一个类型占位符&#xff0c;表示变量的类型由其初始化器自动推断。 使用如下…

分类和扩展与继承

文章目录 [TOC](文章目录) 分类定义分类的使用使用场景使用注意点 Extension 扩展分类和扩展的区别 继承的定义使用注意点 新建一个分类 分类基础知识 分类 分类是指为已有的类添加方法&#xff0c;也可以说是将很多很复杂的代码划分为几个分区。 定义 分类的作用是扩展已有…

第十四届蓝桥杯大赛软件赛省赛 Java 大学 B 组题解

试题 A: 阶乘求和 本题总分&#xff1a;5 分 【问题描述】 令 S 1! 2! 3! ... 202320232023!&#xff0c;求 S 的末尾 9 位数字。 提示&#xff1a;答案首位不为 0。 【答案提交】 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一 个整数&am…

Linux信号:SIGCHLD信号和僵尸进程

1. SIGCHLD信号产生条件&#xff1a; &#xff08;1&#xff09;子进程终止&#xff1b; &#xff08;2&#xff09;子进程收到SIGSTOP暂停&#xff1b; &#xff08;3&#xff09;子进程处于暂停状态&#xff0c;收到SIGCONT被唤醒。 2. 捕捉SIGCHLD&#xff0c;避免僵尸进程&…

网络钓鱼:工作场所保护电子邮件安全的五个步骤

导语&#xff1a;Sophos电子邮件产品管理高级总监David Mitchell分享了他的主要技巧&#xff0c;以优化工作场所的电子邮件安全性。 Sophos电子邮件产品管理高级总监David Mitchell分享了他的主要技巧&#xff0c;以优化工作场所的电子邮件安全性。 尽管工作场所的聊天和即时…

云原生时代崛起的编程语言Go基础实战

文章目录 概述定义使用场景Go 安全 使用须知搜索工具Go基础命令标准库 基础语法Effective Go 概览命名规范注释变量常量(const)控制结构数据类型迭代&#xff08;range&#xff09;函数指针字符串和符文结构体(struct)方法接口(interface)泛型错误&#xff08;errors&#xff0…

iOS描述文件(.mobileprovision)一键申请

转载&#xff1a;IOS描述文件制作教程 iOS描述文件(.mobileprovision)一键申请 在主界面上点击描述文件按钮。 ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 新建ios描述文件 然后点击新建&#xff0c;然后输入描述文件名称&…

数据库设计与前端框架

数据库设计与前端框架 学习目标&#xff1a; 理解多租户的数据库设计方案 熟练使用PowerDesigner构建数据库模型理解前端工程的基本架构和执行流程 完成前端工程企业模块开发 多租户SaaS平台的数据库方案 多租户是什么 多租户技术&#xff08;Multi-TenancyTechnology&a…

【密码算法 之六】CCM 浅析

CCM模式浅析 1. 综述2. 加密2.1 前置条件&#xff08;Prerequisites&#xff09;2.2 输入&#xff08;Input&#xff09;2.3 输出&#xff08;Output&#xff09;2.4 加密流程&#xff08;Steps&#xff09; 3. 解密3.1 前置条件&#xff08;Prerequisites&#xff09;3.2 输入…

Orangepi Zero2 全志H616简介

为什么学 学习目标依然是Linux 系统 &#xff0c;平台是 ARM 架构 蜂巢快递柜&#xff0c;配送机器人&#xff0c;这些应用场景用C51,STM32单片机无法实现 第三方介入库的局限性&#xff0c;比如刷脸支付和公交车收费设备需要集成支付宝SDK&#xff0c;提供的libalipay.so 是…

【VM服务管家】VM4.0平台SDK_2.2 模块API类

目录 2.2.1 方案保存&#xff1a;方案高速保存的方法2.2.2 Group模块&#xff1a;Group输入输出图像数据的方法2.2.3 模块操作类&#xff1a;设置输入图像、参数和ROI的方法2.2.4 图像源&#xff1a;通过图像源模块接口设置图像输入的方法2.2.5 图像源&#xff1a;通过SDK传入相…

go 语言环境安装(Windows 系统下安装)

go 语言官网:The Go Programming Language 下载 go 安装包的网址&#xff1a;All releases - The Go Programming Language go 支持很多种操作系统 Windows 系统下 - 安装和配置SDK 一、SDK 介绍 SDK 的全称是 Software Development Kit &#xff0c;即 软件开发工具包 二…

STM32物联网实战开发(1)——全新的程序框架

现在STM32公司主推的是HAL库的开发&#xff0c;标准库已经不再更新。通过STM32cubeMX的图形界面生成代码非常的方便。 一、程序框架的构想 1、STM32cubeMX 生成的代码与添加的应用代码分离&#xff1b; 2、利用 STM32cubeMX 重新生成代码&#xff0c;不影响应用代码&#xf…

zabbix配置钉钉告警(附含钉钉告警脚本 · 实战亲测无任何问题)

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录 钉钉上操作&#xff08;钉钉告警以关…