(一)三元运算
三元运算又称三目运算,对简单条件语句的简写,如:
if 条件成立:
val =1
else:
val =2
三元运算:
val =1 if 条件成立 else 2
(二)文件处理
f=open(file="file_path",mode=‘r‘,encoding=‘utf-8‘)
data=f.read()
f.close()
1、二进制模式
r:文本只读模式,默认将二进制转换为字符串
rb:二进制模式读取,不进行转码,硬盘怎么存储怎么读取。如网络传输的文本或img或视频等。不写encoding参数
2、智能检测编码工具,chardet
chardet.detect()
3、写模式操作文件:
w:可写模式,创建新文件。有则覆盖,无责创建
wb:二进制模式写入,无需encoding参数。写视频,图片等。
4、追加模式:
a:普通追加模式
ab:二进制模式追加
5、混合模式:
r+:先读取内容,支持内容追加
w+:先写入(创建)内容,支持内容读取
6、文件操作其他方法:
fileno()返回文件句柄在内核中的索引值,IO多路复用可用
flush()把文件从内存buffer(缓存)里强制刷新到硬盘
readline()只读一行,遇到\n或\r为止
seek()移动光标到指定位置 ,按字节移动光标,utf-8三个字节一个字符,gbk两个字节一个字符
seekable()判断文件是否可进行seek操作
tell()返回光标所在位置,按字节返回光标
truncate()按指定长度截断文件,按指定长度截取文件,均从首位截取
writable()判断文件是否可写
7、文件修改
逐行,os.rename()重命名,truncate()截取
(三)函数编程
1、函数基本介绍
将一组语句集合通过一个名字封装起来,想要执行这个函数,只需要调用其函数名即可。
def sayhi():#函数名
print("Hello,I‘m nobody!")
减少重复代码
使程序变的可扩展,易维护
2、函数默认参数
形参:只有在被调用时,才分配内存单元。只在内部有效。函数调用结束返回主调用函数后不能在使用该形参变量
实参:可以是常量、变量、表达式、函数等,无论类型,在调用时他们都必须有确定的值,以便将这些值传
默认参数:默认参数必须跟在位置参数(非默认参数)后面
3、函数关键参数
只需要在调用的时候指定参数名,关键参数也必须放在位置参数之后。
4、非固定参数
*形参名,将参数组成元组。一般都写成*args。可直接传递列表或元组。传入列表将打包成元组的第一个参数,为避免该问题,在列表或元组前面加*符号。
**行参名,一般写成**kwargs,单个字典传入需在实参前加**符号
5、返回值
默认返回None,return只能放函数最后位置,表示一个函数终止。支持任意类型数据返回,包括函数名
6、函数局部变量
在函数内部定义的变量称局部变量,只能在函数内部使用,函数执行完则回收。里面能调用外面参数,外面不能调用函数内部变量。如果函数内部和外部都有一个同名变量,函数将从内至外查找。
7、函数全局变量
定义在函数外部一级代码的变量,叫全局变量,从上至下全局可用。函数内部默认无法修改全部变量,修改默认则创建局部变量。
8、函数内部修改全局变量
用global关键字声明
9、函数内部修改全局列表
可修改列表内容,不能修改列表整体。修改整体需global关键字。
10、函数嵌套
函数内部再定义函数。要想执行必须调用
11、函数作用域
在py中,一个函数就是一个作用域。局部变量放置在其作用域中。一个变量定义完成后,作用域就已经确定
12、匿名函数
多行语句变为一行,减少代码量,看着更高级
#常规函数
def calc(x,y):
if x < y:
return x*y
else:
return x/y
#声明匿名函数
func=lambda x,y:x*y if x<y else x/y
print(calc(9,8))
print(func(9,8))
和其他方法混用
#求一个列表元素平方
data=list(range(10))
print(data)
for index,i in enumerate(data):
data[index]=i*i
print(data)
#匿名函数方法
print(list(map(lambda x:x*x,data)))
13、高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接受另一个函数作为参数,这种函数称为高阶函数。
(五)数据类型
1、浮点数
(1)、定义:有限小数和无线循环小数统称为浮点数
(2)、Python中精确度:只能精确到小数点后16位,因存储结构问题,其他语言也有相似问题。
(3)、高精度计算方法:用decimal中的getcontshext()和Decimal()方法
2、列表
列表是一个有序数据集合,集合内可以放任何数据,可对集合操作增删改查操作。
(1)、创建:L1=[]或L1=list()
(2)、查询:通过索引进行查询。查找索引值index(),只能找到第一个匹配项。统计count()方法
(3)、切片:L2=L1[x:y:j],顾头(x)不顾尾(x)原则,j为步长
(4)、增加:append()方法追加元素到末尾,insert(i,x)方法插入元素到指定位置,两个列表相加可用"+"符号连接,也可用L1.extend(L2)方法
(5)、修改:L1[i]="new obj"或L1[x:y]="new obj"
(6)、删除:L1.pop()删除末尾元素并返回该对象。L1.remove(obj)删除指定对象(查找的第一个),L1.remove(i)删除index为i的元素。Del L1删除列表L1对象,del L1[x:y]删除多个元素。清空列表L1.clear()
(7)、循环:
(8)、排序:L1.sort(),只能通类型排序。L1.reverse()反转序列
(9)、copy:只能第一层列表独立即浅复制,需要整个列表对象完全独立需用导入copy模块,用copy.deepcopy()方法
3、字符串
字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,一对单、双、三引号中间包含的内容称之为字符串。
1、特性:
?.有序
?.不可变
2、方法:
s.swapcase()大小写转换
s. capitalize()首字母大写,其他小写
s. casefold()转换成小写
s.center()格式化字符串,指定字符串长度和两边占位符
s.count()统计字符串,可指定统计范围
s.endswith()判断是否以某字符结尾
s.expandtabs()扩展table键,即指定table键的长度
s.find()返回指定字符索引,找不到返回-1,也可指定范围
s.format()字符串格式化,
s.index()返回自定字符的索引,可指定开始和结束
s.isalnum()是否是阿拉伯字符,包括数字和字母
s.isalpha()是否全是字母
s.isdigit()类似s.isdecimal()或s.isnumeric()是是否全是整数
s.isidentifier()是否为可用变量名
s.isprintable()
s.isspace()判断是否为空格
s.istitle()第一个字符均大写
s.isupper()是否均为大写
s.lower()转换为小写
s.upper()转换为大写
s.join()字符串拼接
s.ljust()从左边开始,将字符串变为指定长度字符串,类似rjust()
s.strip()去掉指定字符串,默认为空格和换行
s.lstrip()去掉左边指定字符串rstrip()
str.maketrans()创建对应表格
s.translate()更具表格翻译字符串
s.partition()以某字符串将字符串分割成两半,左边查找到的第一个字符rpartition相反
s.replace()替换字符串,可指定更换个数
s.rfind()查找最右边指定字符,找不到返回-1
s.rindex()类似rfind,找不到则报错
s.strip()根据自定字符分割成列表
s.rstrip()默认和strip无区别
s.splitlines()按行分割
s.startwith()判断以某字符串开始
s.endwith()判断以某字符结束
s.title()变为title格式
s.zfill()将字符串变为指定长度,不够的左边填零
3、元组
一旦创建,便不能再修改,也叫只读列表
?功能:
index
count
切片
?作用:显示告知,不能修改,如配置信息等
4、hash
将任意长度的消息压缩到某一固定长度的消息后再输出。不通的输入通过散列算法可能会散列成相同的输出,所以不能从散列值来唯一确定输入值。因此被hash的值必须是不可变的,如数字、字符串、元组等。
用途:
文件签名
Md5加密
密码验证
语法:
hash(obj)
5、字典
字典是一种key-value的数据类型,key必须唯一,且可hash,字典无序的,且查找速度快。
判断是否存在:in方法
获取:get(),有则返回,无则返回None。直接中括号获取,无则报KeyError
删除:pop(‘key‘)删除指定key并返回key对应的value,popitem()随机删除一个,clear(),del d[‘key‘]
多级嵌套:
copy():类似列表copy
values():打印所有值
keys():打印所有key
items():key和value组成元组,并放入一个列表中
update():类似list中extend(),两个字典合并成一个,重复key则覆盖
setdefault():有key则获取,无key则设置
fromkeys():批量生成字典
6、集合
无序,不重复的数据集合。作用为去重(把列表变为集合自动去重)和关系测试
列表和元组可转换为集合。
add():增加,只能添加一个
pop():随机删除一个值
remove():删除指定对象,不存在则报错
discard():删除指定对象,不存在也不报错
update():两个集合联合在一起,可添加多个值,列表方式
clear():清空
关系测试:
交集:intersection()或&
差集:difference()或-
并集:union()或|
取交集相反(对称差集):symmetric_difference()
判断是否子集:issubset()或<=
判断是否为超集:issuperset()或>=
判断两个集合是否相交:isdisjoint()
(六)进制拾遗
1、python中进制转换
oct(int):转八进制
hex(int):转十六进制
bin(int):转二进制
2、为何使用十六进制
八进制很少使用。
在操作系统和编码中均使用十六进制,方便查看,统一规范,便于网络抓包分析。
3、十六进制与二进制转换
二进制转16进制:取四合一(从左朝右取四位二进制转换成10进制)
16进制转二进制:刚好与二进制转16进制相反
表示:0x前缀(有时会将0忽略掉)或BH后缀
(七)字符编码
1、UTF是unicode编码设计得一种在存储和传输时节省空间得编码方案
2、decode(),encode()
3、可通过type()查看字符类型
4、python3中文件默认为utf-8编码,字符串编码是unicode
python2文件默认是ascii嘛,字符串默认是ascii码,若文件头有声明编码类型,则字符串编码也就是该类型。unicode类型在python2中是单独一个类型。
5、python中bytes类型:
?、在py2中,bytes和str是一回事儿,因为要表示图片视频等二进制格式得数据,所以有bytes类型。py2以utf8编码的字符串在Windows下无法显示。decode()或声明为unicode。
?、在py3中,str等于unicode