【笔记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+/

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('提示语句')

————————————

仅用于本人学习

来源:网络

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA 接入 Deepseek

在本篇文章中&#xff0c;我们将详细介绍如何在 JetBrains IDEA 中使用 Continue 插件接入 DeepSeek&#xff0c;让你的 AI 编程助手更智能&#xff0c;提高开发效率。 一、前置准备 在开始之前&#xff0c;请确保你已经具备以下条件&#xff1a; 安装了 JetBrains IDEA&…

【leetcode hot 100 189】轮转数组

错误解法一&#xff1a;申请一个数组&#xff0c;第i个数放在新数组的ik或ik-nums.length上 class Solution {public void rotate(int[] nums, int k) {int[] resultsnew int[nums.length];for(int i0; i<nums.length; i){if(ik<nums.length){results[ik] nums[i];}els…

Express MVC

1. 安装依赖 npm init -y npm install express npm install --save-dev typescript ts-node ejs types/node types/express tsc --init 2. 项目目录结构如下&#xff0c;没有的手动创建 /my-app/src/modelsuser.ts/viewsindex.ejsuserList.ejs/controllersuserController.ts…

AI数据分析:deepseek生成SQL

在当今数据驱动的时代&#xff0c;数据分析已成为企业和个人决策的重要工具。随着人工智能技术的快速发展&#xff0c;AI 驱动的数据分析工具正在改变我们处理和分析数据的方式。本文将着重介绍如何使用 DeepSeek 进行自动补全SQL 查询语句。 我们都知道&#xff0c;SQL 查询语…

从小米汽车召回看智驾“命门”:智能化时代 — 时间就是安全

2025年1月&#xff0c;小米因车辆“授时同步异常”召回3万余辆小米SU7&#xff0c;成为其造车历程中的首个重大安全事件。 从小米SU7召回事件剖析&#xff0c;授时同步何以成为智能驾驶的命门&#xff1f; 2024年11月&#xff0c;多名车主反馈SU7标准版的智能泊车辅助功能出现…

【论文阅读】Universal Adversarial Attacks for Visual Odometry Systems

一、背景 广义敌对攻击是一种针对深度学习的攻击方法&#xff0c;通过对整个输入进行微调&#xff0c;从而影响模型的运行结果。现有的针对回环检测的攻击以及物理贴图等方法&#xff0c;大多数都是针对一般的SLAM算法进行设计&#xff0c;而对于基于深度学习的视觉里程计来说…

A-LOAM工程笔记(一):工程编译及运行(ubuntu20.04 + ros_noetic)

1.编译前准备 需要提前安装Ceres solver和opencv和PCL&#xff0c;如果你安装的是完整版ROS那么PCL已经自动安装好了。安装好后将工程克隆到工作目录然后编译&#xff1a; cd ~/catkin_ws/src/ git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM.git aloam_velodyn…

数据库基础五(数据库环境变量配置详细教程)

1、在小皮的设置界面检测3306端口&#xff0c;保障3306端口可用&#xff1b; 2、在小皮的首面界面&#xff0c;启动MySQL&#xff1b; 3、进行环境变量设置&#xff0c;找到MySQL的路径&#xff0c;进行复制&#xff1b; 4、在Windows的搜索栏内&#xff0c;输入“环境变量”&a…

【对话推荐系统综述】A Survey on Conversational Recommender Systems

文章信息&#xff1a; 发表于&#xff1a;ACM Computing Surveys 2021 原文链接&#xff1a;https://arxiv.org/abs/2004.00646 Abstract 推荐系统是一类软件应用程序&#xff0c;旨在帮助用户在信息过载的情况下找到感兴趣的项目。当前的研究通常假设一种一次性交互范式&am…

2024四川大学计算机考研复试上机真题

2024四川大学计算机考研复试上机真题 2024四川大学计算机考研复试机试真题 历年四川大学计算机考研复试机试真题 在线评测&#xff1a;https://app2098.acapp.acwing.com.cn/ 分数求和 题目描述 有一分数序列&#xff1a; 2/1 3/2 5/3 8/5 13/8 21/13… 求出这个数列的前 …

嵌入式学习-EXTI外部中断

STM32 是一种基于 ARM Cortex-M 内核的微控制器系列&#xff0c;广泛应用于嵌入式系统开发。中断&#xff08;Interrupt&#xff09;是 STM32 中一个非常重要的功能&#xff0c;它允许微控制器在执行主程序的同时&#xff0c;响应外部事件或内部事件的请求&#xff0c;从而实现…

springboot可以同时处理多少个请求

源码 ServerProperties Tomcat 配置 参数解析 必须要先建立连接&#xff0c;再用线程处理。 比如max-connection最大连接数&#xff0c;accept-count相当于队列容量。总连接数二者和 min-spare-treads 核心线程数默认10&#xff0c;max-threads最大线程数默认200。 正常…

浅谈汽车系统电压优缺点分析

汽车电气系统的电压等级选择直接影响整车性能、能效和兼容性。以下是 12V、24V、48V 系统的简单介绍&#xff0c;包括技术特点、优缺点及典型应用场景。 汽车电气系统的发展随着车辆电子设备的增多和对能效要求的提高&#xff0c;电压等级也在逐步提升&#xff0c;从传统的12V…

Jmeter日志打印

实现&#xff1a; 在使用Jmeter进行脚本开发时&#xff0c;有时候需要打印出日志&#xff0c;以便进行代码调试。 在 JSR223 Sampler 或 JSR223 PostProcessor 中&#xff0c;你可以使用以下代码来打印不同级别的日志。 // 打印信息级别的日志 log.info("这是一条信息级…

Spring Boot 整合 JMS-ActiveMQ,并安装 ActiveMQ

1. 安装 ActiveMQ 1.1 下载 ActiveMQ 访问 ActiveMQ 官方下载页面&#xff0c;根据你的操作系统选择合适的版本进行下载。这里以 Linux 系统&#xff0c;Java环境1.8版本为例&#xff0c;下载 apache-activemq-5.16.7-bin.tar.gz。 1.2 解压文件 将下载的压缩包解压到指定目…

蓝桥杯备考:动态规划线性dp之传球游戏

按照动态规划的做题顺序 step1&#xff1a;定义状态表示 f[i][j] 表示 第i次传递给了第j号时一共有多少种方案 step2: 推到状压公式 step3:初始化 step4:最终结果实际上就是f[m][1] #include <iostream> #include <cstring> using namespace std;const int N …

playwright Electron 应用程序启动问题处理,依赖处理,本地开发服务器搭建

在使用 Playwright 启动 Electron 应用时&#xff0c;偶尔会遇到 Electron 应用程序启动后没有返回对应的实例&#xff08;ElectronApplication&#xff09;的问题。本文将为你提供可能的原因分析和相应的解决方案 1. 可能的原因分析 1.1 启动命令配置不正确 详细描述 Play…

【Java---数据结构】链表 LinkedList

1. 链表的概念 链表用于存储一系列元素&#xff0c;由一系列节点组成&#xff0c;每个节点包含两部分&#xff1a;数据域和指针域。 数据域&#xff1a;用于存储数据元素 指针域&#xff1a;用于指向下一个节点的地址&#xff0c;通过指针将各个节点连接在一起&#xff0c;形…

FreeRTOS 源码结构解析与 STM32 HAL 库移植实践(任务创建、删除篇)

1. FreeRTOS源码结构介绍 1.1 下载源码 ​ 点击官网地址&#xff0c;选择 FreeRTOS 202212.01非 LTS 版本&#xff08;非长期支持版&#xff09;&#xff0c;因为这个版本有着最全的历程和更多型号处理器支持。 1.2 文件夹结构介绍 ​ 下载后主文件 FreeRTOSv202212.01 下包…

如何评估所选择的PHP后端框架的性能?

大家在选择PHP后端框架的时候&#xff0c;如果想评估其性能如何&#xff0c;能不能扛得住你的项目&#xff1f;可以根据以下几点进行分析&#xff0c;帮助大家选择到更符合自己心目中的PHP后端框架。 1. 基准测试 基准测试是评估框架性能的基础方法&#xff0c;主要通过模拟高…