1、变量的命名规则?
1) 由字母、数字、下划线组成
2) 不能以数字开头
3) 不能使用python中的关键字
4) 变量名区分大小写,即相同名称大小写不同,那么这是两个变量
5) 建议:名字命名做到见名知意
2、注释代码的方式
1)单行注释: # ---> pycharm中的快捷键:ctrl+/
2) 多行注释: 三引号
3、字符串操作
1)切片操作: str [起始索引:结束索引:步长] 起始索引默认0,结束索引默认字符串最大索引。步长默认为1,步长为正则正序切,为负则反序切
I. 正序取所有 : str[:]
II. 反序取所有(字符串反序):str[::-1]
2) 常用操作:替换replace 、title单词首字母大写、大写upper 、小写lower、len字符串长度、count统计指定字符串出现的次数、index获取指定字符串索引的下标、id(str)获取内存地址
3)字符串不可变:指的是内存地址不可变。新的字符串会指向新的内存地址
4)字符串格式化:
① str1="姓名:{0},年龄:{1}".format(name,age)
② str2=f"姓名:{name},年龄:{age}"
5) 字符串常用判断
s.isalnum() 所有字符都是数字或者字母
s.isalpha() 所有字符都是字母
s.isdigit() 所有字符都是数字
s.islower() 所有字符都是小写
s.isupper() 所有字符都是大写
s.istitle() 所有单词都是首字母大写,像标题
s.isspace() 所有字符都是空白字符
str.strip(" ")
4、数据类型之列表
列表--list:使用 [value1,value2,value3] 表示,不限制数据类型
列表的特性:索引取值,值可变,不限制类型
列表类型为list的索引值从0开始,常用的函数方法有以下几种:
1、len(list_name) ==》 返回列表的长度n,最大索引下标值为n-1
2、list_name.count(数据) ==》 返回数据在列表中出现的次数
3、排序
list_name.sort() ==》升序排列,会改变列表原来的排序
list_name.sort(reverse=True) ==》降序排序,会改变列表原来的排序
list_name.reverse() ==》反序,会改变原列表的排序
4、删除
del list_name[索引] ==》 删除指定索引的数据
list_name.pop(2) ==》 删除指定索引对应的数据
list_name.pop() ==》 删除列表末尾的数据
del list_name==》 删除整个列表
list_name.remove["王五"] ==》 遍历列表,删除第一次出现的数据
5、取值
list_name[索引] ==》 从列表指定索引处取值
list_name.index(数据) ==》 获取数据在列表中第一次出现的索引
6、添加
list_name.insert(索引,数据) ==》 在指定位置插入数据
list_name.append(数据) ==》 在列表末尾追加数据,没有数据类型限制
list_name.extend(列表2) ==》将列表2的数据逐一添加至原列表
5、数据类型之元组
元组-tuple:使用 (value1,value2,value3) 表示,不限制数据类型
元组的特性:索引取值、值不可变;只读,无法进行增删改
1、示例
aa = ("111",'2')
print(aa[0])
6、数据类型之字典
字典-dict 使用 {key:value,key2:value2} 表示
字典的定义:
成员是key-value键值对的形式
无序的、无索引;key唯一,通过key取值
1、dict_name.keys() ==> 获取所有key
dict_name.values() ==>获取所有value
dict_name.items ==》 获取所有键值对,列表类型(值为元组)
2、取值
dict_name[key] ==> 依据key获取值,不存在报错
dict_name.get(key ) ==> 依据key获取值,不存在不会报错,返回none
3、 添加、修改
dict_name[key] =赋值
dict_name.setdefault(key,value) 键存在则返回键原有的值,不存在则新建键值对
dict_name.update(新字典) ==》 合并字典
4、删除
del dict_name ==》 删除整个字典
del dict_name[key] ==》依据key删除数据,不存在报错
dict_name.pop(key) ==》 删除指定键值对
dict_name.clear() ==》清空字典
dict_name.popitem() ==>删除最后一个键值对
7、数据类型之集合
集合 set:使用 {value1,value2} 标识
集合的定义: 值不可重复
1、 列表转集合并去重: set(列表)
2、 集合转列表并去重: list(集合)
#-------------开始代码段----------------------------------------
set1= {22,11,33}
list01=["aa",22,11,"'dd,22]
set_new= set(list01) #列表转换为集合,并去重
set_new= list(set_new) #集合转换为列表
#-------------结束代码段----------------------------------------
8、列表、元组、字典三者的转换
8.1 列表和元组的区别
1、元组只读,列表可以增删改
2、元组用() 表示,列表用[] 表示
3、元组不可变数据类型,列表可变数据类型
4、元组可以作为字典的key,列表不可以
5、元组的读取速度比列表更快
8.2 列表和字典的转换
1、字典存入列表时使用append,存入的是数据内存地址。当我们修改字典数据时会导致原来已经存入列表的字典数据也一起变更了 若不希望字典值变更时,列表不受影响则只拷贝值即可:list_name.append(dict_name.copy())
2、字典转列表:
字典的键转换为列表:list(dict_name)
字典的值转换为列表: list(dict_name.values())
8.3 字典转换为字符串
1、字典转字符串: str = str(dict_name)
9、 控制流
9.1 if … else …
#-------------开始代码段----------------------------------------
'''
如果if判断为真,则进入if分支,否则进入else。两个分支只会进入一个
'''
a=5
if a > 10:
print("比10大")
else:
print("比10小")
#-------------结束代码段----------------------------------------
9.2 if … elif … elif … else
#-------------开始代码段----------------------------------------
'''
如果if判断为真,则进入if分支,否则继续判断下一个if,直至最后一个elif都没有匹配则进入else分支。所有分支只会进入一个
'''
a=5
if a == 10:
print("和10一样大")
elif a == 2:
print("和2一样大")
elif a == 6:
print("和6一样大")
else:
print("没有匹配的")
#-------------结束代码段----------------------------------------
9.3 while 循环
#-------------开始代码段----------------------------------------
'''
如果while判断为真,则执行循环体内部代码,否则不执行
'''
i=1
while i<10:
print(f"现在是第{}次循环")
continue # 结束本次循环
i+=1
#-------------结束代码段----------------------------------------
9.4 for 循环
#-------------开始代码段----------------------------------------
'''
for循环遍历,遍历完成则结束循环
循环体内部不使用到变量,可以使用下划线【_】代替i
'''
for i in range(10):
break # 结束最近的整个循环
print(f"现在是第{}次循环")
#-------------结束代码段----------------------------------------
10、函数
10.1 函数的定义
1) 编写过程思路:
① 确定业务逻辑 ==》 什么数据是会变动的,可以将其设置为参数
2) 函数的参数参数类型:形参、实参
I. 位置参数/必传参数
II. 带默认值的参数,放在必传参数之后【传参的时候指定形参变量值】
III. 不定长参数/动态参数
10.2 函数的参数
1、不定长参数/动态参数: 传递的参数个数不限制,可以不传参数
* args
调用函数时,不限制数据类型,函数内部是一个元组,不限制数据类型
**kwargs
调用函数时,传参方式为==> key:value键值对, 函数内部是字典
1.1 判断参数个数
if args: # 判断参数个数是否为0,若为0则为False,有值则为True
2、*arge 和 **kwargs 同时使用时,*args放在前面
10.3 函数参数的解包
应用场景:(元组、列表数据)解包时,包里的个数要与函数的参数个数必须一致
(字典数据)拆包,参数必须是**kwargs才可以解包
#-------------开始代码段----------------------------------------
def sum(a, b, c):
# arge在函数内部是一个元组
print(f"函数调用结果为:{a+b+c}")
values = (1, 2, 3)
sum(*values) # 元组、列表数据解包
def sum02(**kwargs):
print(kwargs)
info = {"name": "张三", "age": 22}
sum02(**info)
def sum03(a):
return a, True
# 同时接收多个变量
bl01, bl02 = sum03(2)
print(bl01) # 输出2
print(bl02) #输出True
#-------------结束代码段----------------------------------------
10.4 函数的返回值
1) 可以没有返回值,返回值关键字:return
2) 一个函数可以有多个返回值,不同分支的返回值
3) return返回值:可以返回为None、元组
10.5 常用转义&占位符
1) 字符转义: \
print = 'ab\"是的是的' # 转义双引号
2) 取消转义: r
print = r 'asbc\nsdsd' # 取消转义,换行符不会执行
3) pass 语句占位: 暂时放着,一般用在函数内或逻辑判断中使用
if a=1:
pass
10.6 局部变量和全局变量
1) 局部变量: 函数内部定义的,作用域在函数内部
2) 全局变量: 模块内部定义的,作用域在模块内部。
I. 定义全局变量: global num01
II. 函数内部要修改全局变量的值需要先声明是全局变量
11、导入包、模块、函数
'''
1、如果相对于项目的路径当中,有包:
from 包名[.包名.包名] import 模块名 [as 别名]
2、如果相对于项目的路径当中,没有包:
import 模块名
3、导包注意:两个模块不能相互导入
4、包的类型
1) 标准库,python官方自带的
2) 第三方库:技术大佬开发者自行编写的开源的,一般使用pip 命令安装
3) 自定义库:用户自己编写封装的模块函数(包名不要与官方或第三方库的重名)
5、 当模块被其他程序调用时,不希望模块的测试代码被执行时,可以使用【 if __name__ == '__main__': 】只有当调用模块的程序是模块所属的文件时才会执行
'''
from 模块名 import 函数名
from 包名.模块名 import 函数1,函数2
# 别名 as,后续可以使用web_01的名称调用函数
from 模块名 import 函数名 as web_01
12、文件读写open()函数
12.1 文件读写
open() 函数,打开文件后, 如不在使用应当关闭文件
1、读取文件:r 模式,文件不存在会报错
1) read函数:读取所有文件内容,类似于游标。
2)redalines函数:按行读取文件内容。读取的是一个列表
2、写入文件: w 模式,文件不存在则创建新的文件
1) write()函数:写入会覆盖原有文件,即清空原有数据在写入
2)writeLines()函数:写入多行数据,传入的是字符串列表
3、追加文件内容: a 模式,文件不存在则会自动创建,内容添加在文件的最后
4、with ... as 别名. 用法:自带文件关闭的功能
with open(filepath,enconding='utf-8') as fs:
fs.write("写入的内容")
12.2 open函数
函数说明: open(文件路径,打开模式,编码格式)
1) r模式: 只读,文件不存在则会报错,默认为只读模式
2) w模式: 只写,若文件不存在则会创建;文件目录不存在会报错;会覆盖原有内容;只写不能读
3) a模式: 追加,若文件不存在则会创建;文件目录不存在会报错;内容直接添加在文件末尾
4) rb模式: 二进制方式读取,常用于读取图片
5) wb模式:二进制写,常用于保存图片
6) ab模式: 二进制追加,常用于打开图片
12.2 文件操作常用功能
1)os模块:常用函数:https://www.runoob.com/python3/python3-os-file-methods.html
os.lostdir(file_path) ==>输出当前路径下的所有文件,返回的是列表
os.getcwd() ==> 返回当前工作的目录
os .system(终端命令) ==> 执行终端命令
os.mkdir() ==>创建一个目录或文件夹,目录存在则报错
os.makedirs() ==>创建多个目录或文件夹,目录存在则报错
os.path.exists(文件路径) ==》 绝对路径,路径存在则返回True
2)动态获取路径:
file_path = os.path.abspath(__file__) ==》 获取当前文件所在的绝对路径
os.path.dirname(file_path ) ==> 获取当前文件所在的目录
os.path.join(起始路径,二级路径,三级路径.....) ==>拼接成完整的文件路径
os.path.isfile(路径) ==>判断是否为文件
os.path.isdir(路径) ==>判断是否为路径
13、异常
13.1 捕获与处理
1)基本格式:
try:
# 可能出现异常的代码
except BaseException :
# 出现异常后需要做的操作
finally:
# 不论是否出现异常,都会执行的代码
2) 直接抛出异常
raise ==》 抛出异常
2) 异常的处理:【except捕获匹配异常类型可以有多个,类似于if....elif ...elif...else语句】
try:
# 可能出现异常的代码
except ValueError: # 捕获到值错误的时候
# 出现异常后需要做的操作
except TypeError: # 捕获到类型错误的时候
# 处理代码
except Exception as e: # e代表别名,Execption匹配所有异常类型属于异常的基类
print(e)
else :
# 如果上面的异常类型都不匹配,则执行这个语句块
finally:
不论是否出现异常,都会执行的代码