📔 Python基础编程 学习笔记
1. Python概述¶
-
Python是目前流行的编程语言之一,因简单、易于学习的语法而受欢迎。
-
Python 是Guido Van Rossum(龟叔)在1989年编写出的编程语言。
-
Python提供了很多基础库,包括网络、文件、数据库、文本处理等。所以无需从零开发库,直接调用现成的库即可完成对应的功能开发。
-
Python是一个面向对象的高级语言,也是动态解释型语言。
-
现目前已经基本上都是Python3的场景,所以也就不写那种问Python2和Python3区别的脑瘫面试问题的总结。
-
Python环境配置篇自行Google。
1.1 编程型和解释型的区别¶
参考资料:Stanford CS143 Lecture01
直接将程序作为输入,然后会输出一个可执行文件。对于可执行文件来说,可能是汇编语言,也可能是字节码,可以是任意数量不同的实现语言。通过使用数据在执行文件中进行结果的输出。
在生成可执行文件的过程就是预处理的过程,可以在许多不同的输入上运行系统的可执行文件
- 对于机器来说,离线可用。
- 需要将源文件翻译成机器语言
编译器
:阅读以某一种语言(源语言、汇编语言等)编写的程序,把该程序翻译成另一种语言编写的程序(等价转换)。
功能
:发现在翻译程序过程中发现源程序中的错误。
1.1.2 解释器 -- "在线"运行¶
- 对于解释器来说可以是在线。
- 无需任何操作,直接可run。
解释器
:直接利用用户提供的输入执行源程序中指定的操作。无需程序翻译的过程。常见的语言:Java、Python。
⚠️注意:在输入到输出的过程中,编译器产生目标程序的速度比解释器快,但解释器的错误排查效果比编译器好。
1.1.3 两者的区别总结¶
-
编译型(如C语言)
- 将程序代码直接翻译(常见的翻译器:gcc)成计算机能够识别的二进制指令,之后OS拿着编译好的二进制文件直接操作硬件。
-
解释型(Python)
-
解释型,解释一行,执行一行,直接讲程序代码编译为字节码,然后让机器能够解析处理。
-
通过解释器将程序直接转换成机器可执行的代码。
-
1.1 Python的优缺点¶
-
优点
- 简单性,易于学习,上手快
- 代码规范度高,可阅读性强。
- 可维护性强
- 交互模式执行
- 可移植性强
- 提供了丰富的执行库
- 跨平台性强
-
缺点
- 效率相比于编译型的语言低。
- Python代码只有运行时才会有错误提示。
- 硬件方面的扩展性不高。
1.2 Python的应用场景¶
-
网站建设
- Python Web的前端和后端都会有使用。
-
AI发展领域
- NLP、CV、机器学习等领域
-
Python自动化测试
- 典型测试框架:Pytest
-
游戏工具
-
数据分析和数据挖掘
- Python爬虫
- 通过数据处理相关的库(Numpy、Pandas、Matplotlib等),让数据更加可视化。
-
科学计算
- 简单易上手
-
写小工具
2. Python基础语法概念¶
2.1 编程格式¶
对于Python,默认的编码格式是以 UTF-8
编码。所有的字符串都是Unicode字符串。
但也可以通过指定特定的编码格式:
Python中常见的几种编码格式:
-
ASCII表
- 只支持英文字符串
- 采用8位二进制数字对应一个英文字符串
-
GBK表
- 支持英文字符、中文字符
- 采用8位二进制数对应一个英文字符串
- 采用16位二进制数对应一个中文字符串
-
Unicode(内存中统一使用unicode)
- 兼容多个国家字符
- 采用16位二进制数对应一个中文字符串
- 个别生僻字会采用4位或者8位二进制数
-
UTF-8:(unicode transform format-8)
- 1 Bytes 英文
- 3 Bytes 汉字
2.1 Python标识符¶
对于标识符来说,Python和基本上的编程语言的规则是类似的。
-
第一个字符必须是
字母
或者下划线("_")
。 -
标识符的其它部分可以是字母、数字和下划线组成。
-
标识符区分大小写,大小写比较敏感。
Python3中,非ASCII码的标识符也是被允许使用的。
2.2 Python中常见的关键字¶
和C/C++语言一样,Python也有对应的 保留字(也被叫做关键字)
。
不可以用作任何标识符名称。
通过Python提供的关键字模块相关的库,查看当前的Python版本对应的关键字如下:
2.3 注释¶
-
注释也是代码中必不可少的一部分。
- 目的:增强代码的可读性和可维护性
- 可以让不需要的代码暂时性取消不执行,但不删除代码,增强代码的可调试性。
-
主要有两种注释方式:
- 单行注释
-
多行注释
2.4 变量和常量¶
-
变量
:可以变化的量。量指代事物的某种状态。-
变量的定义分为3个部分:变量名、赋值符号、值。
-
为什么需要变量?让程序可以记住事物的状态。
-
对于变量,先定义再引用。例如
-
-
变量名是指向等号右侧值的内存地址,用来访问等号右侧的值。
-
变量名的命名规则
-
以字母、数字、下划线组成,其中不能以数字作为开头。
-
名字最好是见名知意。例如last_name就表示姓氏。
-
不要使用中文名,会导致乱码或者其他的问题存在。
-
两种命名风格
- 使用驼峰命名方式
- 全部小写,然后用下划线连接。(在python中推荐使用这种方式)
-
-
变量值的特征
- 变量值的id:反应的是变量值的内存地址。
print(id(varname))
- 变量值的类型type:反应变量值的数据类型状态。通过
print(type(varname))
,直接查看数据的数据类型。 - 变量值的值:值本身。
- 变量值的id:反应的是变量值的内存地址。
-
常量
:不变的量-
注意:python中没有常量的概念,但程序开发过程中会涉及常量的概念。
-
但可以通过
大写字母
来表示常量
。 ----- 一种规范约定
-
2.5 缩进¶
Python通过缩进来表示代码块的区分。
- 对于同一个代码块来说,对应的空格数要一致。
3. Python基本数据类型¶
3.1 数字类型¶
-
int类型(整型)
-
float类型(浮点型)
3.2 字符串类型¶
-
用
引号(单引号、三单引号、双引号、三双引号)
包含的一串字符。 -
对于在字符串中嵌套使用时,外层使用单引号,则内层使用双引号,反之亦然。一般情况下,直接推荐使用单引号和双引号交互使用。
- 如何只使用同一种引号,则通过
转义符号(\)
来进行转义。
- 如何只使用同一种引号,则通过
-
字符串的拼接
- 可以通过加法方式进行。但是仅限于字符串和字符串之间使用。但是一般不推荐使用,因为处理效率很低。
-
打印重复内容
3.3 列表类型¶
-
列表
- 索引对应的值。索引从0开始,0代表第一个值。
-
作用
- 按位置记录记录多个值,并且按照索引取指定位置的值。
-
定义
- 在
[]
内用逗号分隔多个任意类型的指,一个值称为一个元素。
- 在
3.4 字典类型¶
-
对于索引描述的是顺序,位置,但对值没有描述性的功能。
-
字典:就是键值对。也就是 key 都有一个唯一对应的值。
- key通常是字符串类型,也就是所谓的描述性的功能。
-
作用:用来存多个值,且每个值都有唯一一个key与其对应。key对值有
-
语法:在
{}
内使用逗号分隔
开多个key:value
,例如: -
字典是无序的,直接通过键值来取值。
-
字典和列表可进行嵌套。
3.5 布尔类型¶
-
用来记录真假两种状态。
-
使用
- 通常是用来当作判断的条件,一般在一些判断语句中使用。
4. 垃圾回收机制¶
-
什么是垃圾回收机制?
- 垃圾回收(简称GC)是python解释器自带的一种机制,专门用来回收不可用的变量值所占用的空间。
-
为什么需要GC?
- 程序在运行过程中会申请大量的内存空间,对于一些无用的内存空间,如果不及时进行清理,则会导致内存消耗殆尽(内存溢出)。从而导致程序崩溃。
-
GC原理分析
-
Python的GC模块运用了 “引用计数(reference counting)”来跟踪和回收垃圾。
-
在引用计数的基础上,通过
标记-清除
的方式来解决容器对象可能产生的循环引用的问题。
-
通过分代回收(generation collection)以空间换时间的方式来进一步提高垃圾回收的效率。
- 引用计数:变量值被变量名关联的次数。
-
对于引用分为两种:
-
直接引用:
-
间接引用
- 通过间接赋值转换,最后再使用。
-
-
标记清除
- 容器对象(如list、set、dict、class、instance)都可包含对其他对象的引用,都可能产生循环引用。而标记清除计数则是为了解决循环引用的问题。
-
分代回收
-
基于引用计数的回收机制,每次回收内存,都需要把所有对象的引用计数都遍历一遍,会消耗时间,所以引入分代回收来提高回收效率,分代回收采用的是空间换时间的策略。
-
思想:多次扫描,都没有被回收的变量,gc机制会认为变量是常用变量,gc对其扫描的频率会降低。
-
具体实现:分代指的是根据存活时间来变量划分不同地等级。
-
新定义的变量,会被定义为最新的,扫描频率会增加。如果被引用,则扫描频率会减少。
-
5. 输入和输出¶
5.1 输入¶
- input:接收用户输入。
- 在Python3中是通过input将用户输入的内容存储成字符串类型。
raw_input
来进行用户输入操作。
- 但在Python2中如果使用input,则必须要求用户输入一个明确的数据类型,输入的是什么类型,则存什么类型。
5.2 格式化输出¶
-
使用f的方式,只在python3中才开始支持。
- {} 内的字符串可以被当做表达式来运行。
-
format的新增
6. 基本运算符¶
-
算术运算符
:+、-、@(矩阵乘)、*、/(有小数)、//(取商的整数部分)、%(取余数)、**(求幂)
-
赋值运算符
-
= 变量的赋值
-
增量赋值,例如:a +=5 等价于 a = a + 5
-
链式赋值:将一个值绑定到三个不同的变量
-
交叉赋值:通过中间变量来进行变量的交换赋值,类似比较两个数。
-比较运算符
:>、>=、<、<=、==、!=
- 条件可以是比较运算符,此时条件判断之后返回的是一个布尔值。- 可以是True、False
-
-
逻辑运算符
:not、and、or
not
:直接条件结果取反and
:逻辑与,连接左右两个条件,两个条件必须为True,才为True-
or
:逻辑或,连接左右两个条件,其中之一条件为True,则为True。 -
区分优先级:
not > and > or
-
显式布尔值:
True、False
。 -
隐式布尔值:所有的数据类型,其中0,None、空(空字符串、空列表、空字典)均为False,其余均为True。
所有的值都可以拿去当条件来使用。
- ⚠️注意:空和空格不是同一个意思。
-
成员运算符:
in
和not in
-
判断是否在或者不在某个里面。
-
在for循环中经常使用。
-
-
身份运算符:
is
和is not
- 主要是判断id是否相等。
-
位运算符:
>>、<<、&(按位与)、^(按位异或)、|(按位或)
对于Python运算符的优先级,如果区分不清楚先后,可以使用最简单和数学中一样的方式:加括号。
7. 分支控制if语句¶
-
语法格式:
-
对于python而言,一个缩进是4个空格(1个tab),代表属于同一个代码块,类似其他语言中的括号。
-
多重嵌套
8. 循环语句¶
- while循环
- for循环
8.1 while循环¶
-
while循环的语法格式:
-
死循环与效率问题
-
break
语句 -
continue
语句- 结束本次循环,直接进入下一次循环。在continue之后添加同级别代码毫无意义,因为永远无法执行。
8.2 for循环¶
-
循环就是解决重复的事情,是python提供的第二种循环机制。
-
只要for循环可进行,也可以用while循环来实现。for循环就是为了循环取值(遍历取值)。
-
for循环的语法格式:
-
for循环和while循环的区别
- 相同点:
- 都是循环,for循环的事,while循环也可。
- 不同点:
- while循环:条件循环,循环次数取决于条件何时变为False
- for循环称为取值循环,循环次数取决于in后面包含的值的个数。
- 相同点:
-
range
语句-
在python2中
range 中起始值是从0开始,如果省略起始值,则默认是0,例如range(3) 表示3次,终值是3,数学方法是: 0<=x<3 不包含3
如果使用方式如range(1,10,2),则此时2为步长,每隔多少计算一个,类似+2。 - 在python3中
-
-
for循环的嵌套
- 外层循环执行一次,而内层循环则需要完整的循环结束。
简单例子:
-
for循环嵌套的经典例子
- 打印九九乘法表
参考资料¶
- Python官方文档
- W3CSchool Python教程
- 路飞学城Python开发视频课:B站