一.python是一种编程语言
编程语言:本质是一门语言
语言:两种事物沟通的表达方式/工具
编程:按自己的思维逻辑,运用编程语言表达出来
编程的目的:按照人类的思维逻辑去工作,从而解放人力
人--------------程序语言----------->计算机
二.计算机基础
计算机:俗称”电脑“, 即通电的大脑,电脑二字蕴含了人类对计算机的终极期望,希望它能真的像人脑一样去工作,从而解放人力。
使用计算机的原因:为了执行人类的程序,从而把人类解放出来
大前提:计算机所有的组成都是模仿人的某一功能或器官
1.计算机的五大组成部分(重点)
控制器 作用:是计算机的指挥系统,负责控制计算机所有其他组件的运行
-
运算器 作用: 是计算机的运算功能,用来做算术运算和逻辑运算,相当于人脑
控制器+运算器=cpu, cpu相当于人的大脑
-
存储器/IO设备 作用:是计算机的记忆功能,负责数据的存取
分类:
内存(基于电工作):存取数据都快,断电数据丢失,只能临时存取数据
ps: cpu存取的数据和指令都来自于内存
外存(硬盘,基于磁工作):存取速度都慢,断电数据也不丢,可以永久保存数据
ps:内存的存取速度要远远高于外存
输入设备input : 计算接收外界输入数据的工具 ,如键盘,鼠标
-
输出设备output : 计算机向外输出数据的工具 ,如显示器,打印机
ps:存储器如内存、磁盘等既是输入设备又是输出设备,统称为IO设备
2.一个程序的运行与三个核心硬件的关系(重点)
三个核心硬件:cpu、内存、硬盘
<mark style="box-sizing: border-box; background: rgb(255, 255, 0); color: rgb(0, 0, 0);">程序最先是存放于硬盘之上,程序的运行一定事先把程序的代码加载到内存,然后cpu从内存中读取指令执行</mark>
3.操作系统
概念:操作系统是一个协调、管理、控制计算机硬件资源与应用软件资源的一个控制程序 作用: (1)控制计算机硬件的基本运行 (2)把使用硬件的复杂操作封装成简单的功能,给上层的应用程序使用
3.1 系统软件与应用软件
计算机硬件是死的,计算机硬件的运行都受软件控制,所以说,软件相当于计算机的灵魂 具体来说软件分类: (1)应用软件:应用程序相关逻辑 (2)系统软件:控制底层硬件的,操作系统应用软件与硬件之间的一个桥梁,是协调、管理、控制计算机硬件与应用软件资
3.2 计算机系统三层结构
我们开发应用程序本质是在控制硬件,但是我们直接打交道的是操作系统,应用程序都是通过操作系统来间接地操作硬件的,所以一套完整的计算机系统分为三层,如下
平台
应用程序都是运行于操作系统之上,而操作系统则是运行于硬件之上的,所以承载应用程序的是一台运行有操作系统的计算机,称之为应用程序的运行平台,即: 计算机硬件+操作系统=平台
常见的平台有:windows系统+某款硬件、linux系统+某款硬件、ubuntu+某款硬件等
软件的跨平台性指的是:一款软件可以任意平台上运行,是衡量软件质量高低的一个非常重要的指标
4.cpu
-
cpu的分类与指令集
指令集:把程序员控制cpu的指令,转成cpu操作某个组件的指令。这些指令不会自发的运行,由人类控制它才能运行
-
cpu的分类:精简指令集,复杂指令集
<pre spellcheck="false" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" lang="" cid="n52" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px 0px; margin-bottom: 15px; margin-top: 15px; width: inherit;"> 精简指令集:指令集简短,完成的事情,非常的简单。
优点:不容易错,更稳定。
缺点:实现复杂的操作,需要的指令集就会成堆,才会完成这一件事。
作用:争对稳定的需求,争对大型的计算机架构的服务器,它就需要精简指令集。(例子:网络设备,服务器等) </pre><pre spellcheck="false" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" lang="" cid="n53" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px 0px; margin-bottom: 15px; margin-top: 15px; width: inherit;"> 复杂指令集: 单条指令比较复杂
优点:单条指令集完成的事情比较多,意味着完成复杂的事,只需要几条就够。
缺点:单挑指令比较复杂,容易出错,不稳定。
作用:争对功能更丰富,更强大,因该需要cpu内部的复杂指令集。(例子:个人电脑)</pre>
4.1.x86-64(重点)
x86-cpu型号
64位-cpu一次性能从内存中取出64位二进制指令(cpu的位数指的是cpu一次性能从内存中取出多少位二进制指令)
cpu具有向下兼容性:64的cpu既能运行32位的程序也能运行64位的程序
4.2.内核态与用户态(重点)
cpu的两种工作状态:内核态,用户态
内核态:运行的程序是操作系统,可以操作计算机硬件
用户态:运行的程序是应用程序,不能操作计算机硬件
内核态与用户态的转换
- 应用程序的运行必然涉及到计算机硬件的操作,那就必须有用户态切换到内核态下才能实现,所以计算机工作时在频繁发生内核态与用户态的转换
多线程与多核芯片
2核4线程:2核代表有两个cpu,4线程指的是每个cpu都有两个线程=>假4核
4核8线程:4核代表有4个cpu,8线程指的是每个cpu都有两个线程=>假8核
5.存储器
-
结构从上到下:cpu,寄存器,高速缓存,内存,硬盘,磁盘
* 为了提高cpu读取数据的速度,所以在cpu与磁盘之间引入了内存,然后cpu从内存中读取数据其实也是慢的,所以之间加入的高速缓存,高速缓存还是不够块,又在cpu与高速缓存之间又增加了寄存器,这样一步一步提高cpu读取数据的速度
* 寄存器: 使用cpu同等材质制造而成,在cpu内部集成,cpu运行下一步操作立马需要的指令。
* 高速缓存:存放cpu经常使用的数据。cpu读取数据的时候,先从高数缓存中查看自己所需要的数据,如果有直接从高速缓存中取走,速度很快2ns(这时高速缓存命中)。
RAM(random access memory 随机存取存储器):内存
ROM(ready only memory 只读存储器):“只读内存” 存放计算机厂商写死计算机上的一段核心程序=》BIOS
CMOS(Complementary Metal-Oxide-Semiconductor Transistor 互补金属氧化物半导体):存取速度慢,断电数据丢失,耗电量极低
-
硬盘:
-
机械硬盘:磁盘
机械硬盘: 依赖于机械的转动,盘片基于磁型号,所以也称之为磁盘。高低磁性号,高磁性号:代表1,二进制1。低磁性号:代表0,二进制0.
磁头:负责读写数据
磁道:磁盘的一圈数据,对应着一串二进制(1bit代表一个二进制位)
单位换算
<pre spellcheck="false" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" lang="" cid="n107" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px 0px; margin-bottom: 15px; margin-top: 15px; width: inherit;"> 注意:严格区分大小写,1kb是1kbit 而不是 1kBytes。小写b表示比特位,大写比表示字节。
1bit(比特位) = 8Bytes(字节)
1024Bytes = 1KBytes
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB
拓展:对应产商的硬盘存储单位1000表示为一个单位,例200G=20010001000B</pre> -
**扇区**:
注意:**硬盘**的一**次性读写数据**的**最小单位**就是**扇区**。1个扇区为512Bytes。
**拓展**:**操作系统**的**一次性读写的单位**是**1个block块**,block的概念**对应**的是**8个扇区的大小**,也就是4096Bytes。操作系统攒够了block块的容量才交给硬盘,以此来减少与硬盘打交道的次数,从而减少IO次数。(block块大小可以自定义,默认1个block等于8个扇区大小)
##### 柱面:
柱面是哪一部分?所有的盘片,多个盘片上下当成一个整体.
磁盘的分区的概念,从一个柱面开始,到第二个柱面开始,下面的所有范围的整体,就是一个磁盘的分区。
* **固态硬盘**
基于电子工作,取代机械硬盘容易损坏的缺点,使用的是物理元件,闪存芯片。
-
IO延迟(*****)
例:假设当前硬盘磁头转速是7200/min,也就是120/s,那么转一圈需要花费1/120≈8ms,半圈也就是4ms 。
平均寻道时间: 硬盘读数据时 ,机械手臂转到数据所在磁道需要花费的时间。受限于物理工艺水平,目前机械硬盘可以达到的是5ms
平均延迟时间: 机械手臂找到该数据所在磁道时,需要定位到该数据,定位到该数据得时间,叫平均延迟时间 。转半圈需要花费4ms,受限于硬盘的转速
IO延迟=平均寻道时间+平均延迟时间
优化程序运行效率的一个核心法则:能从内存取数据,就不要从硬盘取
-
虚拟内存
内存不够用的时候,在硬盘上划一块空间,这个空间就叫虚拟内存(拓展:linux系统的swap分区就是虚拟内存)
作用:当内存不够用的时候,保证程序的正常运行。
IO设备=设备的控制+设备本身
-
磁带
- 一般用于备份,价格低,容量大,便于携带
6.总线
所有的计算的组成部分,这些硬件,都是集成在一块板子上,这块板子就叫主板。而总线就是组件于组件之间来回传输数据的一种桥梁。
北桥即PCI桥:负责连接CPU与内存,可以发现北桥连接的都是高速设备。
南桥即ISA桥:负责连接SCSI(硬盘的一种接口)、USB(鼠标键盘等一些接口),可以发现南桥连接的是慢速设备。
7.操作系统的启动流程
BIOS介绍:
BIOS:Basic Input Output System
BIOS被写入ROM设备
裸机下的3大硬件:
cpu
ROM:充当内存,存放BIOS系统
CMOS:充当硬盘
安装操作系统的启动流程(重点)
1.计算机加电
2.BIOS开始运行,检测硬件:cpu、内存、硬盘等
3.BIOS读取CMOS存储器中的参数,选择启动设备
4.从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)
5.根据分区信息读入bootloader启动装载模块,启动操作系统
6.然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核, 完成了BIOS与操作系统的交接,获取了控制所有硬件的最高权限。
安装操作系统后的3大硬件
cpu
RAM: 开机以后,操作系统就加载到内存。
本地硬盘:分区,启动盘存放操作系统这个应用程序
BIOS
1、存有win10系统的光盘、u盘、移动硬盘:无密码
2、本地硬盘上的win7系统:密码
8.密码破解与相关安全
-
破解操作系统设置的密码
1、拿个存有无密码的操作系统的U盘,插入电脑U盘接口,充当硬盘
2、启动BIOS,设置该没有密码的操作系统的启动优先级,待BIOS与该没有密码的操作系统交接完毕,重启计算机,此时优先加载的就是该没有密码的操作系统。
3、该没有密码的操作系统此时获取了控制所有硬件的最高权限,而那个设置密码了的操作系统,仅仅只是躺在硬盘上的一堆普通的程序无恙,这时就可以随意修改密码。
4、修改过后,重启计算机,进入BIOS中,把修改密码的操作系统的启动优先级,设置为最优先,重启计算机,拔出U盘,达到修改密码锁定的问题。
-
破解BIOS中设置的密码
归根结底,BIOS存放在ROM中,而提供启动信息的参数,都存放在CMOS中,可知道的是CMOS由主板电池供电,拔插 主板电池,数据缓存消失,插入以后,原始数据不存在,BIOS中的密码设置也不起作用了。所以说没有绝对的安全。
9.应用程序的启动流程(重点)
1、双击exe快捷方式--》exe文件的绝对路径
2、操作系统会根据文件路径找到exe程序在硬盘的位置,控制其代码从硬盘加载到内存
3、然后控制cpu从内存中读取刚刚读入内存的应用程序的代码执行,应用程序完成启动
三.python入门
1.编程语言
分类:
机器语言:直接用二进制编程
汇编语言: 用一个英文标签代表一组二进制指令
高级语言(编译型、解释型): 用人类的字符去编写程序
编译型(是把程序所有代码编译成计算机能识别的二进制指令,之后操作系统会拿着编译好的二进制指令直接操作硬件)
总结:
1、执行效率:机器语言>汇编语言>高级语言(编译型>解释型)
2、开发效率:机器语言<汇编语言<高级语言(编译型<解释型)
3、跨平台性:解释型具有极强的跨平台型
2.python介绍
python语言:指的是python的语法风格
python解释器:专门用来识别python这门语言的语法并解释执行的
python语言与python解释器的关系:
1.python解释器是一款应用程序专门用来解释python这门语言的语法风格并执行的
2.python语言缩写的程序最终都是被解释器执行的,所以我们可以这么说python语言更多地都是在调用python解释器的功能,所以解释器性能的高低很大程度决定了我们用python写出来的程序执行效率的高低
3.解释器多版本共存
3.1python解释器部分文件夹介绍
DDLS:病毒程序需要获取该目录的控制权限
scripts:存放pip等exe可执行程序,用来安装第三方库。pip pip2 都是一样的功能,只是名字不同。
3.2关于解释器的一些CMD命令操作
切换盘:D:
查看python3安装的第三方库目录位置:pip3 -V (前提:安装了path环境变量)
查看python2安装的第三方库目录位置:pip2 -V (前提:安装了path环境变量)
3.3配置环境变量需要了解的细节
环境变量寻找的优先级:计算机先从当前文件夹下找,找不到则到设置的环境变量中从前往后检索。
用户环境变量只对当前用户生效,系统环境变量争对所有用户都生效。
windows7中:使用分号,分隔不同的path路径
3.4python库的虚拟环境介绍
- 开发一款软件,需要定义虚拟环境,避免每个项目所需下载的第三方库在一个pip安装目录下,以免对原生库产生混乱的影响。
环境变量:一般是指在操作系统中用来指定操作系统运行环境的一些参数
4、 运行python程序的两种方式
-
交互式
即时得到程序的运行结果,多用于调试
-
脚本的方式
把程序写到文件里(约定俗称文件名后缀为.py),然后用python解释器解释执行其中的内容
5、一个python应用程序的运行的三个步骤(重点)
python3.8 c.py
1、先启动python3.8解释器
2、解释器会发送系统调用,把c.py的内容从硬盘读入内存,此时c.py中的内容全部为普通字符,没有任何语法意义
3、解释器开始解释执行刚刚读入内存的c.py的代码,开始识别python语法
文本编辑器读取C:\a\b\c.py文件内容三个步骤
1、先启动文本编辑器 2、文本编辑器会发送系统调用,把c.py的内容从硬盘读入内存 3、文本编辑会将刚刚读入内存的内容控制输出到屏幕上,让用户看到结果
总结: 二者在前两个阶段做的事情完全一致 唯一不同的就是第三个阶段对读入内存的python代码的处理方式不同
6.注释
注释:对代码的解释说明,被注释的代码不会被执行
注释的原因:增加代码的可读性
分类:单行注释(#注释内容)多行注释('''注释内容''' """注释内容""")
7、IDE集成开发环境pycharm
什么是集成开发环境?
- 实际开发中,除了编译器是必须的工具,我们往往还需要很多其他辅助软件。例如:编辑器、代码提示器、调试器、项目管理工具、漂亮的界面,这些工具通常被打包在一起,统一发布和安装,它们统称为集成开发环境
**如何安装pycharm集成开发环境?****