编程软件基础知识(杂记)
1 电脑与编程常识
1.1 电脑知识
硬件:
【计算机硬件基础】-bilibili
【【最最基础的电脑硬件科普】第一期——CPU篇】
一文入门!最全面的电脑硬件基础知识大讲堂 - 玩机社数码小队的文章 - 知乎
计算机基础知识 - Allen的文章 - 知乎
学编程到底需要什么计算机基础知识? - 黑马程序员的文章 - 知乎
编程语言是如何诞生的? - 园长的文章 - 知乎
Hello World!——学编程前要知道的 - 蓝桥云课的文章 - 知乎
编程知识重难点 - Bilibili
【人工智能-数学基础-1】:深度学习中的数学地图:计算机、数学、数值计算、数值分析、数值计算、微分、积分、概率、统计.....
1.1.1
1.2 编译型语言和解释型语言
编程语言分为编译型语言和解释型语言
1.2.1 编译型语言
C
和C++
这两种语言是编译型语言,编译型语言的特点是执行速度快,缺点是什么呢?编译型语言需要编译器处理,主要工作流程如下:
源代码(source code) → 预处理器(preprocessor) → 编译器(compiler) → 目标代码(object code) → 链接器(Linker) → 可执行程序(executables) |
编译器调用预处理器进行相关处理,将源代码进行优化转换(包括清除注释、宏定义、包含文件和条件编译),然后,通过将经过预处理的源代码编译成目标代码(二进制机器语言),再通过调用链接器外加库文件(例如操作系统提供的API),从而形成可执行程序,让机器能够执行。
在这个工作流程中,目标代码要和机器的CPU架构相匹配,库文件要和操作系统相匹配。如果想在不同CPU的机器或者系统上运行C语言的源代码,就需要针对不同的CPU架构和操作系统进行编译,这样才能够在机器上运行程序。
所以,编译型语言的缺点我们就看到了,它不适合跨平台。
而且,到这里大家应该能知道,为什么CPU一样,但是exe程序只能Windows中运行,而不能在Mac中运行了。
1.2.2 解释型语言
源代码无需预先编译成可执行程序,在程序执行时,解释器读取一句源代码之后,先进行词法分析和语法分析,再将源代码转换为解释器能够执行的中间代码(字节码),最后,由解释器将中间代码解释为可执行的机器指令。
所以,编译型语言的可执行程序产生的是直接执行机器指令,而解释型语言的每一句源代码都要经过解释器解释为可以执行的机器指令,相比之下解释型语言的执行效率会低一些。
例如:Python程序运行时,先将源代码完整的进行转换,编译成更有效率的字节码,保存成后缀为“.pyc”的字节码文件,然后,翻译器再通过这个文件一句一句的翻译为机器语言去执行。
- 补充:JIT即时编译器(Just-In-Time Compiler)
无论是使用解释器进行解释执行,还是使用编译器进行编译后执行,最终源代码都需要被转换为对应平台的本地机器指令。那么,一些重复出现的代码,就可以将其编译为本地机器指令,重复使用,从而提高效率。这些重复出现的代码包括多次调用的方法和多次执行的循环体。
JIT即时编译器比较典型的例子是在JVM(Java虚拟机)中。
Java程序最初是通过解释器进行解释执行的,当Java虚拟机发现某个方法或代码块运行特别频繁的时候,就会认为这是“热点代码”(Hot Spot Code)。JIT即时编译器会将这些“热点代码”编译成与本地机器相关的机器指令,进行各个层次的优化。
1.3 操作系统、环境变量
1.3.1 为什么你需要操作系统?
假设你是一个程序员, 你写了一个C程序,如下所示:
int main() {
int a = 1;
int b = 2;
int c = a + b;
printf(%d, c);
return 0;
}
你的程序经过编译大概变成了这样的CPU指令
# 初始化a和b, mov指令把前一个操作数的值赋值给后一个操作数
Mov 1, a
Mov 2, b
# %开头的是CPU寄存器, 你可能还记得它是最快最小的存储设备, 我们要把a和b从内存里拿出来, 放进寄存器里
# 接下来Add指令才能工作
Mov a, %eax
Mov b, %ecx
# 加两个寄存器的值, 和写入后一个寄存器中, 在这里是写入eax寄存器
Add %ecx, %eax
# 把这个值写回内存
Mov %eax, c
#打印, 即把内存里的值送到显示器, 这里涉及一系列系统调用, 现在先不管
}
指令送进内存,CPU从内存里读取指令(读取指令和执行指令是CPU硬件实现的),执行访问内存,执行计算。 一起看起来都很美好,看起来我们不需要一个操作系统。
没错!恭喜你发现一个惊天大秘密!我们就是不需要操作系统!
如果我们的程序就一直这么简单的运行,那可能的却不需要。可这不符合我们对现代计算机的认知。浏览器和音乐播放器是两个不同的程序,为什么你能一边刷网页一边听歌?一定是这两个程序一起运行了,可是按说你只有一个CPU, 一套内存,只能跑一个程序,为什么你能同时运行好几个程序呢?
是的, 这就是操作系统最基本的功能,操作系统负责管理CPU和内存,让每一个程序都觉得自己是独立运行的。
1.3.2 环境变量
环境变量的作用就是指明操作系统的重要具录在哪里
参考链接:『教程』什么是环境变量_哔哩哔哩_bilibili
2 Python
2.1 Python安装前必须知道的三个概念
2.1.1 Python解析器
Python解释器是将Python源码高级语言解析(翻译)为二进制机器语言的工具。通常说安装Python就是指安装Python解释器。目前最新的Python解释器版本是Python 3.8x。另外,Python 2.x和Python 3.x不兼容。
2.1.2 Python编辑器
正如在电脑上编辑文档需要用Word、处理数据需要用Excel、做演示文稿需要用PPT、修图需要用PS一样,编写代码也需要特定的工具,而这个用来编写代码的工具就叫做编辑器。
Python的编辑器有很多,有Python解释器自带的IDLE、基于iPython的Jupyter Notebook、也有如PyCharm、Spyder、WinglDE等主要针对Python代码编辑的编辑器;还有很多编辑器,如Sublime Text、Vim、VSCode等适合各种编程语言的编辑器。
2.1.3 包管理工具
Python最大的优点之一就在于其丰富的库,pip(package installer for Python)就是库管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。Python 2.7.9+ 或 Python 3.4+ 以上版本都自带 pip 工具,只要安装了上述版本的python,则已经自带了pip工具。
2.1.4 小结
一般说的安装python就是指安装python解释器,因此python解释器必须安装。
出于编写代码效率的考虑,有必要安装专业的代码编辑工具,最常用的包括Python解释器自带的IDLE、Anaconda中的Jupyter Notebook以及专门针对Python的PyCharm。Python 3.4以后版本的解释器自带pip工具,因此不用自行安装。
参考链接:
[1] https://zhuanlan.zhihu.com/p/161617457
[2] https://blog.csdn.net/weixin_34631696/article/details/114016488
[3] https://www.bilibili.com/video/BV1K7411c7EL?spm_id_from=333.999.0.0
2.2 关于Python的一些知识和设置
2.2.1 Anaconda与conda与pip与virtualenv
(一) Anaconda与Conda
Conda和Anaconda经常会被混淆,可能是因为Conda被紧密地打包进了Anaconda和Miniconda中。
实际上:Conda是一个包管理器;Anaconda才是一个python发行版。虽然conda是用Anaconda打包的, 但是它们两个的目标是完全不同的。
① 软件发行版是在系统上提前编译和配置好的软件包集合, 装好了后就可以直接用。
包管理器是自动化软件安装,更新,卸载的一种工具。Conda,有命令”conda install”, “conda update”, “conda remove”, 所以很明显, conda是包管理器。② Anaconda 和 Miniconda. Anaconda发行版会预装很多pydata生态圈里的软件,而Miniconda是最小的conda安装环境, 一个干净的conda环境。
但是,conda和Anaconda没有必然关系, 你可以不安装Anaconda的同时, 使用conda安装和管理软件。
conda将几乎所有的工具、第三方包都当做package对待,甚至包括python和conda自身!因此,conda打破了包管理与环境管理的约束,能非常方便地安装各种版本python、各种package并方便地切换。并且Conda 是一个开源跨平台的包管理、环境管理工具,适用于 Python、Lua、Scala、Java、JavaScript、C/C++、FORTRAN 多种开发语言;Conda 支持 Windows、MacOS 和 Linux 系统。
环境是 conda 的重要概念,conda 可以创建各种环境,每个环境可以指定具体的 python 版本,可以在指定的环境下安装管理自己所需的包,并且环境之间相互隔离,互相不影响,类似命名空间的作用,对于不同需求场景下可以进行环境的自由切换。
目前Conda是Ananconda默认的Python包和环境管理工具,所以安装了Ananconda完整版,就默认安装了Conda。Conda既具有pip的包管理能力,同时也具有vitualenv的环境管理功能 ,因此在功能上Conda可以看作是pip 和 vitualenv 的组合。
我使用Anaconda之后最大的感触:可以创建多个虚拟环境! 如果既想使用TensorFlow,又想使用Pytoch,然后又不希望不同的库产生冲突,那么Anaconda的虚拟环境就是最好的选择!我在不同的虚拟环境下放不同的框架,不同的库,相互独立,只需要我每次切换到需要的环境下编程就可!
(二) pip与virtualenv
pip是Python包管理工具,该工具提供了对Python包的查找、下载、安装、卸载的功能。Python 2.7.9+或Python 3.4+以上版本都自带pip工具,只要安装了上述版本的python,则已经自带了pip工具。
virtualenv用来建立一个虚拟的python环境,一个专属于项目的python环境。
(三) 小结
-
Anaconda
- Anaconda是一个包含180+的科学包及其依赖项的发行版本。其包含的科学包包括:conda, numpy, scipy, ipython notebook等。
-
conda
- conda是包及其依赖项和环境的管理工具,conda包和环境管理器包含于Anaconda的所有版本当中。
- 适用语言:Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN。
- 适用平台:Windows, macOS, Linux
- 用途:
- ① 快速安装、运行和升级包及其依赖项。
- ② 在计算机中便捷地创建、保存、加载和切换环境。
- 如果你需要的包要求不同版本的Python,你无需切换到不同的环境,因为conda同样是一个环境管理器。仅需要几条命令,你可以创建一个完全独立的环境来运行不同的Python版本,同时继续在你常规的环境中使用你常用的Python版本。——conda官方网站
-
pip
- pip是用于安装和管理软件包的包管理器。
- Python中默认安装的版本:Python 2.7.9及后续版本:默认安装,命令为pip;Python 3.4及后续版本:默认安装,命令为pip3。
-
virtualenv
- virtualenv:用于创建一个独立的Python环境的工具。
- 解决问题:
- 当一个程序需要使用Python 2.7版本,而另一个程序需要使用Python 3.6版本,如何同时使用这两个程序?
- 如果将所有程序都安装在系统下的默认路径,如:/usr/lib/python2.7/site-packages,当不小心升级了本不该升级的程序时,将会对其他的程序造成影响。
- 如果想要安装程序并在程序运行时对其库或库的版本进行修改,都会导致程序的中断。
- 在共享主机时,无法在全局site-packages目录中安装包。
- virtualenv将会为它自己的安装目录创建一个环境,这并不与其他virtualenv环境共享库;同时也可以选择性地不连接已安装的全局库。
参考资料:
[1] conda 简介 - 简书
[2] Conda 是什么?干嘛用的?
[3] Anaconda与conda、pip与conda的区别 - 风影忍着的文章 - 知乎
[4] 这可能是一篇最贴心的Anaconda指北了(踩坑点)
[5] Anaconda的conda是什么?conda与pip的区别是什么?
[6] Anaconda系列:conda是什么?conda与pip的区别是什么?
[7] 关于conda和anaconda不可不知的误解和事实——conda必知必会
[8] Python中的包管理工具pip的基本使用
[9] conda与 pip 和 virtualenv关系理解
2.2.2 Python虚拟环境
参考资料:
[1] 什么是虚拟环境?为什么使用虚拟环境?Anaconda创建、激活、退出、删除虚拟环境
[2] 什么是python的虚拟环境_对python virtualenv虚拟环境的理解
[3] 【Python】虚拟环境的解释、意义和用法
2.2.3 anaconda powershell prompt和anaconda prompt
(一) 区别与联系
Anaconda PowerShell Prompt的原理与Anaconda Prompt的原理类似。简而言之,Anaconda Powershell Prompt比Anaconda Prompt功能更强大。
主要功能应该一样。区别在于powershell支持的命令更多。 类似于win10下的cmd 和powershell, anaconda powershell prompt比anaconda prompt多出了一些命令,比如你在两个窗口中都输入ls,一个有用一个没用。
(二) annconda的使用
(1) 切换环境
代码:conda activate + 虚拟环境名
;
示例:
参考链接:
[1] anaconda powershell prompt和anaconda prompt 的区别是什么? - 知乎
PEP8中文版 -- Python编码风格指南
【包教包会】Anaconda+Cuda+Cudnn+TensorFlow+Pytorch+Pycharm+Win10深度学习环境配置与卸载,看这一个就够了】