话不多说,进入正题。
一、Python 安装(Windows 64位)
1.进入官网,下载Python。目前最高版本为 3.10.4
2.安装过程
网上教程很多,这里不作赘述。
二、编写第一个Python程序
在完成上述Python安装后,进入CMD命令界面,输入python即可编写程序。
在命令行界面输入:
print("Hello,World")
这样,第一个py程序就完成了!
三、Python解释器
它是一个计算机程序,它的作用就是用来将“print(xxx)...”等代码翻译成0101001的二进制数据,让计算机再执行。python解释器的安装位置在 <python安装目录>/python.exe。CMD上打开此程序的命令就是“python”。如下图所示:
还可以将上述代码放在一个文件中,文件格式为"xxx.py"。在CMD中使用命令 python D:/xxx/xxx.py
三、Python基础语法
1.字面量:像下面这样的数据都是字面量
"xxxx"
123
12.6
固定的值,称之为字面量
2.数据类型
类型 | 描述 | 说明 |
数字(Number) | 整数 => int 浮点数 => float 复数 =>complex 布尔 =>bool | 整数:0 ,-1,23 |
浮点数:13.14 | ||
复数:4+6j,j表示复数 | ||
布尔类型:True => 1 False => 0 | ||
字符串(String) | 描述文本的一种数据类型 | 可以用 "xxx" 、""" xxx """、'xxx' 表示字符串 |
列表 | ||
元组 | ||
集合 | ||
字典 |
可以使用 type() 查看数据的类型。
3.注释的写法
单行注释
# sadasd
多行注释
"""
dsad
asdsads
"""
注意:
# 单行注释内可以使用多行注释
# 多行注释内可以使用单行注释、
# 多行多行注释内不可以使用多行注释。
4.变量
在程序运行时,能存储计算结果或能表示值得抽象概念。
变量名 = 变量值
5.数据类型之间转换
常用的转换函数有 int(x),float(x),str(x)
string = '2344'
integer = int(string) # 将字符串 2344 转化为 integer类型
6. 标识符
给变量、方法、类等命令的值成为标识符。
例如:name = ‘aa’、sum=1+1...中的”name“、”sum“就是标识符。
其中重要的就是命名规则,如下所示:
内容限定:A-Z、a-z、0-9、”_“、中文;(数字不能开头)
大小写敏感:Andy、andy是不一样的;
不可使用关键字:False、for、if、while等都不允许使用;
命名规范 :
1.见名之意
2.英文字母全部小写
7.运算符
- 算数运算符
运算符 | 描述 |
---|---|
+ | 加 |
- | 减法 |
* | 乘 |
/ | 除 |
// | 取整除 |
% | 取余 |
** | 指数运算符 eg:2**6 表示2的6次方 |
-
赋值运算符
运算符 | 描述 |
---|---|
= | 赋值运算符 |
-
复合赋值运算符
运算符 | 描述 |
---|---|
+= | c+=a 等效于 c=c+a |
-= | c-a等效于c=c-a |
*= | c*=a等效于c=ca** |
/= | c/=a等效于c=c/a |
%= | c%=a等效于c=c%a |
=** | c**=a等效于c=c**a |
//= | c//=a等效于c=c//a |
注意:Python中没有自增、自减运算符。
-
比较运算符
运算符 | 描述 |
---|---|
== | 用于判断内容是否相等 |
!= | 用于判断内容是否不相等 |
> | |
< | |
>= | |
<= |
8.字符串的定义方式:
name='aaa'
name="aaa"
name="""aaa"""
当字符串中出现单引号[ ' ' ]或双引号[ " " ]时,使用 [ \ ]来进行转义。
字符串字面量可以和字符串变量进行拼接,但是不能和其他类型拼接。
下面代码运行报错:TypeError: can only concatenate str (not "int") to str
name="aaa" age=12
print("name = "+name+", 今年"+age+"岁")
9.字符串格式化(方法一)
name = "xxx"
print("xxxx %s" % name)
%s 表示一种字符串类型的格式占用符号,由name的值来替换%s的位置。
当有多个占位变量时,变量要使用括号,并按照顺序填入。
常见的格式符号
格式符号 | 转化 |
---|---|
%s | 字符串类型格式符 |
%d | 整数类型格式符 |
%f | 浮点类型格式符 |
精度控制
m . n
m:整体宽度,宽度需要大于等于 数字的长度,否则无效。
%m.n d:长度不足的在前面补充空格。
%m.n f :长度不足的在小数末尾补0,n省略时,表示只保留整数部分,四舍五入;m省略时,表示不限宽度。
n:小数点保留位数,会进行四舍五入处理。
例子:
f1=12.849
print("12.849格式化后为:%8.2f" % f1)
运行结果:12.849格式化后为: 12.85
可以看到,小数点也算作一位。
10.字符串格式化(方法二)
print(f "xxx{变量1}xxx{变量2}")
但这种方法不做精度控制,不理会类型。
四、判断语句格式
if xxx :
xxx
elif xxx :
xxx
else:
xxx
五、循环语句格式
while 循环:
while xxx:
xxx
xxx
for 循环
#方式一:
for xxx in xxx:
xxxx
continue
break
#方式二:
for xxx in range(1,10,2):
xxx
continue
break
range(A,B,C)表示 [A,B),C表示步长
range(1,99,2)表示[1,3,5,7,...,97]集合。
六、函数
函数:可以被重复使用,用来实现特定功能的代码段。
格式:
def 函数名(参数)
"""
函数注释部分
:param x:
:param y:
:return:
"""
函数体
#函数也可以没有return语句
return 返回值1,返回值2
当函数没有返回值,且有变量接受此函数时(例如name=test() ),那么该变量(name)的值为 None,类型为 NoneType, None可以在定义变量的时候使用,例如 name=None,需要的时候再赋值。
变量的作用域:
局部变量:定义在函数体内部的变量
局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量
全局变量:指的是在函数体内、外都能生效的变量
当局部变量和全局变量冲突时,可以使用global关键字,使用此关键字可以在函数内部声明变量为全局变量
integer=1
def test1() :
global integer#此时的integer就是全局变量的integer=1
integer+=9
test1()
print(integer)
#结果:10
七、数据容器
数据容器是指能够存储多个元素的数据类型
-
列表 list
-
元组 tuple
-
字符串 str
-
集合 set
-
字典 dict
列表
#字面量
[1,1.2,"aaa",{"name":"张飞"}]
#定义列表变量
list_data = [1,1.2,"aaa",{"name":"张飞"}]
#定义空列表
#方式一:
list1=[]
#方式二:
list2=list()
特点:
-
支持下标获取元素,左边下标从0开始,右边下标从-1开始
-
可以容纳不同类型的元素
-
增加、删除、修改某个元素
-
数据在逻辑上是有序排列的,可以有重复元素
常用函数:
编号 | 使用方式 | 作用 |
---|---|---|
1 | 列表.append(元素) | 向列表中追加一个元素 |
2 | 列表.extend(容器) | 将数据容器的内容依次取出,追加到列表尾部 |
3 | 列表.insert(下标, 元素) | 在指定下标处,插入指定的元素 |
4 | del 列表[下标] | 删除列表指定下标元素 |
5 | 列表.pop(下标) | 删除列表指定下标元素 |
6 | 列表.remove(元素) | 从前向后,删除此元素第一个匹配项 |
7 | 列表.clear() | 清空列表 |
8 | 列表.count(元素) | 统计此元素在列表中出现的次数 |
9 | 列表.index(元素) | 查找指定元素在列表的下标找不到报错ValueError |
10 | len(列表) | 统计容器内有多少元素 |
元组
#字面量
(1,1,1.2,"aaa",{"name":"张飞"})
#定义元组变量
tuple1=(1,1,1.2,"aaa",{"name":"张飞"})
#定义空元组
#方式一
tuple2=()
#方式二
tuple3=tuple()
特点:
-
数据不可以增加、删除、修改
-
可以容纳不同数据类型
-
支持下标索引
-
允许重复数据存在
常用函数:
编号 | 使用方式 | 作用 |
---|---|---|
1 | index() | 查找某个数据,如果存在返回下表,否则报错 |
2 | count() | 统计某个数据在当前元组出现的次数 |
3 | len(元组) | 统计某个元组内的元素个数 |
字符串
特点:
-
只可以存储字符
-
支持下标索引,正向、反向均可
-
不可以修改
常用函数:
编号 | 操作 | 说明 |
---|---|---|
1 | 字符串[下标] | 根据下标索引取出特定位置字符 |
2 | 字符串.index(字符串) | 查找给定字符的第一个匹配项的下标 |
3 | 字符串.replace(字符串1, 字符串2) | 将字符串内的全部字符串1,替换为字符串2不会修改原字符串,而是得到一个新的 |
4 | 字符串.split(字符串) | 按照给定字符串,对字符串进行分隔不会修改原字符串,而是得到一个新的列表 |
5 | 字符串.strip()字符串.strip(字符串) | 移除首尾的空格和换行符或指定字符串 |
6 | 字符串.count(字符串) | 统计字符串内某字符串的出现次数 |
7 | len(字符串) | 统计字符串的字符个数 |
以上三类数据类型也被称为序列。序列的特征是元素在容器中是顺序的 ,可以通过下标来获取对应的元素。
序列切片:
my_list=[1,2,3,4,5,6]
#下标1开始,下标4(不含)结束,步长1
newlist1=my_list[1:4] #结果:[2, 3, 4]
# 从头开始,到最后结束,步长1
newlist2=my_list[:] #结果:[1, 2, 3, 4, 5, 6]
# 从头开始,到最后结束,步长2
newlist3=my_list[::2] #结果:[1, 3, 5]
# 从头(最后)开始,到尾结束,步长-1(倒序)
newlist4=my_list[::-1] #结果:[6, 5, 4, 3, 2, 1]
# 从下标3开始,到下标1(不含)结束,步长-1(倒序)
newlist5=my_list[3:1:-1] #结果:[4, 3]
# 从头(最后)开始,到下标1(不含)结束,步长-2(倒序)
newlist6=my_list[:1:-1] #结果:[6, 5, 4, 3]
集合
#字面量
{1,1,1.2,"tomSmith"}
#定义集合变量
set1={1,1,1.2,"tomSmith"}
#定义空集合
set2=set()
特点:
-
可以容纳不同类型数据
-
数据之间是没有顺序的,不支持下标的方式索引
-
不允许重复元素存在
-
可以增加、删除元素
常用函数:
编号 | 操作 | 说明 |
---|---|---|
1 | 集合.add(元素) | 集合内添加一个元素 |
2 | 集合.remove(元素) | 移除集合内指定的元素 |
3 | 集合.pop() | 从集合中随机取出一个元素 |
4 | 集合.clear() | 将集合清空 |
5 | 集合1.difference(集合2) | 得到一个新集合,内含2个集合的差集原有的2个集合内容不变 |
6 | 集合1.difference_update(集合2) | 在集合1中,删除集合2中存在的元素集合1被修改,集合2不变 |
7 | 集合1.union(集合2) | 得到1个新集合,内含2个集合的全部元素原有的2个集合内容不变 |
8 | len(集合) | 得到一个整数,记录了集合的元素数量 |
字典
特点:
#字面量
{"name":"Tom","age":14,"sex":"boy"}
#定义字典变量
dict1={"name":"Tom","age":14,"sex":"boy"}
#定义空字典
#方式一
dict2={}
#方式二
dict3=dict()
-
不允许重复
-
可以使用key来检索value
-
可以容纳不同类型的数据
-
增加、删除、修改都可以
-
Python3.6之前,数据之间是无序的,3.6开始dict的插入变为有序,插入a,b,c返回结果就是a,b,c
常用函数:
编号 | 操作 | 说明 |
---|---|---|
1 | 字典[Key] | 获取指定Key对应的Value值 |
2 | 字典[Key] = Value | 添加或更新键值对 |
3 | 字典.pop(Key) | 取出Key对应的Value并在字典内删除此Key的键值对 |
4 | 字典.clear() | 清空字典 |
5 | 字典.keys() | 获取字典的全部Key,可用于for循环遍历字典 |
6 | len(字典) | 计算字典内的元素数量 |
总结
五种数据容器对比:
** ** | 列表 | 元组 | 字符串 | 集合 | 字典 |
---|---|---|---|---|---|
元素数量 | 支持多个 | 支持多个 | 支持多个 | 支持多个 | 支持多个 |
元素类型 | 任意 | 任意 | 仅字符 | 任意 | Key:ValueKey:除字典外任意类型Value:任意类型 |
下标索引 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
重复元素 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
可修改性 | 支持 | 不支持 | 不支持 | 支持 | 支持 |
数据有序 | 是 | 是 | 是 | 否 | 从python3.6开始,dict的插入变为有序,即字典整体变的有序 |
使用场景 | 可修改、可重复的一批数据记录场景 | 不可修改、可重复的一批数据记录场景 | 一串字符的记录场景 | 不可重复的数据记录场景 | 以Key检索Value的数据记录场景 |
容器通用操作:
功能 | 描述 |
---|---|
通用for循环 | 遍历容器(字典是遍历key) |
max | 容器内最大元素 |
min() | 容器内最小元素 |
len() | 容器元素个数 |
list() | 转换为列表 |
tuple() | 转换为元组 |
str() | 转换为字符串 |
set() | 转换为集合 |
sorted(序列, [reverse=True]) | 排序,reverse=True表示降序得到一个排好序的列表 |
八、函数进阶
函数多返回值
示例:
def test():
return 1,2
x,y = test()
函数传参方式
-
位置传参:调用函数时根据函数定义的参数位置来传递参数,注意:传递的参数和定义的参数的顺序及个数必须一致
例如:
def test1(id,name,age):
print(f"id={id},age={age},name={name}")
#位置传参
test1(1,"aaa",12)
2.关键字传参:函数调用时通过“键=值”形式传递参数.
-
def test1(id,name,age): print(f"id={id},age={age},name={name}") # 关键字参数 test1(name="asds",id='2',age=12) test1(id='2',age=12,name="asds") # 关键字参数 & 位置参数 :位置参数放在前面 test1(2,name="asds",age=12)
函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。
1.缺省参数:也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用).
# 缺省参数
def test2(name,age ,sex="男"):
print("缺省参数展示:")
print(f"您的名字是{name},年龄是{age},性别是{sex}")
test2("张飞",22)
2.不定长参数:不定长参数也叫可变参数. 用于不确定调用的时候会传递多少个参数(不传参也可以)的场景.
不定长参数的类型:
①位置传递:传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是 元组类型,这就是位置传递。
②关键字传递:参数是“键=值”形式的形式的情况下, 所有的“键=值”都会被kwargs接受, 同时会根据“键=值”组成字典.
#位置传递 agrs = 元组类型
def test3(*args):
print(type(args))
print(args)
test3("asdd","bbb",'c',12.30)
test3("ccc","ddd",'eee',12.30)
#关键字传递 agrs = 字典类型
def test4(**args):
print(type(args))
print(args)
test4(name ="tom",age=18,id=110)
函数作为参数传递 & lambda匿名函数
#函数作为参数传递
def test5(test6):
print(test6(12,23))
def test6(a,b):
return a,b
test5(test6)
#lambda匿名函数
test5(lambda x,y: x+y )
九、文件操作
相关函数
1.open(name,mode,encoding)
name : 要打开的目标文件位置字符串(绝对路径、相对路径均可)
mode :设置打开文件的模式(访问模式):常用的有r(只读),w(写入),a(追加操作)
具体描述如下:
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
encoding : 编码格式
示例代码:
#打开相对路径文件
f=open("test1.txt","r",encoding="UTF-8")
#打开绝对路径文件
f=open("C:\\Users\\tomzz\\Desktop\\test1.txt","r",encoding="UTF-8")
2.read(num)
num:读取的字符数量,如果省略,那么就表示读取所有字符。
3.readlines()
按照行的方式把整个文件中的内容进行一次读取,并且返回的是一个列表。
示例:
f=open('python.txt',"r",encoding="UTF-8")
content=f.readlines()
print(content)
f.close()
4.readline()
一次读取一行内容
5.for循环读取文件行
for line in open("python.txt","r")
print(line)
#每一个line临时变量,就记录了文件的一行数据
6.close()
关闭对文件的占用
7.with open()
该语句执行后会自动关闭当前文件。
示例:
with open("test1.txt","r") as f
content=f.readlines()
8.文件写入相关函数
f.write('xxxx')
f.flush()
注意:
-
直接调用wirite,内容并未真正写入文件,而是会积攒在程序的内存中(缓冲区)
-
当调用flush时候,内容会正真写入到文件中。
十、异常处理
异常:
基本语法:
try:
可能发生错误的代码
except:
如果出现异常执行的代码
#或者
except NameError as e:#注意:尝试执行的代码的异常类型和要捕获的异常类型一致,否则无法捕获异常。
print("xxxx")
#或者 捕获所有异常信息
except Exception as e:
print(e)
else:
print("xxx") #没有异常时候执行的代码
finally:
xxx #无论异常都要执行的部分