python 基础语法
第一章 python简介
第二章 python基础语法
2.1 简单输出
1 |
|
默认分隔符为空格,结束符为换行符
2.2 注释
使用 #
表示单行注释 使用 """
表示多行注释
2.3 变量
变量是没有类型的,但是变量存储的数据是有类型的 可以使用
type()
查看变量类型
1 |
|
输出结果为
1 |
|
2.4 数据类型显式转换
可以使用 int(x)
float(x)
str(x)
转换成相应的数据类型 注意
任何类型都可以转换成字符串类型,但是转换为int和float类型之前需要确保能转换到相应的类型
2.5 运算符
常用运算符 + - * / % //
两个斜杠为取整除,即只保留结果的整数部分 **
两个星号为幂运算
1
2
3
4print(9//2)
print(9.0//2.0)
print(3**2)
# 输出结果为4 4.0 9
- not:取反运算符
- and:与运算符
- or 或运算符
成员运算符 - in:在指定序列中找到指定的值则返回True,否则返回False - not in
身份运算符 - is:判断两个标识符是否引用了同一个对象 - not is
2.6 字符串
字符串定义法:单引号,双引号,三引号(可以换行)
字符串内部可以使用转义字符 \
来输出引号
可以使用加号(+)来对字符串进行拼接,但是不用拼接其他类型的变量,需要转换成字符串类型
### 字符串格式化表示法 形式类似于c语言中printf括号中的内容 1
2
3massage = "第%d个苹果重%.2f%s" % (3, 1.2, "kg")
print(massage)
# 输出结果:第3个苹果重1.20kg
字符串快速格式化
f"内容{变量}"
的格式来快速格式化 1
2
3money = 1.2
massage = f"我有{money}这么多钱"
# 输出结果:我有1.2这么多钱
2.7 input语句
使用 input()
语句可以从键盘获取输入
使用一个变量接收(存储)input语句获取的键盘输入数据即可
无论输入的数据是什么,都是存储为string类型的
第三章 Python判断语句
3.1 布尔类型和比较运算符
bool类型表示真和假 True 为真,为 1 False 为假,为 0
比较运算符与C语言相同,注意,==
表示判断是否相等
3.2 if语句
语法格式: 1
2
3
4
5
6
7
8
9if 条件:
语句1
elif 条件2:
语句2
elif 条件3:
语句3
...
else:
语句N
第四章 Python循环语句
4.1 while循环
语法格式: 1
2
3
4while 条件:
语句1
语句2
...
将数据集中的每一个内容取出来进行处理。for循环是无法定义循环条件的,只能从数据集中依次取出内容
语法格式: 1
2for 临时变量 in 待处理数据集:
循环满足条件时执行的代码1
2
3
4
5name = "itheima"
# for循环处理字符串
for x in name:
print(x)
# 运行结果为将字符串中字符一个一个拿出来输出
语法格式中"待处理数据集"实际上为一个序列类型,其中包括字符串,列表,元组等等
通过range
语句可以获得一个简单的数字序列,用于for循环中
range(num)
为从0到num的数字序列(不包含num本身)
range(num1,num2)
为从num1到num2的数字序列(不包含num2本身)
range(num1,num2,step)
为从num1到num2的数字序列(不包含num2本身),步长为step
临时变量在编程规范上,作用范围(作用域)只限定在for循环内部 如果在for循环外部访问临时变量: 实际上是可以访问到的。但是在编程规范上,是不允许、不建议这么做的
4.3 continue和break
在嵌套循环中,只能作用在所在的循环上,无法对上层循环起作用
4.4 pass
pass是空语句,不执行任何操作,一般用作占位语句,保持程序的完整性
第五章 Python函数基础
5.1 函数的基本定义
1 |
|
应先定义函数,后调用函数 参数不需要,可以省略 返回值不需要,可以省略 可以在def一行下面采用多行注释的方式写该函数的说明文档
5.2 None类型
Python中有一个特殊的字面量:None,其类型是:<class 'NoneType'>
无返回值的函数,实际上就是返回了:None这个字面量
None表示:空的、无实际意义的意思
return None
,效果等同于不写return语句
在if判断中,None等同于False 一般用于在函数中主动返回None,配合if判断做相关处理
用于声明无内容的变量上
定义变量,但暂时不需要变量有具体值,可以用None来代替,例如name = None
5.3 局部变量与全局变量
在某一函数体内的为局部变量,只能在该函数体内生效 使用
global
关键字可以在函数内部声明全局变量
第六章 Python数据容器
6.1 list 列表
列表的特点: - 可以容纳多个元素(上限为2**63-1个) - 可以容纳不同类型的元素(混装) - 数据是有序存储的(有下标序号) - 允许重复数据存在 - 可以修改(增加或删除元素等)
6.1.1 列表的定义
1 |
|
以 []
作为表示,列表内每个元素之间以 ,
隔开
列表可以一次存储多个数据,并且可以是不同的数据类型,支持嵌套
6.1.2 列表的下标索引
从头开始第一个的索引为0,一直到最后,如 list[2]
从尾开始最后一个的索引是-1,一直到最前
如果是列表嵌套列表,则可以使用类似C语言二位数组的表达方式,如
list[1][2]
要注意下标索引的取值范围,超出范围无法取出元素,并且会报错
6.1.3 列表的常用方法
在Python中,如果将函数定义为class(类)的成员,那么函数会称之为:方法
方法的使用格式为 对象.方法(传入参数)
方法 | 作用 |
---|---|
列表.index(元素) | 查找指定元素在列表的下标 找不到报错ValueError |
列表[下标] = 值 | 修改特定位置的值 |
列表.insert(下标, 元素) | 在指定的下标位置,插入指定的元素 |
列表.append(元素) | 将指定元素,追加到列表的尾部 |
列表.extend(其它数据容器) | 将其它数据容器的内容取出,依次追加到列表尾部 |
del 列表[下标] | 删除列表指定下标元素 |
列表.pop(下标) | 删除列表指定下标元素 |
列表.remove(元素) | 从前向后,删除此元素第一个匹配项 |
列表.clear() | 清空列表 |
列表.count(元素) | 统计此元素在列表中出现的次数 找不到报错ValueError |
len(列表) | 统计容器内有多少元素 |
6.2 tuple 元组
元组的特点: - 有序、任意数量元素、允许重复元素 - 不可修改 元组内容不可以直接修改,会报错 如果元组内部有列表元素,列表中的内容可以修改
6.2.1 列表的定义
1 |
|
如果定义的元组只有一个元素时,在元素1后面要加一个逗号,例如
(1,)
,不然则不是元组类型
6.2.2 元组的下标索引
写法与列表相同,索引从0开始计算
6.2.3 元组的常用方法
- 元组.index()
- 元组.count()
- len(元组) 实际效果见6.1.3表格
6.3 str 字符串
字符串的特点: - 只可以储存字符串,长度任意 - 不可修改,如果要修改,只能得到一个新的字符串
6.3.1 字符串的下标索引
类似于C语言中字符数组,可以通过下标索引取出字符,索引从0号开始计算,但是没有最后的‘\0’占位符
6.3.2 字符串的常用方法
- str.index(参数)
参数可以是一个字符,也可以是一个字符串 - str.replace(m,n)
将字符串中的m字符串替换为n字符串,返回一个新的字符串 - str.split(分隔符)
按照指定的分割符将字符串分为多个字符串,返回一个列表对象 - str.strip(参数)
去除字符串前后的参数中的内容,注意是按照字符去除,而不是整体的字符串匹配。如果不传入参数则默认去除字符串前后的空格和换行 - str.count(参数)
- len(str)
6.4 序列的切片
序列是指能用下标索引的容器,例如:列表、元组、字符串 切片:从一个序列中取出一个子序列
语法:序列[起始下标:结束下标:步长]
,返回一个新的序列
结束下标表示到某位结束,不包含结束位
起始下标留空表示从头开始,结束下标留空表示截取到结尾
步长可以为正数,也可以为负数,表示反向取,主要这时起始下标和结束下标也要反向标记
str[::-1]
相当于将字符串从尾到头倒序输出
6.5 set 集合
集合的特点: - 无序,不支持下标索引访问 - 可以修改 - 数据不能重复 - 可以容纳多个数据,不同的数据类型
6.5.1 集合的定义
1 |
|
6.5.2 集合的常用方法
- set.add(ele)
- set.remove(ele)
- set.pop()
没有参数,随机取出一个元素,并将该元素从集合中去除 - set.clear()
清空集合 - set1.difference(set2)
取出集合1对集合2的差集(集合1有集合2没有的内容),返回一个集合 - set1.difference_update(set2)
对比集合1和集合2,在集合1内删除和集合2相同的元素。集合1被修改,集合2不变 - set1.union(set2)
将两个集合合并,返回一个新的集合 - len(set)
6.6 dict 字典
6.6.1 字典的定义
1 |
|
6.6.2 字典的常用方法
访问时可以使用dict[key]
获取某一键的值
- dict.keys()
返回包含所有键的列表 - dict.has_key(k)
检查字典中是否含有某一键 - dict.values()
返回包含所有值的列表 - dict.get(key)
返回字典的键 - dict.items()
返回有键值对组成的元组 - dict.copy()
复制字典到另一字典 - del dict(key)
删除指定键的元素 - dict.clear()
清除键的所有元素 - dict.pop(key)
弹出某一键的值,并从字典中删除
第七章 Python函数进阶
7.1 函数的多返回值
return函数后面可以写多个返回值,用逗号隔开 1
2
3
4def test_return():
return 1, "hello", True
x, y, z = test_return()
# x,y,z会对应接收到相应的值
7.2 函数的多种传参方式
Python的传参是传对象引用,是一个对象的内存地址,是传值和传址的一个综合 如果收到的是一个可以改变(字典或者列表)的对象的引用,就能修改对象的初始值;如果是一个不可修改(数字、字符、字符串或者元组)的对象,则不能直接修改原始对象。
7.2.1 位置参数
调用函数时根据函数定义的参数位置来传递参数
7.2.2 关键值参数
函数调用时通过“键=值”形式传递参数 1
2
3
4
5
6def user_info(name, age, gender):
print(f"姓名是:{name}, 年龄是:{age}, 性别是:{gender}")
# 关键字参数
user_info(name='小王', age=11, gender='女')
user_info(age=10, gender='女', name='潇潇') # 可以不按照参数的定义顺序传参
user_info('甜甜', gender='女', age=9) # 不表明名称的位置需对应
7.2.3 缺省参数
参数提供默认值,调用函数时可不传该默认参数的值
注意:所有位置参数必须出现在默认参数前,包括函数定义和调用
1
2
3
4
5def user_info(name, age, gender='男'):
print(f"姓名是:{name}, 年龄是:{age}, 性别是:{gender}")
user_info('小天', 13, '女')
user_info('小乐', 13)
7.2.4 不定长参数
不定长参数有两种类型 1. 位置传递(元组,*号) 2.
关键字传递(字典,**号) 1
2
3
4
5
6
7
8
9
10
11# 不定长 - 位置不定长, *号
# 不定长定义的形式参数会作为元组存在,接收不定长数量的参数传入
def user_info(*args):
print(f"args参数的类型是:{type(args)},内容是:{args}")
user_info(1, 2, 3, '小明', '男孩')
# 不定长 - 关键字不定长, **号
def user_info(**kwargs):
print(f"args参数的类型是:{type(kwargs)},内容是:{kwargs}")
user_info(name='小王', age=11, gender='男孩')
7.3 函数可以作为参数传递
函数本身是可以作为参数,传入另一个函数中进行使用的。
将函数传入的作用在于:传入计算逻辑,而非传入数据。 1
2
3
4
5
6
7
8
9
10
11# 定义一个函数,接收另一个函数作为传入参数
def test_func(compute):
result = compute(1, 2) # 确定compute是函数
print(f"compute参数的类型是:{type(compute)}")
print(f"计算结果:{result}")
# 定义一个函数,准备作为参数传入另一个函数
def compute(x, y):
return x + y
# 调用,并传入函数
test_func(compute)
7.4 lambda匿名函数
lambda关键字,可以定义匿名函数(无名称),无名称的匿名函数,只可临时使用一次。
lambda函数基本语法:lambda 传入参数:函数体(一行代码)
第八章 文件操作
8.1 打开文件
使用open函数打开文件,并返回一个文件对象
myfile = open(file_name [, mode='r' [ , buffering=-1 [ , encoding = None ]]])
mode为文件的读写模式 | mode | 模式 | 文件不存在时 | 是否覆盖写 | |
:---: | :---: | :----------: | :---------------: | | r
|
只读 | 报错 | - | | r+
| 读写 | 报错 | 是 | |
w
| 只写 | 新建文件 | 是 | | w+
| 读写 |
新建文件 | 是 | | a
| 只写 | 新建文件 | 否,从EOF处开始写 |
| a+
| 读写 | 新建文件 | 否,从EOF处开始写 |
在字母后面加上b表示用二进制打开相应的文件,如rb+
用w或a打开文件时,文件指针指向文件末尾;
用r打卡文件时,文件指针指向文件开头
encoding为编码格式(推荐使用UTF-8)。encoding的位置不是第三位,如果要说明的话,应使用关键字参数。也可省略。
8.2 文件的常用属性
- file.name:返回文件的名称;
- file.mode:返回打开文件时,采用的文件打开模式;
- file.encoding:返回打开文件时使用的编码格式;
- file.closed:判断文件是否己经关闭。
8.3 文件的常用方法
- file.close()
- file.flush()
刷新输出缓存 - file.read([size])
如果设置了size,则读取size字节;如果没设置,则读取问价全部内容。 - file.readline([size])
如果设置了size,size小于改行总字节,则读取size字节;如果大于,则读取该行的所有内容 - file.readlines()
读取完文件,返回每行组成的列表 - file.write(str)
将字符串写入文件 - file.writelines(sequence of
strings)
写多行到文件,参数可以是字符串,也可以是列表 - file.seek(n)
将文件指针移动到第n字节,0表示开头 - file.tell()
返回文件指针当前的位置
8.4 shutil模块
shutil模块中包含一些函数,用于复制、移动、改名和删除文件
第九章 Python异常、模块与包
9.1 异常
捕获常规异常 1
2
3
4
5
6
7
8try:
可能发生错误的代码
except:
如果出现异常执行的代码
else:
如果异常不出现执行的代码
finally:
无论异常是否出现都要执行的代码1
2
3
4
5try:
print(name)
except NameError as e:
print('name变量名称未定义错误')
# 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。1
2
3
4try:
print(1/0)
except (NameError, ZeroDivisionError):
print('ZeroDivision错误...')1
2
3
4try:
print(name)
except Exception as e:
print(e)
异常是具有传递性的 当我们想要保证程序不会因为异常崩溃的时候, 就可以在main函数中设置异常捕获, 由于无论在整个程序哪里发生异常, 最终都会传递到main函数中, 这样就可以确保所有的异常都会被捕获
9.2 模块
模块是一个python文件,里面有类、函数、变量等等,可以导入模块来用
模块的导入语法:
[from 模块名] import [模块|类|变量|函数| * ] [as 别名]
模块的使用: 模块名.功能名 1
2
3
4
5
6
7
8
9
10# 使用import导入time模块中的sleep功能
# 方法1
import time
time.sleep(5)
# 方法2
from time import sleep
sleep(5)
# 方法3
from time import *
sleep(5)
注意:当导入多个模块,且模块内有重名的功能时,调用这个重名的功能时,使用的是后导入模块的该功能
if __name__ == '__main__':
可以用于某模块内部的运行代码,防止在导入模块时执行内置语句
__all__ = [' ' , ' ' , ...]
当模块文件中有
__all__
变量,使用 from xxx import *
导入时,只能导入列表中的元素
9.3 包
包就是一个文件夹,其中包含了很多的py文件和一个_init.py文件