Python基础
1 Python简介
1.1 python起源
-
1991年第一个Python解释器诞生,用C语言实现,并能够调用C语言的库文件;
-
开源
1.1.1 解释器(科普)
-
计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言,计算机才能执行程序,将其他语言翻译成其他机器语言的工具,被称为编译器;
-
编译器翻译的方式有两种,一个是编译,另一个是解释,两种方式之间的区别在于翻译时间点的不同,当编译器以解释方式运行的时候,也称之为解释器;
-
解释器:翻译一句执行一句;编译型语言执行速度更快;但是跨平台性,解释器更好,A操作系统的编译器生成的exe只能在A系统执行,但是对于解释器,是在操作系统安装不同的解释器,就可以执行同一份代码在不同操作系统中执行;
1.2 python的设计目标
1.3 python的特点
- python是完全面向对象的语言
- 函数,模块,数字,字符串都是对象,在python中一切皆对象;
- 完全支持继承、重载、多重继承;
- 支持重载运算符,也支持泛型编程;
- python拥有一个强大的标准库,python语言的核心只包含数字,字符串,列表,字典,文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信,文本处理,数据库接口,图像系统,XML处理等额外功能;
- python社区提供了大量的第三方模块,使用方式与标准库类似,功能覆盖科学计算、人工智能、机器学习,Web开发,数据库接口,图形系统多个领域
1.3.1 面向对象的思维方式
- 面对对象是一种思维方式,也是一门程序设计技术;
- 解决复杂的问题,就可以找多个不同的对象、各司其职,共同实现,最终实现需求;
1.3.2 python优缺点
-
优点:
- 简单易学,免费开源;
- 面向对象,丰富的库
- 可拓展性
- 如果需要一段关键代码运行得更快或者某些算法不公开,可以把这部分程序用C或者C++编写,然后在python程序中使用它们;
-
缺点
- 运行速度慢**(解释性语言)**
- 国内市场较小,中文资料匮乏
1.4 第一个Python程序
- 目标
- 第一个
helloPython
程序; Python2.x
和3.x
版本简介;- 执行
Python
程序的三种方式- 解释器—
python
/python3
- 交互式—
ipython
- 集成开发环境—
PyCharm
- 解释器—
- 第一个
1.4.1 第一个HelloPython程序
1、Python源程序的基本概念
- Python源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做
Python
开发; - Python程序的文件扩展名通常都是
.py
1.4.2 Python 2.x与3.x版本简介![image-20220416173314221](https://img-blog.csdnimg.cn/img_convert/8c959cb08928712e228813c908c75a64.png)
1.4.3 执行Python程序的三种方式
1、解释器python/python3
2、交互式运行Python程序
- 直接在终端中运行解释器,而不输入要执行的文件名;
- 在Python的Shell中直接输入Python的代码,会立即看到程序执行结果
(1)交互式运行Python的优缺点
- 优点:
- 适合于学习/验证Python语法或局部代码;
- 缺点
- 代码不能保存;不适合运行太大程序;
(2)退出官方的解释器
3、IPython
1.4.4 Python的IDE—PyCharm
(1)集成开发环境(IDE)
(2)PyCharm
1.4.5 程序注释ctrl+/
- **作用:**在程序中进行标注说明,增强程序的可读性;
(1)单行注释(行注释)
- 以
#
开头,#
右边的所有东西都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用
- 在代码后面增加的单行注释
- 在程序开发时,同样可以使用#在代码后面增加说明性文字;
- 为了保证代码可读性,注释和代码之间至少有两个空格;
(2)多行注释(块注释)
- 注释信息很多,一行无法显示,使用多行注释,可以用一对连续的三个引号(单引号和双引号都可以)
1.5 算数运算符
- 算术运算符是运算符的一种;
- 在Python中
*
运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果;
1.5 程序执行原理(科普)
- 计算机的三大件;
- 程序执行原理;
- 程序的作用;
1.5.1 计算机的三大件
- CPU
- 中央处理器,一块超大规模的集成电路;
- 负责处理数据/计算
- 内存
- 临时存储数据,掉电丢失;
- 速度快,空间小,价格高;
- 硬盘
- 永久存储数据,掉电不丢失;
- 速度慢,空间大,价格低
1.5.2 程序执行原理
- 程序要执行,首先要被加载到内存;
- 程序用来处理数据,变量用来存储数据;
2 Python基本语法
2.1 变量
2.1.1 变量的基本使用
1、变量定义
- !!在Python中,每个变量在使用前必须赋值,变量赋值以后该变量才会被创建;!!
2、变量类型
-
**在Python中,定义变量不需要指定变量类型,**运行时Python解释器会根据赋值语句等号右侧数据自动推导保存数据的变量类型;
-
数据类型可以分为数字型和非数字型
- 数字型
- 整型(int)
- 浮点型(float)
- 布尔型(bool)
- 复数型(complex)
- 主要用于科学计算,例如:平面场问题,波动问题,电感电容问题;
- 非数字型
- 字符串
- 列表
- 元组
- 字典
- 数字型
-
type()函数可以查看变量类型;
3、python2.0和3.0中的整型
- python2.0中区分有int(整数)和long(长整数)
- python3.0中只有int(整数)
2.1.2 不同类型变量的计算
-
数字型变量直接计算
-
不同数字型变量之间可以直接计算
-
如果是bool类型,True=1,False=0;
-
-
字符串变量+拼接字符串
- 在Python中,字符串之间可以使用
+
拼接成新的为字符串;
- 在Python中,字符串之间可以使用
-
字符串变量可以与整数使用*重复拼接相同的字符串
-
!!数字型变量和字符串之间不能进行其他计算!!
2.1.3 变量的输入输出input、print
(1)input函数实现键盘输入
-
在Python中可以使用
input
函数从键盘等待用户输入 -
用户输入的任何内容Python都认为是一个字符串
(2)类型转换函数
-
可以用类型转换函数来调整输入的字符串类型;
(2)变量的格式化输出
- python中可以使用print函数将信息输出到控制台;
- 输出数据,需要格式化操作符;
%
被称为格式化操作符,专门用于处理字符串中的格式- 包含
%
的字符串,被称为格式化字符串 %
和不同的字符联用,不同类型的数据需要使用不同的格式化字符
- 包含
2.1.4 变量的命名
(1)标识符和关键字
-
标识符
-
标识符就是程序员定义的变量名、函数名;
-
标识符可以由字母、下划线和数字组成;
- 不能以数字开头;
- 不能与关键字重名
-
-
关键字
(2)变量的命名规则 -
命名规则是一种惯例,并无绝对与强制,目的是为了增加代码的识别和可读性;
-
注意:!!Python中标识符是区分大小写的!!
-
!!每个单词都使用小写字母!!
-
在python中还是都采用小写字母的命名方式!!
2.2 判断(if)语句
2.2.1 if 判断语句基本语法
(1)if
- 注意:在Python中,Tab和空格不要混用!!
- !!if语句以及所有缩进部分是一个完整的代码块!!
(2)else
- if 和 else 语句以及各自的缩进部分共同是一个完整的代码块
(3)elif
(4)if嵌套
2.2.2 比较(关系)运算符\
2.2.3 逻辑运算
-
逻辑运算符可以把多个条件按照逻辑进行连接,变成更复杂的条件
-
Python中的逻辑运算符包括:与and/或or/非not三种
2.2.4 应用练习—石头剪刀布
- 换行,一行太长,
- 随机数处理
2.3 循环
2.3.1 程序三大流程:顺序,分支,循环
- 顺序—从上向下,顺序执行代码;
- 分支—根据条件判断,决定执行代码的分支;
- 循环—让特定代码重复执行;
2.3.2 while语句基本语法
- 注意:while语句以及缩进不分是一个完整的代码块;
2.3.3 赋值运算符
-
赋值运算符中间不能使用空格
-
python中计算方法
- 自然计数法(从1开始)
- 程序计数法(从0开始)
- 除非特殊需求,否则循环的计数都从0开始
2.3.4 break和continue
break
和continue
是专门在循环中使用的关键字break
某一条件满足时,直接退出整个循环continue
某一条件满足时,不执行当层循环的后续代码
break
和continue
都只针对当前所在循环有效
2.3.5 循环嵌套
- print函数使用
- 默认情况下,
print()
函数输出内容后,会自动在内容末尾增加换行 - 如果不希望末尾增加换行,可以在
print
函数输出内容后面增加,end=""
- 其中“”中间可以指定print函数输出内容之后,继续希望显示的内容
- 默认情况下,
2.3.6 字符串中的转义字符
\t
在控制台输出一个制表符,协助在输出文本时垂直方向保持对齐- 制表符是在不使用表格情况下垂直方向按列对齐文本
\n
在控制台输出一个换行符
2.4 函数基础
2.4.1 函数概念
-
函数:就是把具有独立功能的代码块组织为一个小模块,在需要的时候调用
-
函数使用步骤:
- 1、定义函数----封装独立功能;
- 2、调用函数----享受封装成果
-
函数作用:使用函数提高编写效率以及代码的重用
2.4.2 函数定义及调用
-
def是define的缩写;
-
函数名称应该能够表达函数封装代码的功能,方便后续调用
-
函数名称符合标识符命名规则
- 字母,数字,下划线组成;
- 不能以数字开头
- 不能与关键字重名
-
通过**
函数名()
完成对函数的调用** -
定义好函数之后,只表示这个函数封装了一段代码,如果不主动调用函数,函数不会主动执行;
-
函数调用在函数定义后
2.4.3 函数的文档注释
-
在开发中,如果希望给函数增加注释,应该在定义函数下方,使用连续的三对引号
-
在连续的三对引号之间编写对函数的说明文字
-
在函数调用位置,使用快捷键ctrl+Q可以查看函数的说明信息
-
!!注意:因为函数体相对比较独立,函数定义的上方,应该和其他代码(包括注释)保留两个空行;!!
2.4.4 函数的参数
(1)函数参数的使用
(2)参数的作用
- 增加函数的通用性,针对相同的数据处理逻辑,能够适应更多的数据
- 函数内部,把参数当做变量使用,进行数据处理;
- 函数调用是,按照函数定义的参数顺序,通过参数传递在函数内部处理的数据
(3)形参与实参
- 形参:定义函数时,小括号的参数,用来接收参数用的;
- 实参:调用函数时,传入函数的变量;
2.4.5 函数返回值
2.4.6 函数的嵌套调用
- 一个函数里面又调用了另外一个函数,就是函数嵌套调用
2.5 模块
2.5.1 模块定义
-
模块是python程序架构的一个核心概念
- 模块就像工具包,要想使用工具包中的工具,需要导入import这个模块;
- 每一个扩展包
py
结尾的ython
源代码文件都是一个模块; - 在模块中定义的全局变量,函数都是模块能够提供给外界直接使用的工具;
-
小结
- 在一个python中定义变量或函数;
- 在另一个文件中import导入这个模块;
- 导入之后,可以使用**
模块名.变量
/模块名.函数
**的方式,使用这个模块中定义的变量或函数;
-
模块可以让编写过的代码方便复用!
-
模块名也是一个标识符,要符合标识符命名规则
2.5.2 Pyc文件(了解)
- 当工具包被import时,才会产生这个pyc文件;
2.6 高级变量类型
- 目标
- 列表
- 元组
- 字典
- 字符串
- 公共方法
- 变量高级
2.6.1 列表List
1、列表的定义
List
(列表)是python
中使用最频繁的数据类型,在其他语言中称为数组;- 存储一串信息;
- 列表用
[]
定义,数据之间用,
分隔; - 列表的索引从0开始;
- 索引就是数据在列表中的位置编号,索引又可以被称为下标;
name_list=["zhangsan","lisi","wangwu"]
2、列表list的常用操作
del
关键字本质上是用来将一个变量从内存中删除的- **注意:**如果使用del关键字将变量从内存中删除,后续代码就不能使用这个变量
- **注意:**如果使用del关键字将变量从内存中删除,后续代码就不能使用这个变量
- (5)排序sort,reverse
- (6)迭代遍历
3、列表的应用场景
- 尽管在
python
中列表可以存储不同类型的数据 - 但在开发中,更多的应用场景是,
- 列表存储相同类型的数据
- 通过迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作
2.6.2 关键字,函数和方法
- 关键字是Pyton内置的,具有特殊意义的标识符
- **函数封装了独立功能,**可以直接调用
- 方法与函数类似,封装了独立功能,但需要通过对象调用,表示针对这个对象要做的操作
2.6.3 元组tuple
1、元组()的定义
- 保存不同类型数据,不能修改
- 元组tuple元素不能修改!!
- 元组中只包含一个元素,需要在元素后面添加逗号
2、元组常用操作
3、循环遍历
4、应用场景
5、元组和列表之间的转换
2.6.4 字典dictionary
1、字典定义
- 注意:**字典是一个无序的数据结合,**使用print函数输出字典时,通常输出的顺序和定义的顺序是不一致的;
2、字典的增删查改
3、字典常用操作
4、循环遍历
5、字典和列表组合的应用场景
2.6.5 字符串
1、字符串定义
-
单引号
''
和双引号""
都可以定义字符串,可以在内部需要""
双引号时''
单引号定义;
2、字符串常用操作
-
(1)判断类型-9
-
isspace()判断空白字符
- \n,\t,\r都属于空白字符;
-
判断字符串中是否只包含数字
- 平时程序中尽量使用第一个,
isdecimal
因为程序中一般都是简单数字;
- 平时程序中尽量使用第一个,
-
(2)查找和替换-7
-
(3)大小写转换-5
-
(4)文本对齐-3
-
(5)去除空白字符-3
- (6)拆分和连接-5
3、字符串的切片
- 步长:在截取的部分不包括结束索引指定的位置,例如[0,2]就是py,没有t,步长就是跳跃选取;
- 倒序:从-1开始,-1指的就是n;
- 假如从0到-1是切不到n的,此时结束索引空出来,就可以了
字符串[开始索引:结束索引:步长]
- 字符串逆序就可以
num_str[-1::-1]
;从-1
开始,步长-1
;
2.6.6 公共方法
1、Python内置函数
- 字符串比较规则:
"0"<"A"<"a"
- del的两种方式
- max和min传入的是容器,而不是元素item
2、切片
-
切片方法适用于字符串、列表、元组
-
切片使用索引值来限定范围,从一个大的字符串中切出小的字符串;
-
列表和元组都是有序的集合,都能够通过索引值获取到对应的数据;
-
字典是一个无序的集合,是使用键值对保存数据;不能针对字典切片;
-
3、运算符
- 注意:
in
在对字典操作时,判断的是字典的键;in
和not in
被称为成员运算符;
- 字典中
Key
是唯一的; - +与extend,append区别在于,+生成一个新的,extend,append是修改原来的;extend和append区别如下图所示:
3、完整的for循环语法
2.7 综合应用—名片管理系统
2.8 变量进阶
- 变量的引用
- 可变和不可变类型
- 局部变量和全局变量
2.8.1 变量的引用
- 变量和数据都是保存在内存中的;
- 在python中函数的参数传递以及返回值都是靠引用传递的
1、引用的概念
2、调用函数传递本质上是实参的引用
3、函数返回值也是返回引用
2.8.2 可变和不可变类型
- 注意:字典的
key
只能使用不可变类型的数据
- 可变类型的数据变化,是通过方法来实现的
- 如果给一个可变类型的变量,赋值了一个新的数据,引用会修改
- 变量不再对之前的数据引用
- 变量改为对新赋值的数据引用
2.8.3 局部变量
2.8.4 全局变量
- 全局变量是在函数外部定义的变量,所有函数内部都可以使用这个变量
1、函数内部不允许直接修改全局变量
-
在函数内部,可以通过全局变量的引用获取对应的数据;
-
函数内部不允许直接修改全局变量的引用----不允许使用赋值语句修改全局变量的值!
2、global关键字修改全局变量
3、全局变量的定义的位置
- 将全局变量定义在其他函数的上方
4、全局变量命名的建议
2.9 函数进阶
- 函数参数和返回值的作用
- 函数的返回值 进阶
- 函数的参数 进阶
- 递归函数
2.9.1 函数的返回值—元组
- 交换两个变量的值
2.9.2 函数参数 进阶
-
但是,如果传入可变类型,可以通过方法来修改影响到外部变量
-
面试题,+=,
- 在python中,列表变量调用+=本质上是在执行列表变量的extend方法,不会修改变量的引用,会在原变量地址进行新增;
2.9.3 缺省参数
2.9.4 多值参数*args(元组)、**kwargs(字典)
- !!不然会出现如下结果,一个元组+一个字典被包装成一个元组传给了args!!