【笔记ing】python
1 Python基础概念及环境搭建
1.1 python简介及发展史
之父Guido van Rossum。ABC语言的替代品。Python提供了高效的数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释性语言的本质,使之成为多数平台上写脚本和快速开发应用的语言。
Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。
Python2.7停更。Python3系列不兼容Python2.
1.2 Python定义及其理解
标准定义:Python是一门面向对象、解释型的计算机程序设计语言。
面向对象:指Python编程语言采用的思想。
解释型:指Python编程语言采用的程序编译方式。
1.3 Python对比其他同类编程语言的优劣势
优势:1、语法简单,易上手;高度语言话,摒弃传统语言的大部分标识语义,可读性好;2、可扩展性强;面向其他编程语言友好;3、开发效率极高;第三方库、组建丰富;Python生态完整;4、跨平台性好
劣势:1、太“高级”,过于趋近应用层,造成编译与执行效率较低(对比之下,比如对比C或C++);2、大部分面向底层的开发,不太建议使用Python,通常会选择性能更好的编程语言,比如C++;
1.4 Python的其他维度定义
Python是一门胶水语言。Python可以开发一个功能模块的公共接口,将其他编程语言实现的功能进行整合。
Python是数据科学领域首选的编程语言。数据科学注重模型的建立(数学建模)。
1.5 Python基础概念相关名词解释
解释型语言:程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次。因此效率较低。如Python语言,专门有一个解释器能够直接执行Python程序,每个语句都是执行的时候才翻译,。(效率较低,依赖解释器,跨平台性好)。
编译型语言:程序在执行之前需要有一个专门编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等。
解释器:又译为直译器,是一种电脑程序,能够把高级编程语言一行一行直接转译运行。解释器不会一次把整个程序转义出来,只像一位“中间人”,每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。每转译一行程序叙述就立刻运行,然后再转译下一行,再运行,如此不停地进行下去。
解释器工作原理:解释器的工作原理及流程:1、执行xxx.py文件:开始运行一个Python程序;2、此时就会调用提前安装好的Python解释器对代码进行逐行解析;3、解析的过程中,解析一行,运行一行,如果出错,则终止解释运行,并返回错误信息;
1.6 Python环境搭建:解释器环境搭建、开发工具搭建
1.6.1 使用CPython解释器搭建Python环境
gzipped source tarball:用于Linux系统下通过编译源码的方式安装Python环境的Python源码包;
windows install(65-bit):用于Windows通过安装程序直接安装的安装包;
1.61.3 华为云服务器购买及配置选购参考
共建智能世界云底座-华为云
先看近期打折活动。
性能配置:CPU核心数、内存容量、带宽、是否有数据盘、云服务器使用时长。1核2G带宽1MB带一个40GB的系统盘大致可满足学习。
1.6.2 使用Anaconda3安装Python环境
1.6.2.1 Anaconda简介
Anaconda是凯源的python发行版本。包含了conda、python等180多个科学包及其以来项。如果只需要某些包或者节省带宽或存储空间,可使用Miniconda这个较小的发行版(仅包含conda和python)。
conda是一个开源包、环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换。
Anaconda将程序员日常开发中可能会用到的库、插件、扩展等,全部放在一起打包,然后封装为一个可执行文件用于安装。
Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
1.6.2.3 Linux&mac下安装Anaconda3开发环境
我是macbook m2。
打开终端,输入source ~/.bash_profile。让环境生效
参考:【Mac安装anaconda最新实用教程】_mac安装conda-CSDN博客
Linux测试环境:HUAWEI云耀服务器,操作系统:Centos 8
(学一下命令)
SSH远程连接云服务器,进入后开始安装:
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2020.11-Linux-x86_64.sh #版本就选择tsinghua查到的较新的linux-86版本
执行wget后等待下载完毕即可。
下载完毕后,进入Anaconda3文件所在目录,执行bash命令进行安装:
bash Anaconda3-2020.11-Linux-x86_64.sh
安装过程会多次提示相关操作,按照提示进行操作即可,等待安装完毕,Anaconda的安装即完成。
配置Anaconda3的环境变量:
vim /etc/profile
使用vim编辑器打开profile文件,点击键盘"i"进入编辑模式,添加如下内容:
export ANACONDA_HOME_PATH=/root/anaconda3
export PATH=$ANACONDA_HOME_PATH/bin:$PATH
添加完毕后,ESC退出编辑,输入“:wq”退出vim编辑;
最后再source一下生效即可:
source /etc/profile
1.6.3 编程工具IDE介绍:Pycharm的安装、配置及使用详解
Pycharm、Microsoft Visual Studio Code、subline Text3...集成其他的功能配合代码的高效编写与调试。
集成开发环境(IDE,Integrated Development Environment)用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务等。所有具备这一特性的软件或软件套(组)都可以叫集成开发环境。如微软的Visual Studio系列,Borland的C++ Builder、Delphi系列等。该程序可以独立运行,也可以和其他程序并用。
即:IDE其实就是一个应用程序(软件),这个程序把程序员写代码所需要的一切功能,包括编辑、调试、运行代码等全部集成在这个软件内,让程序员最大限度的,方便的进行成产开发。
1.6.3.1 Pycharm简介
jetbrains系列产品。
Pycharm Community 社区版,免费且开源
Pycharm Professional 专业版,付费且非开源
社区版不支持第三方库和组件
tb教育激活授权
1.6.3.2 Pycharm下载
PyCharm: the Python IDE for data science and web development
1.6.3.3 Pycharm安装
1.6.3.3 Pycharm初次使用及基本配置
设置Location,项目的存储路径
选择依赖的python库,会新建一个venv虚拟环境
也可以关联本地的python解释器
1.6.3.5 Pycharm常见配置1:如何更改界面主题
file->settings->editor->color scheme
1.6.3.6 Pycharm常见配置2:如何打开一个已有的项目或Python文件
file->open
如果项目或Python文件放在桌面,/users/username/Desktop
1.6.3.7 Pycharm常见配置3:如果突然配置好的Python解释器路径失效,重新配置
file-settings->Projects:项目名称->Python Interpreter
1.6.4 Conda虚拟环境
Pychon的环境搭建最简单的方式:直接使用CPython解释器安装环境并在Pycharm中直接配置本地Python环境即可。
并不是每一个项目所采用的Python版本都是一致的。Python多个版本无法高效的在同一台PC的本地环境下管理。
采用虚拟环境进行Python环境搭建,为每一个虚拟环境指定特定的Python版本,通过虚拟环境隔离本机物理环境,进行Python多版本共存管理,提升便捷性。
主流的有virtualenvwrapper虚拟环境和Conda虚拟环境。
virtualenvwrapper面向python开发。
Python的包管理工具pip。
1.6.4.1 pip包管理工具
Python的标准库是官方内置好的。第三方开发者(非官方技术人员)开发所需的额外的技术、工具、插件,封装为模块或包。
先在本机Python环境下安装好第三方库,然后在本机的python环境下使用第三方库。
pip包管理工具,是专门用来安装python的第三方库、包、组建及插件。该工具在安装python解释器的时候,已经自动安装好了,可以直接使用。
1.6.4.2 pip包管理工具基本使用
pip管理工具通过shell命令使用。打开终端。
使用pip安装一个库:
pip install 库名
使用pip卸载一个库:
pip uninstall 库名
查看当前环境下已经安装了哪些库:
pip list
查看当前pip包管理工具版本信息:
pip --version
pip无论是否在本机物理环境下,还是虚拟环境下,都可以使用。但是,对于linux系统,如果是直接在本机物理环境下使用,需要使用pip3命令,如:
pip3 install xxx
pip3 uninstall xxx
pip3 list
如果在虚拟环境下使用,因为创建虚拟环境时已经自动建立好了pip3的软连接,则使用pip或pip3都行。
1.6.4.3 下载第三方库时的国内镜像源
有些第三方库、包、组件及插件,并不是国人开发或没有上传至境内的网站进行托管,而是在国外的网站托管,下载就会很慢或无网络连接无法下载。即出现国内的景象地址,可以更快的下载到本地。国内镜像源地址:
清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/
腾讯源:https://mirrors.cloud.tencent.com/
阿里源:https://developer.aliyun.com/special/mirrors/notice
华为源:https://mirrors.huaweicloud.com/
中科大源:http://mirrors.ustc.edu.cn/
北京外国语大学源:https://mirrors.bfsu.edu.cn/
网易源:http://mirrors.163.com/
豆瓣Python PYPI镜像:http://pypi.doubanio.com/simple/
python主要使用的是:清华大学开源软件镜像站、中科大源、豆瓣Python PYP镜像。
在使用pip安装第三方库时,pip install xxx(需要安装的库名)。发现该库下载很慢时,可以选择添加某一个国内镜像源。一般情况下,使用pip进行第三方库安装时,一般选择豆瓣的镜像源下载,会很快。
pip install xxx(需要安装的库名) -i https://pypi.douban.com/simple
1.6.4.4 Conda虚拟环境的使用
在成功安装Anaconda3后且已经完成环境变量配置时,Conda虚拟环境就已经安装完毕了。验证如下,以下三个命令任意一个都可验证:
anaconda -V
conda -V
conda --version
只要能够顺利看到conda对应的版本号,说明conda已经配置生效了。
conda虚拟环境的几个常用命令:
查看conda版本号:
conda --version
conda -V
查看当前已有的conda虚拟环境:
conda env list
创建一个conda虚拟环境:
conda create -n [envs_name] python=版本号
# e.g.
conda create -n myFirstCondaEnvs python=3.6.5
激活(进入)一个conda虚拟环境:
# linux
source activate envs_name
# e.g.
source activate myFirestCondaEnvs
退出一个conda虚拟环境
# linux
source deactivate
conda虚拟环境下安装第三方依赖:
先添加Anaconda的TUNA镜像:
conda config --add channels https://mirrors.tuna.tsinghua.cn/ananoda/pkgs/free/
设置搜索时显示通道地址:
conda config --set show_channel_urls yes
安装某依赖包:
conda install [包名]
conda虚拟环境下也是可以通过pip进行第三方依赖安装的。
查看当前虚拟环境下已安装的依赖:
conda list
conda其他常用命令
删除一个已有的conda虚拟环境:
conda remove --name envs_name --all
删除环境中的指定包:
conda remove --name envs_name [包名]
克隆环境:
conda create --name envs_name --clone another_envs_name
查找软件包:
conda search [包名]
1.6.4.5 Conda虚拟环境在Pycharm中的配置
第一步:点击Pycharm主界面右下角
第二步:点击Interpreter Settings
第三步:弹出中点击Add
第四步:interpreter找到python.exe
第五步:勾选make available to all projects,点击ok。配置完成。
1.7 第一个Python程序:Hello Nudt!
1.7.1 交互式编码
交互式编码是指在操作系统的命令行中运行代码。
1.7.2 Pycharm主界面主要功能介绍
1、Pycharm的标题栏/工具栏:常用的功能、配置等。
file:文件相关操作及系统配置等操作
view:主界面的相关配置
run:运行/debugger一个程序的相关配置
2、Pycharm的项目目录结构。点击后即显示目录结构。该功能方便实时查看项目结构,点击可选择展开或关闭。
3、代码编辑区域
4、程序运行/debugger界面区域选项
termical:Pycharm集成好的终端shell,可在此像系统的终端一样通过shell运行一个程序。
5、当前项目配置好的Python解释器在右下角显示。如果Pycharm配置了多个解释器,点击可以随意切换。
1.7.3 Pycharm中新建一个Python文件
在左侧项目结构区域,选择一个Python文件创建目录
选择Python file后会提示给文件命名。命名时不用携带.py后缀名,只需要输入文件名称,回车后自动补齐后缀。
1.7.4 文件式编码:编写第一个程序Hello Nudt!
在新建的Python文件中输入代码:
print('Hello Nudt')
文件空白区域任意处右键单击,选择run
程序于控制台运行后返回结果。第一个Python程序完成。
1.7.5 Jupyter Notebook
Jupyter Notebook是基于网页的用于交互计算的应用程序。可被应用于全过程计算:开发、文档编写、运行代码和展示结果。
Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和代码,代码的运行结果也会直接在代码块下显示。Jupyter Notebook是一种“在线形式”的交互式编程环境。
在Python编程应用场景中,Jupyter Notebook是需要单独安装的:
pip install jupyter
之前已经安装好了Anaconda3,此时Jupyter Notebook已经安装好了,可以直接使用了。
1.7.5.1 Windows下本地开放Jupyter Notebook服务
终端输入命令:
jupyter notebook
等服务开启即可,且会自动打开浏览器进入到notebook界面
1.7.5.2 CentOS云服务器下远程开放Jupyter Notebook服务
第一步:云服务器开放8888(或任意其他数字)端口:
进入云服务器控制台,点击对应的名称/ID,点击安全组,点击“更改安全规则”,选择“如方向规则”后,点击添加规则,优先级(1)、策略(允许)、协议端口(TCP、端口号自定义,jupyter默认8888自定义端口号不要与其他端口号冲突)、源地址、描述、确定。
第二步:创建jupyter notebook配置文件:
jupyter notebook --generate-config
# 注意:终端中会显示文件所在路径: /root/.jupyter/jupyter_notebook_config.py
第三步:输入ipython,并在ipython中输入如下代码,完成密码设置:
# 注意:会生成一个密钥,从终端中将该密钥拷贝出来以备后续使用。
第四步:打开配置文件,输入如下配置信息后保存退出:
vim /root/.jupyter/jupyter_notebook_config.py
# 注意不要配置为localhost,‘*’代表任何ip均可访问
c.NotebookApp.password='*'
=u 'xxxx'
# 服务器本地不打开浏览器
c.NotebookApp.open_broswer=False
# 端口号默认为8888.想用其他端口号可在这里修改
c.NotebookApp.port=8888
# 指定Jupyter Notebook文件路径,也可以不设置
c.NotebookApp.notebook_dir='/root/DataMining_codes'
# 是否允许root用户登录
在云服务器下开启Jupyter notebook:
jupyter notebook --allow-root
打开浏览器,地址栏输入:
http://[云服务器主机ip]:[端口号]
即可进入jupyter notebook
1.7.5.3 Jupyter Notebook插件安装
Jupyter Notebook关联Conda环境:
conda install nb_conda
在实际使用时,为确保在Jupyter中能够关联(即使用)指定的Conda虚拟环境,一般的,最简单的方式是:
先终端下进入指定Conda虚拟环境:
conda activate xxx
再开启远程Jupyter服务:
jupyter notebook --allow-root
此时Jupyter中默认即使用该虚拟环境了;直接进入,在jupyter中再切换虚拟环境也是可以的。
Jupyter Notebook安装代码补全插件:在终端中依次执行命令:
pip install jupyter_contrib_nbextensions -i https://pypj.douban.com/simple
jupyter contrib nbextension install --user
pip install jupyter_nbextenssions_configurator -i https://pypi.douban.com/simple
jupyter nbextenssions_configurator enable --user
1.7.5.4 Jupyter Notebook插件安装
新建一个目录
目录重命名:先勾选目录,点击remove即可
新建一个Python文件
新文件的重命名
程序编写:在页面中每一个in之后编写代码
程序运行:每写一部分程序后可直接点击运行
虚拟环境切换:点击Kernel --Change Kernel,选择所需的虚拟环境即可
将代码保存至本地
1.7.6 补充知识:Pycharm建立SFTP协议共享Linux主机文件&实现SSH远程连接服务器Python环境
该需求主要面向生产环境下,该功能可实现:1、在Windows下远程连接Linux云主机共享文件,实现在Windows下Pycharm对Linux主机内文件进行编码;2、可实现Windows下对Linux主机文件编码后远程通过SSH连接服务器Python环境并执行Linux主机下脚本。基于此,Pycharm已提供相应的文件共享协议SFTP以及SSH远程登录功能。
Tools->Deployment->Configuration,+号,选择SFTP,新服务命名,...新增SSH远程连接配置,完成相关配置Host\User name\Password Test Connection.选择刚添加的ssh配置,点击mapping,Local path\Deployment path(选择本地路径) Web path(在linux里指定一个同步的路径)。全部操作完毕点击ok,SFTP文件共享服务配置完成。
Tools->Deployment->Broswe Remote Host.开启右侧服务器文件路径结构,方便直接查看,双击编辑。
Tools-Deployment->Upload here(手动)/Automatic Uploar(Always)(自动)
设置Windows下Pycharm可通过SSH远程连接云主机下的Pyhton环境并使用该环境运行Linux下python程序:
点击解释器配置,Settings->Project ..python Interpreter->add选择添加->SSH Interpreter-> Host\Username->Password->Interpreter选择路径->finish.配置完成。
2 变量及数据类型
2.1 计算机基本组成原理与编程基础预备知识
编译运行和解释运行。
编译与解释的过程中关注的不是程序如何检错,而是如何“编译(或解释)”
2.1.1 冯·诺依曼体系
1946年ta提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存。
冯诺依曼体系结构、冯诺依曼理论的要点是:计算机的数制采用二进制,计算机应该按照程序顺序执行。人们把冯诺依曼这个理论成为冯诺依曼体系结构。冯诺依曼体系主要由5大部分组成:1、输入数据和程序的输入设备 2、记忆程序和数据的存储器 3、完成数据加工处理的运算器 4、控制程序执行的控制器 4、输出处理结果的输出设备。
现代计算机包括几十年前出来的计算机,仍然在沿用这样的体系进行设计。控制器控制执行的程序,就是现代计算机中软件开发所研究的方向。
计算机系统的组成结构
一台计算机首先要有硬件组成部分,在硬件上安装操作系统,在操作系统上安装使用各种应用程序。
操作系统,为用户提供一个可视化的GUI界面,用户可以依赖输入输出设备使用计算机的各种功能,为应用与硬件之间的交互提供了一个媒介。
高级程序语言(人看懂)-》编译器/解释器-〉机器码(01机器认识)-》硬件执行指令。
C++:编译型语言,编译流程:先一次性编译完毕,再直接执行机器码
JavaScript:解释型脚本语言,解释流程:运行时逐行解释为机器码,逐行执行机器码
2.1.2 Python解释器执行流程
1、开始执行xxx.py文件
2、系统调度python解释器
3、python解释器逐行读取xxx.py源文件,将其编辑成PyCodeObject字节码对象,写入同名的.pyc文件,存放于内存中;Python结束器的虚拟机从内存中读取.pyc文件的字节码对象,逐行读取、解释为机器码,逐行运行机器码。
4、Python解释器将PyCodeObject字节码对象写回pyc文件中。Python程序需多次运行时,每次运行前,先在存储中检索对应的pyc文件,若有则跳过第一步直接开始逐行解释,若无则重复。
Python先编译成字节码的好处:
跨平台特性。将Python程序先编译成字节码,不同的机器机器指令是不一样的,将代码编译成解释器能识别的机器码,运行时解释器就可以根据不同机器指令执行相应的操作。如此即可实现Python的跨平台特性。
提升运行性能。解释器的效率其实比编译器高很多,因为没有预编译的过程。Python源代码只需执行一次编译为字节码且持久化存储,后期解释器解释为机器码的过程可以反复使用该字节码,无需再预编译成字节码,弥补了Python执行效率低的缺点。
2.1.3 PEP-8编码规范
Python Enhancement Proposal #8(第八号Python增强提案),建成PEP-8,用于规范全球开发者所需遵循的统一Python编码风格。
缩进:代表代码的嵌套,包含与被包含的关系。用4个空格表示一次缩紧,可在settings->Editor->Code Style->Python->Tab size中设置tab键。
所有行限制的最大字数为79;
顶层函数和类的定义,前后用两个换行隔开;
源文件编码统一采用UTE-8;
模块或包导入语句单独一行。。。
先导入标准库,再导入三方库,工程内脚本,中间都最好有一个换行
属性和方法的声明中间最好有换行
方法内核心逻辑的实现和方法的定义最好有换行
循环体稍复杂第一行和循环语句最好有换行
方法和方法间最好有换行
方法的最后一行return和方法体的实现最好有换行
import scrapy
from scrapy import Request
2.1.4 注释及其使用
及注解,Python中只有单行注释。
# 我是一条注释
Pycharm中快捷键command+/
'''、"""在Python中是文档字符串,是字符串对象
2.1.5 Pycharm常用快捷键
将光标移动到本行开头:command+《
将光标移动到本行末尾:command+》
快速注释/快速取消注释:command+/
复制光标所在行:command+d
删除光标所在行:command+Delete
移动光标所在行:shift+command+⬆️或⬇️
选中代码的格式化:command+option+L
2.1.6 基本常用函数
函数即一个具体的功能。
input():用于输出一定的内容,语法:
print(data) # data:要输出的数据
print(data1,date2,...) # 多条内容间使用“,”号隔开
常用参数:end,每条输出内容以何字符结束,语法:
print(data,end='结束符') # 输出一条内容,以xxx内容作为结尾
print默认结束符:
\n # 转义字符,代表以换行结束,即输出一条后换行,后续如果还有输出内容,则自动换到下一行。
# 输出一句Hello NUDT
print('Hello NUDT!')# 输出一句Hello NUDT
# 输出一句2026 NUDT xukeda
print('Hello,NUDT!')
print('2026 NUDT xukeda')# 输出一句“hello,nudt!”,同一行继续输出一句“hello,2026 nudt xcukeda”
print('hello,nudt!','hello 2026 nudt xukeda')# 输出一句hello,nudt
# 输出一句hello,xukeda
# 两行输出一行提示
print('hello,nudt',end=' ')
print('hello,xukeda')

常用参数:sep,将多个同时输出的内容之间添加一个连接(/间隔)符号,语法:
print(data1,data2,...sep="连接/间隔符") # 以连接/间隔符隔开每一条输出内容
# 输出一句“hello,nudt”,同一行间隔一个&符号继续输出一句“hello,xukeda”
print('hello,nudt','hello,xukeda',sep='&')

input(),接收键盘输入的内容,语法:
data=input(输入提示) # 按照input内的提示,一句提示输入所需数据
# 提示:一段文本,提示这里可以输入什么数据
# 输入你的年龄
age = input('输入你的年龄')
# 输入你的性别
sex = input('输入你的性别')
# 输入你的手机号
phone = input('输入你的手机号')
# 输入你的身份证号码
id = input(''输入你的身份证号码)
# 一行输出:你的姓名,性别,手机号,身份证号码
print(age,sex,phone,id)
print(age,sex,phone,id,sep=',')
2.2 变量
2.2.1 定义
变量是一种使用方便的占位符,用于引用计算机内存地址,改地址可以存储数据对象。
2.2.2 变量定义的理解
变量是一个存储空间,为了存储一个具体的对象,这个具体对象所在的空间用一个名字命名,即变量。
2.2.3 变量的声明赋值语句
语法:
变量名 = 数据对象 # 声明单个变量,绑定耽搁对象
变量名1 = 变量名2 = 变量名3 = 。。。 = 变量名n = 数据对象 # 声明多个变量,绑定同一个对象
变量名1,变量名2,变量名3,。。。,变量名n = 数据对象1,数据对象2,数据对象3,。。。,数据对象n # 声明多个变量,绑定多个哦对象
声明一个变量,命名为xx,赋值为xx。
a = 1
b = 2
c = 1.5
d = 'hello nudt'
student = 'xukeda'
创建一个变量的时候,称这个过程为声明一个变量。
=表示为赋值,创建对象与变量之间的引用关系
==表示等于、相等,数学中的=
先声明(创建一个变量,包含该变量的存储地址及命名的名称),后赋值(将该变量与对象之间创建引用关系)。
2.2.4 有关“=”赋值操作的理解
赋值的含义:创建变量与对象间的引用关系,并且一定是变量引用对象
teacher='老师'
1、解释器先向计算机内存申请一块存储空间,该存储空间的地址为0x901;2、为该存储空间命名;3、将读取到内存的对象“老师”与该存储空间之间创建引用关系,该引用关系为变量引用对象,所以箭头指向为:变量=》对象。
变量的声明赋值本质上是在创建于对象之间的引用关系。先声明再赋值。
2.2.5 变量的命名规则
变量名可以使用英文大小写、中文、阿拉伯数字、“-”,可随意组合,但不能以数组开头命名。
变量命名尽量采用驼峰命名法、匈牙利命名法。
驼峰命名法是指一个变量的名称可能会有多个英文单词组成,这种情况下每个单词的首字母就需要大些以区分整个变量命名含义的组成。
驼峰命名法又分为:1、大驼峰:即变量的命名无论包含几个单词,每个单词的首字母统统都需要大写;小驼峰:即变量的命名无论包含几个单词,第一个单词首字母不大写,从第二个单词开始首字母才需要大写。
匈牙利命名法:一个变量的命名要根据其所引用的对象的含义进行命名,即变量的命名尽可能的见名知义。
a = 1
a2 = 3 # 数组和字母随意组合
ab_1 # 数字、字母、“-”随意组合
_abc = 'abc' # 下划线也可以做命名开头
studentInfo = '学生信息' # 小驼峰,匈牙利命名法
SchoolName = '国防科大' # 大驼峰,匈牙利命名法
错误的命名方式
1a = 1 # 数字不能作为变量命名的开头
2.2.6 难点讲解:多变量赋值与变量交换
一次性将同一个数据对象赋值给多个不同的变量。
n1 = n2 = n3 = 2026
一次性将不同的数据对象绑定于不同的变量,且会按照变量声明的先后顺序依次进行赋值。
name,sex,age = 'xukeda','not matter',18
变量重新赋值
二次赋值,多次赋值,也成重新赋值,变量被重新绑定到一个新的数据对象。
变量和对象之间仅仅只是引用与被引用的关系。变量和数据对象间的引用关系在发生变化。
num = 3.14
num = 3.1415926
number = num
print(number) # 3.1415926
print(num) # 3.1415926
2.2.7 del语句
作用:del语句用于删除变量
语法:del 变量1,变量2,...,变量n
注意:1、del删除的不是数据对象,删除的是变量及变量与对象之间的引用关系;2、因为del只是删除变量(以及变量与对象间的引用关系),所以从宏观上看,del能删除已绑定对象的一切变量,包括删除一个函数(引用了函数对象的变量)、删除一个类(引用了类对象的变量)。
num1 = 123 # 声明变量num,赋值为数字123
num2 = num1 # 做变量引用关系拷贝,声明一个变量num2,将其也赋值为数字123;此时数字123有两个变量同时引用
num3 = num2 # 做变量引用关系拷贝,声明一个变量num3,将其也赋值为数字123;此时数字123有三个变量同时引用
num1 = 234 # num1变量做重新赋值,所以num1变量的引用关系要由原本的指向123,改为234
print(num2) # num2变量引用的对象仍然为123
del num3 # 删除num3变量,此时该变量直接删除,连带其指向数字123的引用关系也删除,数字123直邮num2在引用
num4 = num2 = 555 # 声明变量num4,并与num2变量一起,对于num4来说变量声明后赋值为数字555,对num2是做了变量重新赋值,赋值后引用新数字555
print(num2) # 555
print(num3) #
2.2.8 变量的类型
Python中是没有所谓的变量的类型的概念的,因为Python的变量类型是动态的。
变量类型的静态是指:变量在声明时就需要规定好能够存储的数据类型。比如java、c++,在声明变量的时候必须规定数据类型,int num = 123; // 正确 age = '十八岁'; // 错误,因为必须规定age变量数据类型为字符串
对于Python来说,因为声明变量时无需规定数据类型,变量声明后可绑定任意类型的对象,所以Python中变量的类型是动态的。
2.3 数据类型
Python一切皆对象,所有对象的引用及调用都是通过变量进行。
2.3.1 数据及数据类型定义
数据:是指客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态及相互关系等进行记载的物理符号或这些物理符号的组合。是可识别的、抽象的符号。
在计算机科学中,数据是所有能输入到计算机并被计算机程序处理的符号的介质的总称,是用于输入电子计算机进行处理,具有一定意义的数字、字母、符号和模拟量等的通称。在计算机编程语言中,数据就是指一切能存入变量的对象。
数据类型:因为一切都可以称作为数据,但数据的个体与个体之间是存在差异的,但同时又具备诸多相似性,所以,把一类相似的数据放在一起集中管理,就形成了数据类型。也就是说,数据类型是用来划分数据的。而分类标准可以有很多种,所以数据的划分也可以有很多标准,但具体的,数据类型的种类是固定的。
2.3.2 Python中支持的数据类型
Python因为是一门高级编程语言,在数据类型的支持上相对其他编程语言会比较简化、多样。
Python目前支持的数据类型如下:
整型:int
浮点型:float
复数:complex
布尔类型:bool
空值:None
字符串:str
列表:list
元组:tuple
字典:dict
集合与固定集合:set&frozenset
字节串:bytes
2.3.3 Python基本数据类型的划分
类型查看函数:type()
语法:
type(object) # param:需要查看类型的对象
作用:返回一个对象的类型
示例代码:
a = 123
b = '123'
print(type(a)) # <class 'int'>
print(type(b)) # <class 'str'>
按照是否为数字类型进行划分,可将数据类型划分为:
数字类型:整型、浮点型、复数、布尔类型;
其他类型:Node、序列、容器
按照是否为序列和容器进行划分,对于除数字类型之外的其他类型,按照是否为序列或容器,可将数据类型分为:
序列类型:字符串、列表、元组、字节串
容器类型:字典、集合与固定集合
目前公认的数据类型划分标准为:
数字类型:整型、浮点型、复数类型、布尔类型
序列类型:字符串、列表、元组、字节串
容器类型:字典、集合与固定集合
其他类型:None
按照Python中对象的可变性与不可变性,也可划分为:
可变类型:列表、字典、集合
不可变类型:数字类型、字符串、元组、固定集合、字节串
2.3.4 计算机基础知识:原码、反码与补码&进制及其进制转换
2.3.4.1 计算机中数的表示形式
机器数:一个数在计算机中的二进制表示形式
机器数是带符号的,在计算机中用一个数的最高位存放符号表示,正数为0,负数为1
真值:因为机器数的第一位知识符号位,所以机器数的形式值不等于其真实的数值
0000 0001真值:+000 0001 = +1
1000 0001真值:-000 0001 = -1
将带符号位的机器数对应的真实数值成为机器数的真值
2.3.4.2 原码
计算机存储一个数字的具体编码方式之一
原码的表示方法:符号位+真值的绝对值。即最高位表示符号位,即正负数,其余位表示真值。
+1的原码:0000 0001
-1的原码:1000 0001
2.3.4.3 反码
计算机存储一个数字的具体编码方式之一
反码的表示方法:正数,正数的反码是原码本身;负数,负数的反码是在原码的基础上,符号位不变,其余各位按位取反。
+1的原码:0000 0001,反码:0000 0001
-1的原码:1000 0001,反码:1111 1110
2.3.4.4 补码
计算机存储一个数字的具体编码方式之一
补码的表示方法:正数,正数的补码是原码本身;负数,负数的补码是在原码的基础上,符号位不变,其余各位按位取反后再+1,即反码+1.
+1的原码:0000 0001,补码:0000 0001
-1的原码:1000 0001,补码:1111 1111
2.3.4.5 计算机中数字的进制表示
二进制:逢二进一,也就是只有0和1来表示一个二进制
进制前缀:0b
表示法:xxx(2)
二进制首位含义:首位0,代表正数;首位1,代表负数。
二进制表示举例:
0100(2)
1011(2)
0b010
0b10001
二进制应用场景:主要用于表示机器码、字节及字节流
八进制:逢八进一,也就是只有0-7这8个数字来表示一个八进制。
进制前缀:0o
表示法:0xxx(8)
八进制首位:0,含义:表示八进制
八进制表示举例:
023(8)
0a01(8)
八进制应用场景:部分情况下用于替代十六进制的使用场景
十进制
逢十进一,也就是只哟0-9这10个数字来表示一个十进制
进制前缀:0d
表示法:xx(10),一般不加进制位数显示的数字默认都是十进制
十六进制
逢十六进一,也就是只有0-9、A-F(或a-f)这16个数字来表示一个十六进制
进制前缀:0x
表示法:xxx(16)
十六进制表示举例:
0xE43993C
十六进制应用场景:变量申请的内存空间地址,RGB颜色的十六进制表示
2.3.4.6 各进制间转换
二进制与十进制
二进制转换十进制
正整数二进制转十进制
先对二进制数进行补位至8位二进制,首位为代表为二进制正整数
然后从二进制数最后一位开始,最后一位对应的2的指数为0,向前一位则对应2的指数+1(最高位为符号位,不参与计算),将每一位的数值(0或1)*2的n次方(n为每一位对应的指数值),最后将所有位计算结果加载一起,即为十进制。
负正数二进制转十进制
二进制数位负数,一定是满足8位的
对该负正数二进制进行按位取反,得该负整数二进制的反码
再针对负整数二进制的反码的真值(最高位,负整数的反码最高位为1,不参与计算),按照相同的算法计算其余位数对应的十进制值,最后给十进制结果添加负号即可。
浮点数(小数)二进制转十进制
以小数点作为临界点,整数部分(如果整数部分不为0)向高位进行补位至8位;小数部分向低位进行补位至8位。
二进制整数部分最小位对应的2的指数为0,高位方向指数+1,低位方向指数-1,各位数乘以2的指数次方,最后整数位做求和,小数位做求和,结果即为十进制小数。
十进制转换二进制
正整数十进制转二进制
先对整数进行除二取余,直至结果为1
将最后得到的结果为1,与之前短除后得到的余数,按照“由结果自下而上”的顺序将最终结果1与前余数做排列,记得到十进制数的二进制
最后将得到的二进制结果进行补位(只补位到真值位,最高位根据十进制数的正负给0或1)
负整数十进制转二进制
先对负数的整数部分呢进行除二取余,直至结果为1
将最后得到的结果1,与之前短除后得到的余数,按照“由结果自下而上”的顺序将最终结果1与前位余数做排列,即得该十进制数的二进制
将得到的二进制结果进行补位(只补位到真值位,最高位为符号位,因为是负整数,所以最高位为1)
将真值按位取反
将结果+1拿到真值的补码
补上符号位(1),结果即为负整十进制对应的二进制
浮点数(小数)十进制转二进制
将整数部分和小数部分先分离
整数部分按照整数转二进制的方法进行转换后补位
小数部分乘以2,每次的结果取其整数位(整数位必定是0或1),直至结果的小数位为0
将整数位按结果顺序排列,即为整数位的二进制结果
将小数位按乘积顺序排列,即为小数位的二进制结果
最后整数位二进制结果与小数位二进制结果之间添加上小数点,即为小数十进制转二进制
二进制与八进制
二进制转换八进制
取三合一法
先将三位二进制从000开始,每次+1,得到的结果对应八进制数的0-7
再将二进制数(如果为负数,要先取反)以小数点为临界点,向高位与低位方向同时每三位取成一组,位数不够的向高位低位方向进行补位,直至满足3位一组即可
每组三位二进制对照如上获得八进制数
最后各组八进制数按权相加(拼成一个整数,不做数学计算),得到的就是最终的八进制结果
八进制转换二进制
以一分三法,即逆向取三合一
二进制与十六进制
二进制转换十六进制
十六位数表示方法:
先将四位二进制从0000开始,每次+1,得到的结果对应十六进制数的0-9、A-F
将二进制数(如为负数先取反)以小数点为临界点),向高位低位方向每四位取一组,位数不足的按位补齐
每组四位二进制对照上数表获得其十六进制数
各组十六进制数按权相加,得到最终的十六进制数
十六进制转换二进制
以一分四法,即逆向取四合一
2.3.4.7 计算机数据存储单位
2.3.4.8 位
计算机中的最小存储单位,符号为bit,一个位存储一个二进制编码(即0或1)
2.3.4.9 字节
符号为byte,其由八个位组成一个字节单元,也就是8个bit组成一个byte;字节通常用作各类数据类型表示占据内存大小的最小单位。
2.3.4.10 计算机数据存储单位换算
1byte = 8bit
1KB = 1024byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
2.3.5 整数类型:int
2.3.5.1 定义
整型用于表示整数值对象,包含正整数,0以及负整数
2.3.5.2 整型字面值表示
整型对象采用相关的进制表示,比如二进制、八进制、十进制、十六进制等。
2.3.5.3 Python整型的取值范围
关于整型对象的取值范围,大部分编程语言都是直接跟机器的位数有关系的。
32位机器,整型对象的取值范围为:-2^31-2^31(-2147483648-2147483647)
64位机器,整型对象的取值范围为:-2^63-2^63
大部分编程语言的取值范围如此,如java、c++
在java、c++中,一个int类型的整型数值会占据至多4个字节(4*8bit=32bit),因为整型还区分byte类型与短整型short类型。byte类型整数只占据1字节,即8个bit,short类型整型只占据2个字节,即16个bit。而他们的int类型的整数会占有4个字节,最大取值范围只能达到2147483647
如果要表示一个比2147483647(2的32次方)更大的整数,还有一种长整型类型,即long类型,规定取值范围可以达到2的64次方
java、c++中,整型数值的最大取值范围只能达到2的64次方,与机器能够支持的最大位数(目前的计算机支持的最大位数就是64位)相关。
但,Python中int整型的取值范围与机器位数是无关的
在Python中,如果要查看一个对象所占用的内存大小,可以使用标准库模块:sys中封装好的一个方法:getsizeof()进行查看
Python中整型对象的取值范围是根据内存所能支持的范围来决定的
Python中整数占用的字节数随整数的增大而增大,且每次数字值的增量达到2的30次方,占据字节会继续+4字节。所以Python中整型数值占用字节没有固定的值,Python中整型对象的取值范围是变长的。Python中整数对象的取值范围是根据机器内存所能支持的范围来决定的。
2.3.5.4 整型数值对象构造操作
语法:number = int(param)
参数:任意合法的类型
作用:构造一个整型数值对象,将合法的其他类型对象转换为整型对象
返回值类型:int类型
2.3.5.5 基本输入语句的整型结果接收及使用
data = input('提示语句')
接收用户从键盘输入到的数据,input所接受到的数据属于字符类型:str
但Python规定:字符类型的对象无法直接参与算术运算
int()
基于输入语句常用固定套路:当程序需要接受从键盘输入的数字时,一般按照如下方式使用:
num = int(input('提示语句'))
2.3.5.6 小整数对象池
变量必须先先声明再引用,对象也必须先创建才能被变量所引用。意味着解释器因为整型使用非常频繁的原因,也需要频繁的向内存申请空间,于是引入了小整数对象池的概念。
Python为了提升整体的运行效率,解决性能问题,引入了小整数对象池的概念。
小整数对象池中整型对象的取值范围为[-5,256],Python认为再-5到256这个范围区间的整型对象使用概率是非常高的。
该区间内的整型对象是提前创建好的,也就是说这些对象在变量引用的时候无需先创建对象,直接引用即可,且小整数对象池中的整型对象不会被垃圾回收。
is是运算符,这里的含义是判断变量引用的对象是否为同一个对象
1这个整数在小整数对象池的取值范围内部,所以1直接被两个变量同时引用,且整数对象1已经存在
整型对象-6已不再小整数对象池的取值范围之内,所以-6这个整型对象需要先创建好,再由变量申请内存空间,最后变量引用整型对象-6。两个变量,创建了两个整型对象-6,e、f引用的是两个独立的对象,所以返回false
2.3.5.7 数字类型常用函数详解
type()
语法:obj_type = type(object)
作用:返回一个对象的数据类型
参数:需要查看类型的对象
返回值:该对象所属的数据类型名称
abs()
语法:abs_num = abs(num_object)
作用:返回任意一个数字绝对值
参数:需要求绝对值的数字
返回值:该数字的绝对值结果
pow()
语法:num = pow(x,y[,z])
参数:x:底数;y:指数;z:可选参数,如果存在,代表将x次方的结果做取余
返回值:一个数x的y次方的幂运算后的结果
round()
语法:num = round(float_num,保留位数)
作用:对一个小数进行四舍五入
参数:float_num:需要进行四舍五入的小数,保留位数:四舍五入后保留几位小数
2.3.6 浮点数:float
2.3.6.1 定义
浮点型用于表示小数,包含正数、0.0、负数。
2.3.6.2 浮点型字面值表示
浮点型对象在Python中有两种表示方法:1、各进制表示法下的小数表示;2、科学计数法
2.3.6.3 Python浮点型的取值范围
虽然浮点型与整型在计算机内存中的存储方式不同,但Python的浮点型同整数取值范围具有一样的逻辑,Python的浮点型可以表示一个很大的浮点数,具体以极机器内存所支持的空间大小相关。
2.3.6.4 关于Python的浮点型的特殊说明
其他编程语言,如java、C++中,关于浮点型对象其实有更加精确的类型划分。如java浮点型包括单精度浮点型float以及双精度浮点型double。
Python中,对于浮点型对象没有如此明确的划分,如果要拿Python中的浮点型与java浮点型做一个相当的比较,Python的浮点型有点像java中的double,即双精度浮点型。
2.3.6.5 浮点型的算术运算问题
精度问题
浮点数和整型数在计算机内部的存储方式是不同的。正数运算永远是精确的,但浮点数的运算则可能出现一定的误差。
浮点型与整数的算术运算
Python中规定:整型与浮点型做算术运算,结果自动转为浮点型:
2.3.6.6 浮点型数值对象构造操作
语法:data = float(params)
作用:1、构造一个浮点型数值;2、将其他合法类型数值对象转为浮点型对象
参数:需要转换类型的对象
参数类型:对象object
返回值类型:float数值对象
2.3.7 复数类型:complex
2.3.7.1 定义
由一个实数和一个虚数构成的对象。
2.3.7.2 负数对象的字面值表示
复数使用如下方式表示:
其中a成为实部,b成为虚部
2.3.7.3 复数对象构造操作
语法:data = complex(object)
参数:任意合法类型的对象
作用:构造一个复数对象
返回值:构造出来的复数对象
2.3.8 空值None
2.3.8.1 定义
表示控、空变量、空对象,通常用于对象占位使用。
2.3.8.2 空值对象字面值表示
空值对象使用None进行字面值表示,使用时只需将其赋值给任意变量即可,起到变量的临时占位功能。部分类型的对象,比如:字符串、列表、元组、字典、集合与固定集合、字节串。当该对象内部为空时,也会用None表示。
2.3.9 布尔类型:bool
2.3.9.1 定义
布尔类型对象用于表示真和假,通常用于逻辑运算。
2.3.9.2 布尔类型数值对象字面值表示
布尔类型对象只有两个值:True和False。True:表示真,表示条件满足or成立,对应数字1;False:表示假,表示条件不满足or不成立,对应数字0.
2.3.9.3 布尔类型数值对象构造操作
语法:data = bool(params)
参数:任意合法的类型对象
作用:将传入的参数转为布尔类型
返回值类型:布尔类型,即True or False
2.3.9.4 有关布尔类型数值对象的细节
从Python标准库原码角度简单分析。
如果想看某个语法、某个对象、某个类的标准库源码实现,只需要将鼠标放到这个语法内容上,按住command,同时鼠标左键点击该语法内容,即可直接跳转到标准源码并自动定位到目标源码区域。
————————————
仅用于本人学习
来源:网络
相关文章:
【笔记ing】python
1 Python基础概念及环境搭建 1.1 python简介及发展史 之父Guido van Rossum。ABC语言的替代品。Python提供了高效的数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释性语言的本质,使之成为多数平台上写脚本和快速开发应…...
QT 作业 day4
作业 代码 Widget.h class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();private slots:// 槽函数void on_listWidget_itemDoubleClicked(QListWidgetItem *item);private:Ui::Widget *ui; }; #endif Widget.cpp Widget::Widget(QW…...
flink和yarn和mpp架构区别
为了全面理解 Flink 架构、YARN 架构和 MPP 架构的区别,我们从多个维度进行分析。以下是详细的对比: 1. 设计目标 架构设计目标Flink实时数据流处理和批处理,支持低延迟、高吞吐量的实时分析。YARN作为 Hadoop 的资源管理框架,负…...
DeepSeek崛起:如何在云端快速部署你的专属AI助手
在2025年春节的科技盛宴上,DeepSeek因其在AI领域的卓越表现成为焦点,其开源的推理模型DeepSeek-R1擅长处理多种复杂任务,支持多语言处理,并通过搜索引擎获取实时信息。DeepSeek因其先进的自然语言处理技术、广泛的知识库和高性价比…...
高频 SQL 50 题(基础版)_1141. 查询近30天活跃用户数
1141. 查询近30天活跃用户数 select activity_date day,count(distinct user_id) active_users from Activity where (activity_date<2019-07-27 and activity_date>DATE_sub(2019-07-27,INTERVAL 30 DAY)) group by(activity_date)...
DRMPlaneType里有VIG, DMA,和RGB三种类型,这是不是说明DRMPlane就是代表DPU里的Pipeline
DRMPlane 代表了 DPU(Display Processing Unit) 里的 Pipeline(数据通路),不同的 DRMPlaneType 对应 DPU 内部的不同 渲染/合成管线。 📌 DRMPlaneType 与 DPU Pipeline 的关系 在 高通(Qualco…...
not support ClassForName
com.alibaba.fastjson2.JSONException: not support ClassForName : java.lang.String, you can config JSONReader.Feature.SupportClassForName 官方说明中提到默认关闭, 可通过配置开启 JSON.config(JSONReader.Feature.SupportClassForName);...
为什么要学习数据结构与算法
今天,我向大家介绍一门非常重要的课程——《数据结构与算法》。这门课不仅是计算机学科的核心,更是每一位开发者从“小白”迈向“高手”的必经之路。 1、为什么要学习数据结构与算法 总的来说,数据结构与算法是: 求职的“敲门砖”…...
从浏览器输入网址,到页面展示都发生了什么?
查询缓存 其实从填写上url按下回车后,我们就进入了第一步就是 DNS 解析过程,首先需要找到这个 url 域名的服务器 ip,为了寻找这个 ip,浏览器首先会寻找缓存,查看缓存中是否有记录缓存的查找记录为:浏览器缓存>系统…...
Octave3D 关卡设计插件
课程参考链接 这位大佬有在视频合集中有详细的讲解,个人体验过,感觉功能很强大 https://www.bilibili.com/video/BV1Kq4y1C72P/?share_sourcecopy_web&vd_source0a41d8122353e3e841ae0a39908c2181 Prefab资源管理 第一步 在场景中创建一个空物体…...
JavaWeb后端基础(4)
这一篇就开始是做一个项目了,在项目里学习,我主要记录在学习过程中遇到的问题,以及一些知识点 Restful风格 一种软件架构风格 在REST风格的URL中,通过四种请求方式,来操作数据的增删改查。 GET : 查询 …...
【计算机网络】IP协议
目录 1. 协议头格式 2. 网段划分 3. 特殊的IP 4. 公网IP && 内网IP 总结 网络层的IP协议主要解决的是什么问题?——将数据包从B主机发送给C主机;传输层协议tcp提供可靠的策略;网络层IP协议提供数据数据传输的能力; 发…...
Libgdx游戏开发系列教程(2)——接水滴游戏实现
目录 游戏玩法 步骤 1.创建项目 2.添加资源文件 3.设置游戏配置 4.加载资源文件 5.播放背景音乐 6.绘制图形 7.雨滴下落实现 8.判断雨滴是否掉落在桶里 9.键盘控制改变桶位置 10.随机雨滴 打包 本文使用Kotlin语言开发 通过本文的学习可以初步了解以下基础知识的…...
【2025rust笔记】超详细,小白,rust基本语法
一、常见cargo命令 查看cargo版本 cargo --version创建cargo项目 create new demo_name构建编译项目 cargo build运行项目 cargo run检查项目代码 cargo check (比cargobuild快)发布构建项目 cargo build --release 电子markdown/pdf格式 二、小demo-----猜数游戏 1、print…...
将 SSH 密钥添加到 macOS 的钥匙串中
git提交代码时,如果SSH密码并未免密,每次拉取,上传操作时都需要密码输入, 可将SSH密钥添加到钥匙串中 git config --global credential.helper store报错: WARNING: The -K and -A flags are deprecated and have bee…...
Gpt翻译完整版
上一篇文章收到了很多小伙伴的反馈,总结了一下主要以下几点: 1. 说不知道怎么调api 2. 目前只是把所有的中文变成了英文,如果想要做多语言还需要把这些关键字提炼出来成放到message_zh.properties和message_en.properties文件中,…...
CC++的内存管理
目录 1、C/C内存划分 C语言的动态内存管理 malloc calloc realloc free C的动态内存管理 new和delete operator new函数和operator delete函数 new和delete的原理 new T[N]原理 delete[]的原理 1、C/C内存划分 1、栈:存有非静态局部变量、函数参数、返回…...
HTTP 状态代码 501 502 问题
问题 单个客户端有时会出现 报错 501 或 502 如下: System.Net.Http.HttpRequestException: Response status code does not indicate success: 501 (Not Implemented) 分析 可以排除 服务器无法处理的问题(测试发现 一个客户端报错,不会影响…...
virtio_video virtio_snd
在 Qualcomm 平台的 虚拟机(VM) 环境中,qcom,virtio_snd 是 VirtIO 机制下的 音频 DMA 共享 设备节点,它用于 虚拟机和宿主机(Hypervisor)之间共享音频数据,类似于标准的 VirtIO 声音设备。 1️…...
【大模型安全】大模型安全概述
【大模型安全】大模型安全概述 1.大模型安全目前的关键挑战技术安全合规安全 2.大语言模型的安全隐患与主要风险点3.大语言模型与国家安全风险4.大语言模型的信息安全原则 1.大模型安全目前的关键挑战 技术安全 1、数据的安全与合理利用 大语言模型通常需要处理大量敏感数据…...
基于 vLLM 部署 LSTM 时序预测模型的“下饭”(智能告警预测与根因分析部署)指南
Alright,各位看官老爷们,准备好迎接史上最爆笑、最通俗易懂的 “基于 vLLM 部署 LSTM 时序预测模型的智能告警预测与根因分析部署指南” 吗? 保证让你笑出猪叫,看完直接变身技术大咖!🚀😂 咱们今天的主题,就像是要打造一个“智能运维小管家”! 这个小管家,不仅能提…...
深入理解三色标记、CMS、G1垃圾回收器
三色标记算法 简介 三色标记算法是一种常见的垃圾收集的标记算法,属于根可达算法的一个分支,垃圾收集器CMS,G1在标记垃圾过程中就使用该算法 三色标记法(Tri-color Marking)是垃圾回收中用于并发标记存活对象的核心算…...
【车规芯片】如何引导时钟树生长方向
12nm车规DFTAPR项目中,我们可以看到,绝大部分的sink都受控于xxxx_tessent_occ_clk_cpu_inst/tessent_persistent_cell_clock_out_mux/C10_ctmi_1这个mux,这是我们DFT设计结果: 这里我们重新打开place的数据 Anchor,也就…...
基于Spring Boot的企业车辆管理系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
Spring Boot 中短时间连续请求时出现Cookie获取异常问题
Spring Boot 中短时间连续请求时出现Cookie获取异常问题 一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源 二、问题详细分析1. 场景重现2. 问题分析 三、如何避免影响下一次请求?✅方式 1:在主线程提前复制 …...
轮播图案例
(1)、搭建轮播图的结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>轮播图结构</title><!-- <script src"../js/tools.js"></script> --…...
通俗版解释:分布式和微服务就像开餐厅
一、分布式系统:把大厨房拆成多个小厨房 想象你开了一家超火爆的餐厅,但原来的厨房太小了: 问题:一个厨师要同时切菜、炒菜、烤面包,手忙脚乱还容易出错。 解决方案: 拆分成多个小厨房(分布式…...
【开源-常用C/C++命令行解析库对比】
以下是几种常用的C/C命令行解析库的对比表格,以及它们的GitHub开源库地址: 库名称语言特点是否支持子命令是否支持配置文件是否支持自动生成帮助信息GitHub地址ClaraC11及以上单一头文件,轻量级,非异常错误处理,自动类…...
JavaEE_多线程(一)
目录 1. 为啥要有线程1.1 线程是什么1.2 进程和线程的区别1.3 Java如何进行多线程编程 2 使用线程2.1 创建线程2.2 Thread类的几个常见方法和属性2.2.1 Thread常见构造方法2.2.2 Thread常见属性2.2.3 常见其他方法 2.3 终止一个线程2.3.1 通过共享的标记位来进行沟通2.3.2 调用…...
table 拖拽移动
表格拖拽 Sortable.js中文网|配置 <!-- 教务处 --><template><div class"but"><el-button click"mergeAndPrintArrays()" type"primary">保存数据</el-button><el-button click"restoration()" t…...
【QGIS二次开发】地图显示与交互-01
1. 系统界面设计 设计的系统界面如下,很好还原了QGIS、ArcGIS等软件的系统界面,充分利用了QT中顶部工具栏、菜单栏、底部状态栏,实现了图层管理器、鹰眼图、工具箱三个工具面板。 菜单栏、工具栏、工具箱集成了系统中实现的全部功能&#x…...
Microsoft.Office.Interop.Excel 的简单操作
Microsoft.Office.Interop.Excel 的简单操作 1、安装 Microsoft.Office.Interop.Excel2、声明引用 Microsoft.Office.Interop.Excel3、简单的新建 EXCEL 操作代码4、将 DataGridView 表数据写到 EXCEL 操作代码5、将 EXCEL 表数据读取到 C# 数据表 DataTable 操作代码 1、安装 …...
Debezium日常分享系列之:Debezium 3.0.8.Final发布
Debezium日常分享系列之:Debezium 3.0.8.Final发布 稀疏向量逻辑类型重命名架构历史配置默认值的更改潜在的 Vitess 数据丢失Oracle 的 Reselect 列后处理器行为更改MariaDB 的 SSL 连接 稀疏向量逻辑类型重命名 PostgreSQL 扩展 vector(也称为 pgvecto…...
论传输层的TCP协议和UDP协议scoket通讯
TCP传输前需要三次握手---断开需要四次挥手 谁先发出请求、谁是客户端(client)另一个就是服务器(server)---简称CS架构 现在更多的是BS架构 什么是BS架构? blower server 浏览器服务器---也就是浏览器代替了客户端…...
《鸢尾花数学大系:从加减乘除到机器学习》开源资源
《鸢尾花数学大系:从加减乘除到机器学习》开源资源 Gitee:https://gitee.com/higkoo/ bilibili:https://space.bilibili.com/513194466 GitHub:https://github.com/Visualize-ML...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例2: 分页和排序
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例2: 分页和排序📚页面效果📚指令输入定义…...
MySQL——DQL、多表设计
目录 一、DQL 1.基本查询 2.条件查询 3.分组查询 4.排序查询 5.分页查询 二、多表设计 1.一对多 2.一对一 3.多对多 一、DQL 1.基本查询 注意: *号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率) 2.条件查询…...
【文献阅读】The Efficiency Spectrum of Large Language Models: An Algorithmic Survey
这篇文章发表于2024年4月 摘要 大语言模型(LLMs)的快速发展推动了多个领域的变革,重塑了通用人工智能的格局。然而,这些模型不断增长的计算和内存需求带来了巨大挑战,阻碍了学术研究和实际应用。为解决这些问题&…...
玩转大模型——Trae AI IDE国内版使用教程
文章目录 Trae AI IDE完备的 IDE 功能强大的 AI 助手 安装 Trae 并完成初始设置管理项目什么是 “工作空间”?创建项目 管理插件安装插件从 Trae 的插件市场安装从 VS Code 的插件市场安装 禁用插件卸载插件插件常见问题暂不支持安装 VS Code 插件市场中某个版本的插…...
【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.3.1 避免频繁更新(Update by Query的代价)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 Elasticsearch数据更新与删除深度解析:2.3.1 避免频繁更新(Update by Query的代价)案例背景1. Update by Query的内部机制解析1.1 文档更…...
stable-diffusion-webui 加载模型文件
背景 stable-diffusion-webui 安装完毕后,默认的模型生成的效果图并不理想,可以根据具体需求加载指定的模型文件。国内 modelscope 下载速度较快,以该站为例进行介绍 操作步骤 找到指定的模型文件 在 https://modelscope.cn/models 中查找…...
BKA-CNN基于黑翅鸢算法优化卷积神经网络的数据多特征分类预测Matlab
BKA-CNN基于黑翅鸢算法优化卷积神经网络的数据多特征分类预测Matlab 目录 BKA-CNN基于黑翅鸢算法优化卷积神经网络的数据多特征分类预测Matlab分类效果基本介绍BKA-CNN基于黑翅鸢算法优化卷积神经网络的数据多特征分类预测一、引言1.1、研究背景和意义1.2、研究现状1.3、研究目…...
SparkStreaming之04:调优
SparkStreaming调优 一 、要点 4.1 SparkStreaming运行原理 深入理解 4.2 调优策略 4.2.1 调整BlockReceiver的数量 案例演示: object MultiReceiverNetworkWordCount {def main(args: Array[String]) {val sparkConf new SparkConf().setAppName("Networ…...
maven高级-05.私服
一.私服...
FFmpeg-chapter2-C++中的线程
1 常规的线程 一般常规的线程如下所示 // CMakeProject1.cpp: 定义应用程序的入口点。 //#include "CMakeProject1.h" #include <thread> using namespace std;void threadFunction(int index) {for (int i 0; i < 1000; i){std::cout << "Th…...
【前端】简单原生实例合集html,css,js
长期补充,建议关注收藏点赞。 目录 a标签设置不一样的花样(图片但不用img)侧边固定box分栏input各种类型iframe表单拖拽 a标签设置不一样的花样(图片但不用img) a标签里面不用嵌套img,直接设置为其bg-img即可 <!DOCTYPE html…...
Linux下的shell指令(一)
作业 1> 在终端提示输入一个成绩,通过shell判断该成绩的等级 [90,100] : A [80, 90) : B [70, 80) : C [60, 70) : D [0, 60) : 不及格 #!/bin/bash read -p "请输入学生成绩:" score if [ "$score" -ge 90 ] && [ "$scor…...
AJAX介绍
XMLHttpRequest get请求使用 const xhr new XMLHttpRequest(); xhr.open("GET", "/data/test.json", true); xhr.onreadystatechange function () {if (xhr.readyState 4) {if (xhr.status 200) {alert(xhr.responseText);} else {console.log("…...
Serilog: 强大的 .NET 日志库
Serilog 是一个功能强大的日志记录库,专为 .NET 平台设计。它提供了丰富的 API 和可插拔的输出器及格式化器,使得开发者能够轻松定制和扩展日志记录功能。在本文中,我们将探索 Serilog 的基础知识、API 使用、配置和一些常见的示例。 1. 日志…...
串口通讯基础
第1章 串口的发送和接收过程 1.1 串口接收过程 当上位机给串口发送(0x55)数据时,MCU的RX引脚接受到(0x55)数据,数据(0x55)首先进入移位寄存器。数据全部进入移位寄存器后,一次将(0x55)全部搬运…...